forked from jonmmorgan/wxwebconnect
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxulrunner_private_headers_192.h
executable file
·567 lines (499 loc) · 22.8 KB
/
xulrunner_private_headers_192.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
#ifndef __WXWEBCONNECT_XULRUNNER_PRIVATE_HEADERS_192_H
#define __WXWEBCONNECT_XULRUNNER_PRIVATE_HEADERS_192_H
class nsIScriptContext;
class nsIArray;
class nsScriptErrorEvent;
class nsEventStatus;
class nsIScriptGlobalObjectOwner;
class nsPresContext;
class nsEvent;
class nsIDocShell;
class nsIDOMWindowInternal;
class nsIScriptContext;
class nsIDOMDocument;
class nsIDOMEvent;
class nsPresContext;
class nsIScriptGlobalObjectOwner;
class nsIArray;
class nsScriptErrorEvent;
class nsIScriptGlobalObject;
struct JSObject; // until we finally remove GetGlobalJSObject...
// Some helpers for working with integer "script type IDs", and specifically
// for working with arrays of such objects. For example, it is common for
// implementations supporting multiple script languages to keep each
// language's nsIScriptContext in an array indexed by the language ID.
// Implementation note: We always ignore nsIProgrammingLanguage::UNKNOWN and
// nsIProgrammingLanguage::CPLUSPLUS - this gives javascript slot 0. An
// attempted micro-optimization tried to avoid us going all the way to
// nsIProgrammingLanguage::MAX; however:
// * Someone is reportedly working on a PHP impl - that has value 9
// * nsGenericElement therefore allows 4 bits for the value.
// So there is no good reason for us to be more restrictive again...
#define NS_STID_FIRST nsIProgrammingLanguage::JAVASCRIPT
// like nsGenericElement, only 4 bits worth is valid...
#define NS_STID_LAST (nsIProgrammingLanguage::MAX > 0x000FU ? \
0x000FU : nsIProgrammingLanguage::MAX)
// Use to declare the array size
#define NS_STID_ARRAY_UBOUND (NS_STID_LAST-NS_STID_FIRST+1)
// Is a language ID valid?
#define NS_STID_VALID(langID) (langID >= NS_STID_FIRST && langID <= NS_STID_LAST)
// Return an index for a given ID.
#define NS_STID_INDEX(langID) (langID-NS_STID_FIRST)
// Create a 'for' loop iterating over all possible language IDs (*not* indexes)
#define NS_STID_FOR_ID(varName) \
for (varName=NS_STID_FIRST;varName<=NS_STID_LAST;varName++)
// Create a 'for' loop iterating over all indexes (when you don't need to know
// what language it is)
#define NS_STID_FOR_INDEX(varName) \
for (varName=0;varName<=NS_STID_INDEX(NS_STID_LAST);varName++)
// A helper function for nsIScriptGlobalObject implementations to use
// when handling a script error. Generally called by the global when a context
// notifies it of an error via nsIScriptGlobalObject::HandleScriptError.
// Returns PR_TRUE if HandleDOMEvent was actually called, in which case
// aStatus will be filled in with the status.
PRBool
NS_HandleScriptError(nsIScriptGlobalObject *aScriptGlobal,
nsScriptErrorEvent *aErrorEvent,
nsEventStatus *aStatus);
#define NS_ISCRIPTGLOBALOBJECT_IID \
{ 0xe9f3f2c1, 0x2d94, 0x4722, \
{ 0xbb, 0xd4, 0x2b, 0xf6, 0xfd, 0xf4, 0x2f, 0x48 } }
/**
* The global object which keeps a script context for each supported script
* language. This often used to store per-window global state.
*/
class nsIScriptGlobalObject : public nsISupports
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISCRIPTGLOBALOBJECT_IID)
// NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISCRIPTGLOBALOBJECT_IID)
/**
* Ensure that the script global object is initialized for working with the
* specified script language ID. This will set up the nsIScriptContext
* and 'script global' for that language, allowing these to be fetched
* and manipulated.
* @return NS_OK if successful; error conditions include that the language
* has not been registered, as well as 'normal' errors, such as
* out-of-memory
*/
virtual nsresult EnsureScriptEnvironment(PRUint32 aLangID) = 0;
/**
* Get a script context (WITHOUT added reference) for the specified language.
*/
virtual nsIScriptContext *GetScriptContext(PRUint32 lang) = 0;
/**
* Get the opaque "global" object for the specified lang.
*/
virtual void *GetScriptGlobal(PRUint32 lang) = 0;
// Set/GetContext deprecated methods - use GetScriptContext/Global
virtual JSObject *GetGlobalJSObject() {
return (JSObject *)GetScriptGlobal(nsIProgrammingLanguage::JAVASCRIPT);
}
virtual nsIScriptContext *GetContext() {
return GetScriptContext(nsIProgrammingLanguage::JAVASCRIPT);
}
/**
* Set a new language context for this global. The native global for the
* context is created by the context's GetNativeGlobal() method.
*/
virtual nsresult SetScriptContext(PRUint32 lang, nsIScriptContext *aContext) = 0;
/**
* Called when the global script for a language is finalized, typically as
* part of its GC process. By the time this call is made, the
* nsIScriptContext for the language has probably already been removed.
* After this call, the passed object is dead - which should generally be the
* same object the global is using for a global for that language.
*/
virtual void OnFinalize(PRUint32 aLangID, void *aScriptGlobal) = 0;
/**
* Called to enable/disable scripts.
*/
virtual void SetScriptsEnabled(PRBool aEnabled, PRBool aFireTimeouts) = 0;
/**
* Handle a script error. Generally called by a script context.
*/
virtual nsresult HandleScriptError(nsScriptErrorEvent *aErrorEvent,
nsEventStatus *aEventStatus) {
return NS_HandleScriptError(this, aErrorEvent, aEventStatus);
}
};
//NS_DEFINE_STATIC_IID_ACCESSOR(nsIScriptGlobalObject,
// NS_ISCRIPTGLOBALOBJECT_IID)
// 87482b5e-e019-4df5-9bc2-b2a51b1f2d28
#define NS_ISCRIPTCONTEXT_IID \
{ 0x87482b5e, 0xe019, 0x4df5, \
{ 0x9b, 0xc2, 0xb2, 0xa5, 0x1b, 0x1f, 0x2d, 0x28 } }
class nsIAtom;
class nsIScriptContextOwner;
typedef void (*nsScriptTerminationFunc)(nsISupports* ref);
class nsIScriptGlobalObject;
class nsIScriptSecurityManager;
class nsIPrincipal;
class nsIAtom;
class nsIArray;
class nsIVariant;
class nsIObjectInputStream;
class nsIObjectOutputStream;
class nsScriptObjectHolder;
/**
* It is used by the application to initialize a runtime and run scripts.
* A script runtime would implement this interface.
* <P><I>It does have a bit too much java script information now, that
* should be removed in a short time. Ideally this interface will be
* language neutral</I>
*/
class nsIScriptContext : public nsISupports
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISCRIPTCONTEXT_IID)
// NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISCRIPTCONTEXT_IID)
/* Get the ID of this language. */
virtual PRUint32 GetScriptTypeID() = 0;
/**
* Compile and execute a script.
*
* @param aScript a string representing the script to be executed
* @param aScopeObject a script object for the scope to execute in, or
* nsnull to use a default scope
* @param aPrincipal the principal that produced the script
* @param aURL the URL or filename for error messages
* @param aLineNo the starting line number of the script for error messages
* @param aVersion the script language version to use when executing
* @param aRetValue the result of executing the script, or null for no result.
* If this is a JS context, it's the caller's responsibility to
* preserve aRetValue from GC across this call
* @param aIsUndefined true if the result of executing the script is the
* undefined value
*
* @return NS_OK if the script was valid and got executed
*
**/
virtual nsresult EvaluateString(const nsAString& aScript,
void *aScopeObject,
nsIPrincipal *aPrincipal,
const char *aURL,
PRUint32 aLineNo,
PRUint32 aVersion,
nsAString *aRetValue,
PRBool* aIsUndefined) = 0;
// Note JS bigotry remains here - 'void *aRetValue' is assumed to be a
// jsval. This must move to JSObject before it can be made agnostic.
virtual nsresult EvaluateStringWithValue(const nsAString& aScript,
void *aScopeObject,
nsIPrincipal *aPrincipal,
const char *aURL,
PRUint32 aLineNo,
PRUint32 aVersion,
void* aRetValue,
PRBool* aIsUndefined) = 0;
/**
* Compile a script.
*
* @param aText a PRUnichar buffer containing script source
* @param aTextLength number of characters in aText
* @param aScopeObject an object telling the scope in which to execute,
* or nsnull to use a default scope
* @param aPrincipal the principal that produced the script
* @param aURL the URL or filename for error messages
* @param aLineNo the starting line number of the script for error messages
* @param aVersion the script language version to use when executing
* @param aScriptObject an executable object that's the result of compiling
* the script.
*
* @return NS_OK if the script source was valid and got compiled.
*
**/
virtual nsresult CompileScript(const PRUnichar* aText,
PRInt32 aTextLength,
void* aScopeObject,
nsIPrincipal* aPrincipal,
const char* aURL,
PRUint32 aLineNo,
PRUint32 aVersion,
nsScriptObjectHolder &aScriptObject) = 0;
/**
* Execute a precompiled script object.
*
* @param aScriptObject an object representing the script to be executed
* @param aScopeObject an object telling the scope in which to execute,
* or nsnull to use a default scope
* @param aRetValue the result of executing the script, may be null in
* which case no result string is computed
* @param aIsUndefined true if the result of executing the script is the
* undefined value, may be null for "don't care"
*
* @return NS_OK if the script was valid and got executed
*
*/
virtual nsresult ExecuteScript(void* aScriptObject,
void* aScopeObject,
nsAString* aRetValue,
PRBool* aIsUndefined) = 0;
/**
* Compile the event handler named by atom aName, with function body aBody
* into a function object returned if ok via aHandler. Does NOT bind the
* function to anything - BindCompiledEventHandler() should be used for that
* purpose. Note that this event handler is always considered 'shared' and
* hence is compiled without principals. Never call the returned object
* directly - it must be bound (and thereby cloned, and therefore have the
* correct principals) before use!
*
* If the compilation sets a pending exception on the native context, it is
* this method's responsibility to report said exception immediately, without
* relying on callers to do so.
*
*
* @param aName an nsIAtom pointer naming the function; it must be lowercase
* and ASCII, and should not be longer than 63 chars. This bound on
* length is enforced only by assertions, so caveat caller!
* @param aEventName the name that the event object should be bound to
* @param aBody the event handler function's body
* @param aURL the URL or filename for error messages
* @param aLineNo the starting line number of the script for error messages
* @param aVersion the script language version to use when executing
* @param aHandler the out parameter in which a void pointer to the compiled
* function object is stored on success
*
* @return NS_OK if the function body was valid and got compiled
*/
virtual nsresult CompileEventHandler(nsIAtom* aName,
PRUint32 aArgCount,
const char** aArgNames,
const nsAString& aBody,
const char* aURL,
PRUint32 aLineNo,
PRUint32 aVersion,
nsScriptObjectHolder &aHandler) = 0;
/**
* Call the function object with given args and return its boolean result,
* or true if the result isn't boolean.
*
* @param aTarget the event target
* @param aScript an object telling the scope in which to call the compiled
* event handler function.
* @param aHandler function object (function and static scope) to invoke.
* @param argv array of arguments. Note each element is assumed to
* be an nsIVariant.
* @param rval out parameter returning result
**/
virtual nsresult CallEventHandler(nsISupports* aTarget,
void *aScope, void* aHandler,
nsIArray *argv, nsIVariant **rval) = 0;
/**
* Bind an already-compiled event handler function to a name in the given
* scope object. The same restrictions on aName (lowercase ASCII, not too
* long) applies here as for CompileEventHandler. Scripting languages with
* static scoping must re-bind the scope chain for aHandler to begin (after
* the activation scope for aHandler itself, typically) with aTarget's scope.
*
* Logically, this 'bind' operation is more of a 'copy' - it simply
* stashes/associates the event handler function with the event target, so
* it can be fetched later with GetBoundEventHandler().
*
* @param aTarget an object telling the scope in which to bind the compiled
* event handler function. The context will presumably associate
* this nsISupports with a native script object.
* @param aName an nsIAtom pointer naming the function; it must be lowercase
* and ASCII, and should not be longer than 63 chars. This bound on
* length is enforced only by assertions, so caveat caller!
* @param aHandler the function object to name, created by an earlier call to
* CompileEventHandler
* @return NS_OK if the function was successfully bound to the name
*
* XXXmarkh - fold this in with SetProperty? Exactly the same concept!
*/
virtual nsresult BindCompiledEventHandler(nsISupports* aTarget, void *aScope,
nsIAtom* aName,
void* aHandler) = 0;
/**
* Lookup a previously bound event handler for the specified target. This
* will return an object equivilent to the one passed to
* BindCompiledEventHandler (although the pointer may not be the same).
*
*/
virtual nsresult GetBoundEventHandler(nsISupports* aTarget, void *aScope,
nsIAtom* aName,
nsScriptObjectHolder &aHandler) = 0;
/**
* Compile a function that isn't used as an event handler.
*
* NOTE: Not yet language agnostic (main problem is XBL - not yet agnostic)
* Caller must make sure aFunctionObject is a JS GC root.
*
**/
virtual nsresult CompileFunction(void* aTarget,
const nsACString& aName,
PRUint32 aArgCount,
const char** aArgArray,
const nsAString& aBody,
const char* aURL,
PRUint32 aLineNo,
PRUint32 aVersion,
PRBool aShared,
void **aFunctionObject) = 0;
/**
* Set the default scripting language version for this context, which must
* be a context specific to a particular scripting language.
*
**/
virtual void SetDefaultLanguageVersion(PRUint32 aVersion) = 0;
/**
* Return the global object.
*
**/
virtual nsIScriptGlobalObject *GetGlobalObject() = 0;
/**
* Return the native script context
*
**/
virtual void *GetNativeContext() = 0;
/**
* Return the native global object for this context.
*
**/
virtual void *GetNativeGlobal() = 0;
/**
* Create a new global object that will be used for an inner window.
* Return the native global and an nsISupports 'holder' that can be used
* to manage the lifetime of it.
*/
virtual nsresult CreateNativeGlobalForInner(
nsIScriptGlobalObject *aNewInner,
PRBool aIsChrome,
void **aNativeGlobal,
nsISupports **aHolder) = 0;
/**
* Connect this context to a new inner window, to allow "prototype"
* chaining from the inner to the outer.
* Called after both the the inner and outer windows are initialized
**/
virtual nsresult ConnectToInner(nsIScriptGlobalObject *aNewInner,
void *aOuterGlobal) = 0;
/**
* Init this context ready for use. If aGlobalObject is not NULL, this
* function may initialize based on this global (for example, using the
* global to locate a chrome window, create a new 'scope' for this
* global, etc)
*
* @param aGlobalObject the gobal object, which may be nsnull.
*
* @return NS_OK if context initialization was successful
*
**/
virtual nsresult InitContext(nsIScriptGlobalObject *aGlobalObject) = 0;
/**
* Check to see if context is as yet intialized. Used to prevent
* reentrancy issues during the initialization process.
*
* @return PR_TRUE if initialized, PR_FALSE if not
*
*/
virtual PRBool IsContextInitialized() = 0;
/**
* Called as the global object discards its reference to the context.
*/
virtual void FinalizeContext() = 0;
/**
* For garbage collected systems, do a synchronous collection pass.
* May be a no-op on other systems
*
* @return NS_OK if the method is successful
*/
virtual void GC() = 0;
/**
* Inform the context that a script was evaluated.
* A GC may be done if "necessary."
* This call is necessary if script evaluation is done
* without using the EvaluateScript method.
* @param aTerminated If true then call termination function if it was
* previously set. Within DOM this will always be true, but outside
* callers (such as xpconnect) who may do script evaluations nested
* inside DOM script evaluations can pass false to avoid premature
* calls to the termination function.
* @return NS_OK if the method is successful
*/
virtual void ScriptEvaluated(PRBool aTerminated) = 0;
virtual nsresult Serialize(nsIObjectOutputStream* aStream,
void *aScriptObject) = 0;
/* Deserialize a script from a stream.
*/
virtual nsresult Deserialize(nsIObjectInputStream* aStream,
nsScriptObjectHolder &aResult) = 0;
/**
* JS only - this function need not be implemented by languages other
* than JS (ie, this should be moved to a private interface!)
* Called to specify a function that should be called when the current
* script (if there is one) terminates. Generally used if breakdown
* of script state needs to happen, but should be deferred till
* the end of script evaluation.
*
* @throws NS_ERROR_OUT_OF_MEMORY if that happens
*/
virtual nsresult SetTerminationFunction(nsScriptTerminationFunc aFunc,
nsISupports* aRef) = 0;
/**
* Called to disable/enable script execution in this context.
*/
virtual PRBool GetScriptsEnabled() = 0;
virtual void SetScriptsEnabled(PRBool aEnabled, PRBool aFireTimeouts) = 0;
// SetProperty is suspect and jst believes should not be needed. Currenly
// used only for "arguments".
virtual nsresult SetProperty(void *aTarget, const char *aPropName, nsISupports *aVal) = 0;
/**
* Called to set/get information if the script context is
* currently processing a script tag
*/
virtual PRBool GetProcessingScriptTag() = 0;
virtual void SetProcessingScriptTag(PRBool aResult) = 0;
/**
* Tell the context whether or not to GC when destroyed. An optimization
* used when the window is a [i]frame, so GC will happen anyway.
*/
virtual void SetGCOnDestruction(PRBool aGCOnDestruction) = 0;
/**
* Initialize DOM classes on aGlobalObj, always call
* WillInitializeContext() before calling InitContext(), and always
* call DidInitializeContext() when a context is fully
* (successfully) initialized.
*/
virtual nsresult InitClasses(void *aGlobalObj) = 0;
/**
* Clear the scope object - may be called either as we are being torn down,
* or before we are attached to a different document.
*
* aClearFromProtoChain is probably somewhat JavaScript specific. It
* indicates that the global scope polluter should be removed from the
* prototype chain and that the objects in the prototype chain should
* also have their scopes cleared. We don't do this all the time
* because the prototype chain is shared between inner and outer
* windows, and needs to stay with inner windows that we're keeping
* around.
*/
virtual void ClearScope(void* aGlobalObj, PRBool aClearFromProtoChain) = 0;
/**
* Tell the context we're about to be reinitialize it.
*/
virtual void WillInitializeContext() = 0;
/**
* Tell the context we're done reinitializing it.
*/
virtual void DidInitializeContext() = 0;
/**
* Tell the context our global has a new document, and the scope
* used by it. Use nsISupports to avoid dependency issues - but expect
* a QI for nsIDOMDocument and/or nsIDocument.
*/
virtual void DidSetDocument(nsISupports *aDoc, void *aGlobal) = 0;
/* Memory managment for script objects. Used by the implementation of
* nsScriptObjectHolder to manage the lifetimes of the held script objects.
*
* See also nsIScriptRuntime, which has identical methods and is useful
* in situations when you do not have an nsIScriptContext.
*
*/
virtual nsresult DropScriptObject(void *object) = 0;
virtual nsresult HoldScriptObject(void *object) = 0;
virtual void EnterModalState() = 0;
virtual void LeaveModalState() = 0;
};
#endif