gecko/dom/base/nsIScriptContext.h
Ryan VanderMeulen 2f3de4dea0 Backed out 12 changesets (bug 899367) for Windows and OSX mochitest failures on a CLOSED TREE.
Backed out changeset 46cf4c3eb447 (bug 899367)
Backed out changeset d8a876219fc7 (bug 899367)
Backed out changeset d930333f95a7 (bug 899367)
Backed out changeset efae8cc0fff8 (bug 899367)
Backed out changeset 1dd262d146a6 (bug 899367)
Backed out changeset 4c396b8a51d0 (bug 899367)
Backed out changeset c8c30176639a (bug 899367)
Backed out changeset aaa8fbcf9aaf (bug 899367)
Backed out changeset d1a782044a4b (bug 899367)
Backed out changeset b2672ab55046 (bug 899367)
Backed out changeset fc4deb0b06fa (bug 899367)
Backed out changeset b9f1018a609c (bug 899367)
2013-08-27 21:14:54 -04:00

193 lines
6.5 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsIScriptContext_h__
#define nsIScriptContext_h__
#include "nscore.h"
#include "nsStringGlue.h"
#include "nsISupports.h"
#include "nsCOMPtr.h"
#include "nsIProgrammingLanguage.h"
#include "jspubtd.h"
#include "js/GCAPI.h"
class nsIScriptGlobalObject;
class nsIScriptSecurityManager;
class nsIPrincipal;
class nsIAtom;
class nsIArray;
class nsIVariant;
class nsIObjectInputStream;
class nsIObjectOutputStream;
class nsIScriptObjectPrincipal;
class nsIDOMWindow;
class nsIURI;
#define NS_ISCRIPTCONTEXT_IID \
{ 0x1d931a17, 0x453a, 0x47fb, \
{ 0x94, 0x66, 0x2d, 0x3e, 0xd1, 0xef, 0x7a, 0xc5 } }
/* This MUST match JSVERSION_DEFAULT. This version stuff if we don't
know what language we have is a little silly... */
#define SCRIPTVERSION_DEFAULT JSVERSION_DEFAULT
class nsIOffThreadScriptReceiver;
/**
* It is used by the application to initialize a runtime and run scripts.
* A script runtime would implement this interface.
*/
class nsIScriptContext : public nsISupports
{
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISCRIPTCONTEXT_IID)
/**
* 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.
* @param aOptions an options object. You probably want to at least set
* filename and line number. The principal is computed
* internally, though 'originPrincipals' may be passed.
* @param aCoerceToString if the return value is not JSVAL_VOID, convert it
* to a string before returning.
* @param aRetValue the result of executing the script. Pass null if you
* don't care about the result. Note that asking for a
* result will deoptimize your script somewhat in many cases.
*/
virtual nsresult EvaluateString(const nsAString& aScript,
JS::Handle<JSObject*> aScopeObject,
JS::CompileOptions& aOptions,
bool aCoerceToString,
JS::Value* aRetValue) = 0;
/**
* Bind an already-compiled event handler function to the given
* target. 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.
*
* The result of the bind operation is a new handler object, with
* principals now set and scope set as above. This is returned in
* aBoundHandler. When this function is called, aBoundHandler is
* expected to not be holding an object.
*
* @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 aScope the scope in which the script object for aTarget should be
* looked for.
* @param aHandler the function object to bind, created by an earlier call to
* CompileEventHandler
* @param aBoundHandler [out] the result of the bind operation.
* @return NS_OK if the function was successfully bound
*/
virtual nsresult BindCompiledEventHandler(nsISupports* aTarget,
JS::Handle<JSObject*> aScope,
JS::Handle<JSObject*> aHandler,
JS::MutableHandle<JSObject*> aBoundHandler) = 0;
/**
* Return the global object.
*
**/
virtual nsIScriptGlobalObject *GetGlobalObject() = 0;
/**
* Return the native script context
*
**/
virtual JSContext* GetNativeContext() = 0;
/**
* Return the native global object for this context.
*
**/
virtual JSObject* GetNativeGlobal() = 0;
/**
* Initialize the context generally. Does not create a global object.
**/
virtual nsresult InitContext() = 0;
/**
* Check to see if context is as yet intialized. Used to prevent
* reentrancy issues during the initialization process.
*
* @return true if initialized, false if not
*
*/
virtual bool IsContextInitialized() = 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(JS::gcreason::Reason aReason) = 0;
/**
* Called to disable/enable script execution in this context.
*/
virtual bool GetScriptsEnabled() = 0;
virtual void SetScriptsEnabled(bool aEnabled, bool aFireTimeouts) = 0;
// SetProperty is suspect and jst believes should not be needed. Currenly
// used only for "arguments".
virtual nsresult SetProperty(JS::Handle<JSObject*> aTarget,
const char* aPropName, nsISupports* aVal) = 0;
/**
* Called to set/get information if the script context is
* currently processing a script tag
*/
virtual bool GetProcessingScriptTag() = 0;
virtual void SetProcessingScriptTag(bool aResult) = 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(JS::Handle<JSObject*> aGlobalObj) = 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;
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsIScriptContext, NS_ISCRIPTCONTEXT_IID)
#define NS_IOFFTHREADSCRIPTRECEIVER_IID \
{0x3a980010, 0x878d, 0x46a9, \
{0x93, 0xad, 0xbc, 0xfd, 0xd3, 0x8e, 0xa0, 0xc2}}
class nsIOffThreadScriptReceiver : public nsISupports
{
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_IOFFTHREADSCRIPTRECEIVER_IID)
/**
* Notify this object that a previous CompileScript call specifying this as
* aOffThreadReceiver has completed. The script being passed in must be
* rooted before any call which could trigger GC.
*/
NS_IMETHOD OnScriptCompileComplete(JSScript* aScript, nsresult aStatus) = 0;
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsIOffThreadScriptReceiver, NS_IOFFTHREADSCRIPTRECEIVER_IID)
#endif // nsIScriptContext_h__