Index: webkit/port/bindings/v8/ScriptController.h |
=================================================================== |
--- webkit/port/bindings/v8/ScriptController.h (revision 16307) |
+++ webkit/port/bindings/v8/ScriptController.h (working copy) |
@@ -1,266 +1,169 @@ |
-// Copyright 2008, Google Inc. |
-// All rights reserved. |
-// |
-// Redistribution and use in source and binary forms, with or without |
-// modification, are permitted provided that the following conditions are |
-// met: |
-// |
-// * Redistributions of source code must retain the above copyright |
-// notice, this list of conditions and the following disclaimer. |
-// * Redistributions in binary form must reproduce the above |
-// copyright notice, this list of conditions and the following disclaimer |
-// in the documentation and/or other materials provided with the |
-// distribution. |
-// * Neither the name of Google Inc. nor the names of its |
-// contributors may be used to endorse or promote products derived from |
-// this software without specific prior written permission. |
-// |
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+/* |
+ * Copyright (C) 2008, 2009 Google Inc. All rights reserved. |
+ * |
+ * Redistribution and use in source and binary forms, with or without |
+ * modification, are permitted provided that the following conditions are |
+ * met: |
+ * |
+ * * Redistributions of source code must retain the above copyright |
+ * notice, this list of conditions and the following disclaimer. |
+ * * Redistributions in binary form must reproduce the above |
+ * copyright notice, this list of conditions and the following disclaimer |
+ * in the documentation and/or other materials provided with the |
+ * distribution. |
+ * * Neither the name of Google Inc. nor the names of its |
+ * contributors may be used to endorse or promote products derived from |
+ * this software without specific prior written permission. |
+ * |
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ */ |
-// An interface to abstract implementation differences |
-// for various Javascript engines. |
- |
#ifndef ScriptController_h |
#define ScriptController_h |
-#include "HashMap.h" |
-#include "MessagePort.h" |
#include "ScriptInstance.h" |
#include "ScriptValue.h" |
-#include "SecurityOrigin.h" |
-#include "bindings/npruntime.h" |
+#include "V8Proxy.h" |
+#include <v8.h> |
+ |
#include <wtf/HashMap.h> |
#include <wtf/Vector.h> |
-#include "v8.h" |
-#include "v8_proxy.h" |
- |
-// JavaScript implementations which expose NPObject will need to implement |
-// these methods. |
-typedef void (*NPN_ReleaseVariantValueProcPtr) (NPVariant *variant); |
- |
-typedef NPIdentifier(*NPN_GetStringIdentifierProcPtr) (const NPUTF8 *name); |
-typedef void (*NPN_GetStringIdentifiersProcPtr) (const NPUTF8 **names, |
- int32_t nameCount, |
- NPIdentifier *identifiers); |
-typedef NPIdentifier(*NPN_GetIntIdentifierProcPtr) (int32_t intid); |
-typedef int32_t (*NPN_IntFromIdentifierProcPtr) (NPIdentifier identifier); |
-typedef bool (*NPN_IdentifierIsStringProcPtr) (NPIdentifier identifier); |
-typedef NPUTF8 * (*NPN_UTF8FromIdentifierProcPtr) (NPIdentifier identifier); |
- |
-typedef NPObject* (*NPN_CreateObjectProcPtr) (NPP, |
- NPClass *aClass); |
-typedef NPObject* (*NPN_RetainObjectProcPtr) (NPObject *obj); |
-typedef void (*NPN_ReleaseObjectProcPtr) (NPObject *obj); |
-typedef bool (*NPN_InvokeProcPtr) (NPP npp, |
- NPObject *obj, |
- NPIdentifier methodName, |
- const NPVariant *args, |
- unsigned argCount, |
- NPVariant *result); |
-typedef bool (*NPN_InvokeDefaultProcPtr) (NPP npp, |
- NPObject *obj, |
- const NPVariant *args, |
- unsigned argCount, |
- NPVariant *result); |
-typedef bool (*NPN_EvaluateProcPtr) (NPP npp, |
- NPObject *obj, |
- NPString *script, |
- NPVariant *result); |
-typedef bool (*NPN_GetPropertyProcPtr) (NPP npp, |
- NPObject *obj, |
- NPIdentifier propertyName, |
- NPVariant *result); |
-typedef bool (*NPN_SetPropertyProcPtr) (NPP npp, |
- NPObject *obj, |
- NPIdentifier propertyName, |
- const NPVariant *value); |
-typedef bool (*NPN_HasPropertyProcPtr) (NPP, |
- NPObject *npobj, |
- NPIdentifier propertyName); |
-typedef bool (*NPN_HasMethodProcPtr) (NPP npp, |
- NPObject *npobj, |
- NPIdentifier methodName); |
-typedef bool (*NPN_RemovePropertyProcPtr) (NPP npp, |
- NPObject *obj, |
- NPIdentifier propertyName); |
-typedef void (*NPN_SetExceptionProcPtr) (NPObject *obj, |
- const NPUTF8 *message); |
- |
-typedef struct _NPRuntimeFunctions { |
- NPN_GetStringIdentifierProcPtr getStringIdentifier; |
- NPN_GetStringIdentifiersProcPtr getStringIdentifiers; |
- NPN_GetIntIdentifierProcPtr getIntIdentifier; |
- NPN_IdentifierIsStringProcPtr identifierIsString; |
- NPN_UTF8FromIdentifierProcPtr utf8FromIdentifier; |
- NPN_IntFromIdentifierProcPtr intFromIdentifier; |
- NPN_CreateObjectProcPtr createObject; |
- NPN_RetainObjectProcPtr retainObject; |
- NPN_ReleaseObjectProcPtr releaseObject; |
- NPN_InvokeProcPtr invoke; |
- NPN_InvokeDefaultProcPtr invokeDefault; |
- NPN_EvaluateProcPtr evaluate; |
- NPN_GetPropertyProcPtr getProperty; |
- NPN_SetPropertyProcPtr setProperty; |
- NPN_RemovePropertyProcPtr removeProperty; |
- NPN_HasPropertyProcPtr hasProperty; |
- NPN_HasMethodProcPtr hasMethod; |
- NPN_ReleaseVariantValueProcPtr releaseVariantValue; |
- NPN_SetExceptionProcPtr setException; |
-} NPRuntimeFunctions; |
- |
namespace WebCore { |
-class Document; |
-class EventListener; |
-class Event; |
-class Frame; |
-class HTMLPlugInElement; |
-class Node; |
-class ScriptSourceCode; |
-class ScriptState; |
-class String; |
-class Widget; |
+ class Event; |
+ class Frame; |
+ class HTMLPlugInElement; |
+ class ScriptSourceCode; |
+ class ScriptState; |
+ class String; |
+ class Widget; |
-typedef v8::Local<v8::Object> JSInstance; |
-typedef v8::Local<v8::Object> JSInstanceHandle; |
-typedef v8::Persistent<v8::Object> JSPersistentInstance; |
-typedef v8::Local<v8::Value> JSException; |
-typedef v8::Persistent<v8::Value> JSResult; |
+ class ScriptController { |
+ public: |
+ ScriptController(Frame*); |
+ ~ScriptController(); |
-class ScriptController { |
-public: |
- ScriptController(Frame*); |
- ~ScriptController(); |
+ // FIXME: V8Proxy should either be folded into ScriptController |
+ // or this accessor should be made JSProxy* |
+ V8Proxy* proxy() { return m_proxy.get(); } |
- // TODO(eseidel): V8Proxy should either be folded into ScriptController |
- // or this accessor should be made JSProxy* |
- V8Proxy* proxy() { return m_proxy.get(); } |
+ // Evaluate a script file in the environment of this proxy. |
+ // If succeeded, 'succ' is set to true and result is returned |
+ // as a string. |
+ ScriptValue evaluate(const ScriptSourceCode&); |
- // Evaluate a script file in the environment of this proxy. |
- // If succeeded, 'succ' is set to true and result is returned |
- // as a string. |
- ScriptValue evaluate(const ScriptSourceCode&); |
+ // Executes JavaScript in a new context associated with the web frame. The |
+ // script gets its own global scope and its own prototypes for intrinsic |
+ // JavaScript objects (String, Array, and so-on). It shares the wrappers for |
+ // all DOM nodes and DOM constructors. |
+ void evaluateInNewContext(const Vector<ScriptSourceCode>&); |
- // Executes JavaScript in a new context associated with the web frame. The |
- // script gets its own global scope and its own prototypes for intrinsic |
- // JavaScript objects (String, Array, and so-on). It shares the wrappers for |
- // all DOM nodes and DOM constructors. |
- void evaluateInNewContext(const Vector<ScriptSourceCode>& sources); |
+ // JSC has a WindowShell object, but for V8, the ScriptController |
+ // is the WindowShell. |
+ bool haveWindowShell() const { return true; } |
- // JSC has a WindowShell object, but for V8, the ScriptController |
- // is the WindowShell. |
- bool haveWindowShell() const { return true; } |
+ // Masquerade 'this' as the windowShell. |
+ // This is a bit of a hack, but provides reasonable compatibility |
+ // with what JSC does as well. |
+ ScriptController* windowShell() { return this; } |
- // Masquerade 'this' as the windowShell. |
- // This is a bit of a hack, but provides reasonable compatibility |
- // with what JSC does as well. |
- ScriptController* windowShell() { return this; } |
+ ScriptState* state() const { return m_scriptState.get(); } |
- ScriptState* state() const { return m_scriptState.get(); } |
+ void collectGarbage(); |
- void disposeJSResult(JSResult result); |
- void collectGarbage(); |
+ // Creates a property of the global object of a frame. |
+ void bindToWindowObject(Frame*, const String& key, NPObject*); |
- // Creates a property of the global object of a frame. |
- void BindToWindowObject(Frame*, const String& key, NPObject*); |
+ PassScriptInstance createScriptInstanceForWidget(Widget*); |
- NPRuntimeFunctions* functions(); |
+ void disconnectFrame(); |
- PassScriptInstance createScriptInstanceForWidget(Widget*); |
+ // Check if the javascript engine has been initialized. |
+ bool haveInterpreter() const; |
- void disconnectFrame(); |
+ bool isEnabled() const; |
- // Check if the javascript engine has been initialized. |
- bool haveInterpreter() const; |
+ // FIXME: void* is a compile hack. |
+ void attachDebugger(void*); |
- bool isEnabled() const; |
+ // --- Static methods assume we are running VM in single thread, --- |
+ // --- and there is only one VM instance. --- |
- // TODO(eseidel): void* is a compile hack |
- void attachDebugger(void*); |
+ // Returns the frame for the entered context. See comments in |
+ // V8Proxy::retrieveFrameForEnteredContext() for more information. |
+ static Frame* retrieveFrameForEnteredContext(); |
- // Create a NPObject wrapper for a JSObject |
- // NPObject *WrapScriptObject(NPP pluginId, JSObject* objectToWrap, |
- // JSRootObject* originRootObject, |
- // JSRootObject* rootObject); |
+ // Returns the frame for the current context. See comments in |
+ // V8Proxy::retrieveFrameForEnteredContext() for more information. |
+ static Frame* retrieveFrameForCurrentContext(); |
- // --- Static methods assume we are running VM in single thread, --- |
- // --- and there is only one VM instance. --- |
+ // Check whether it is safe to access a frame in another domain. |
+ static bool isSafeScript(Frame*); |
- // Returns the frame for the entered context. See comments in |
- // V8Proxy::retrieveFrameForEnteredContext() for more information. |
- static Frame* retrieveFrameForEnteredContext(); |
+ // Pass command-line flags to the JS engine. |
+ static void setFlags(const char* string, int length); |
- // Returns the frame for the current context. See comments in |
- // V8Proxy::retrieveFrameForEnteredContext() for more information. |
- static Frame* retrieveFrameForCurrentContext(); |
+ // Protect and unprotect the JS wrapper from garbage collected. |
+ static void gcProtectJSWrapper(void*); |
+ static void gcUnprotectJSWrapper(void*); |
- // Check whether it is safe to access a frame in another domain. |
- static bool isSafeScript(Frame* target); |
+ void finishedWithEvent(Event*); |
+ void setEventHandlerLineNumber(int lineNumber); |
- // Pass command-line flags to the JS engine |
- static void setFlags(const char* str, int length); |
+ void setProcessingTimerCallback(bool processingTimerCallback) { m_processingTimerCallback = processingTimerCallback; } |
+ bool processingUserGesture() const; |
- // Protect and unprotect the JS wrapper from garbage collected. |
- static void gcProtectJSWrapper(void* object); |
- static void gcUnprotectJSWrapper(void* object); |
+ void setPaused(bool paused) { m_paused = paused; } |
+ bool isPaused() const { return m_paused; } |
- void finishedWithEvent(Event*); |
- void setEventHandlerLineNumber(int lineno); |
+ const String* sourceURL() const { return m_sourceURL; } // 0 if we are not evaluating any script. |
- void setProcessingTimerCallback(bool b) { m_processingTimerCallback = b; } |
- bool processingUserGesture() const; |
+ void clearWindowShell(); |
+ void updateDocument(); |
- void setPaused(bool b) { m_paused = b; } |
- bool isPaused() const { return m_paused; } |
+ void updateSecurityOrigin(); |
+ void clearScriptObjects(); |
+ void updatePlatformScriptObjects(); |
+ void cleanupScriptObjectsForPlugin(void*); |
- const String* sourceURL() const { return m_sourceURL; } // 0 if we are not evaluating any script |
- |
- void clearWindowShell(); |
- void updateDocument(); |
- |
- void updateSecurityOrigin(); |
- void clearScriptObjects(); |
- void updatePlatformScriptObjects(); |
- void cleanupScriptObjectsForPlugin(void*); |
- |
#if ENABLE(NETSCAPE_PLUGIN_API) |
- NPObject* createScriptObjectForPluginElement(HTMLPlugInElement*); |
- NPObject* windowScriptNPObject(); |
+ NPObject* createScriptObjectForPluginElement(HTMLPlugInElement*); |
+ NPObject* windowScriptNPObject(); |
#endif |
-private: |
- Frame* m_frame; |
- const String* m_sourceURL; |
+ private: |
+ Frame* m_frame; |
+ const String* m_sourceURL; |
- bool m_processingTimerCallback; |
- bool m_paused; |
+ bool m_processingTimerCallback; |
+ bool m_paused; |
- OwnPtr<ScriptState> m_scriptState; |
- OwnPtr<V8Proxy> m_proxy; |
- typedef HashMap<void*, NPObject*> PluginObjectMap; |
+ OwnPtr<ScriptState> m_scriptState; |
+ OwnPtr<V8Proxy> m_proxy; |
+ typedef HashMap<void*, NPObject*> PluginObjectMap; |
- // A mapping between Widgets and their corresponding script object. |
- // This list is used so that when the plugin dies, we can immediately |
- // invalidate all sub-objects which are associated with that plugin. |
- // The frame keeps a NPObject reference for each item on the list. |
- PluginObjectMap m_pluginObjects; |
+ // A mapping between Widgets and their corresponding script object. |
+ // This list is used so that when the plugin dies, we can immediately |
+ // invalidate all sub-objects which are associated with that plugin. |
+ // The frame keeps a NPObject reference for each item on the list. |
+ PluginObjectMap m_pluginObjects; |
#if ENABLE(NETSCAPE_PLUGIN_API) |
- NPObject* m_windowScriptNPObject; |
+ NPObject* m_windowScriptNPObject; |
#endif |
-}; |
+ }; |
-} // namespace WebCore |
+} // namespace WebCore |
-#endif // ScriptController_h |
+#endif // ScriptController_h |