1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #ifndef nsIScriptContext_h__
8 #define nsIScriptContext_h__
9 
10 #include "nscore.h"
11 #include "nsStringGlue.h"
12 #include "nsISupports.h"
13 #include "nsCOMPtr.h"
14 #include "jspubtd.h"
15 #include "js/GCAPI.h"
16 
17 class nsIScriptGlobalObject;
18 
19 #define NS_ISCRIPTCONTEXT_IID \
20 { 0x54cbe9cf, 0x7282, 0x421a, \
21  { 0x91, 0x6f, 0xd0, 0x70, 0x73, 0xde, 0xb8, 0xc0 } }
22 
23 class nsIOffThreadScriptReceiver;
24 
25 /**
26  * It is used by the application to initialize a runtime and run scripts.
27  * A script runtime would implement this interface.
28  */
29 class nsIScriptContext : public nsISupports
30 {
31 public:
32   NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISCRIPTCONTEXT_IID)
33 
34   /**
35    * Return the global object.
36    *
37    **/
38   virtual nsIScriptGlobalObject *GetGlobalObject() = 0;
39 
40   /**
41    * Initialize the context generally. Does not create a global object.
42    **/
43   virtual nsresult InitContext() = 0;
44 
45   /**
46    * Check to see if context is as yet intialized. Used to prevent
47    * reentrancy issues during the initialization process.
48    *
49    * @return true if initialized, false if not
50    *
51    */
52   virtual bool IsContextInitialized() = 0;
53 
54   // SetProperty is suspect and jst believes should not be needed.  Currenly
55   // used only for "arguments".
56   virtual nsresult SetProperty(JS::Handle<JSObject*> aTarget,
57                                const char* aPropName, nsISupports* aVal) = 0;
58   /**
59    * Called to set/get information if the script context is
60    * currently processing a script tag
61    */
62   virtual bool GetProcessingScriptTag() = 0;
63   virtual void SetProcessingScriptTag(bool aResult) = 0;
64 
65   /**
66    * Initialize DOM classes on aGlobalObj, always call
67    * WillInitializeContext() before calling InitContext(), and always
68    * call DidInitializeContext() when a context is fully
69    * (successfully) initialized.
70    */
71   virtual nsresult InitClasses(JS::Handle<JSObject*> aGlobalObj) = 0;
72 
73   /**
74    * Tell the context we're about to be reinitialize it.
75    */
76   virtual void WillInitializeContext() = 0;
77 
78   /**
79    * Tell the context we're done reinitializing it.
80    */
81   virtual void DidInitializeContext() = 0;
82 
83   /**
84    * Access the Window Proxy. The setter should only be called by nsGlobalWindow.
85    */
86   virtual void SetWindowProxy(JS::Handle<JSObject*> aWindowProxy) = 0;
87   virtual JSObject* GetWindowProxy() = 0;
88 };
89 
NS_DEFINE_STATIC_IID_ACCESSOR(nsIScriptContext,NS_ISCRIPTCONTEXT_IID)90 NS_DEFINE_STATIC_IID_ACCESSOR(nsIScriptContext, NS_ISCRIPTCONTEXT_IID)
91 
92 #define NS_IOFFTHREADSCRIPTRECEIVER_IID \
93 {0x3a980010, 0x878d, 0x46a9,            \
94   {0x93, 0xad, 0xbc, 0xfd, 0xd3, 0x8e, 0xa0, 0xc2}}
95 
96 class nsIOffThreadScriptReceiver : public nsISupports
97 {
98 public:
99   NS_DECLARE_STATIC_IID_ACCESSOR(NS_IOFFTHREADSCRIPTRECEIVER_IID)
100 
101   /**
102    * Notify this object that a previous CompileScript call specifying this as
103    * aOffThreadReceiver has completed. The script being passed in must be
104    * rooted before any call which could trigger GC.
105    */
106   NS_IMETHOD OnScriptCompileComplete(JSScript* aScript, nsresult aStatus) = 0;
107 };
108 
109 NS_DEFINE_STATIC_IID_ACCESSOR(nsIOffThreadScriptReceiver, NS_IOFFTHREADSCRIPTRECEIVER_IID)
110 
111 #endif // nsIScriptContext_h__
112