diff options
author | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-07 00:35:45 +0000 |
---|---|---|
committer | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-07 00:35:45 +0000 |
commit | 1ddcb86b486cca69ede1dca9bfdada8dfc49f6c2 (patch) | |
tree | f53ddbc693ba402094e48bd20459f8e232dd406e /webkit/pending | |
parent | 7c375dff6ca62059f510afd0de586757800cf6f4 (diff) | |
download | chromium_src-1ddcb86b486cca69ede1dca9bfdada8dfc49f6c2.zip chromium_src-1ddcb86b486cca69ede1dca9bfdada8dfc49f6c2.tar.gz chromium_src-1ddcb86b486cca69ede1dca9bfdada8dfc49f6c2.tar.bz2 |
Unfork ScriptController.h.
Review URL: http://codereview.chromium.org/6295
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@2923 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/pending')
-rw-r--r-- | webkit/pending/ScriptController.h | 328 |
1 files changed, 0 insertions, 328 deletions
diff --git a/webkit/pending/ScriptController.h b/webkit/pending/ScriptController.h deleted file mode 100644 index 3350289..0000000 --- a/webkit/pending/ScriptController.h +++ /dev/null @@ -1,328 +0,0 @@ -// 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. - -// An interface to abstract implementation differences -// for various Javascript engines. - -#ifndef ScriptController_h -#define ScriptController_h - -#include "HashMap.h" - -#include "bindings/npruntime.h" -#if USE(JSC) -#include <kjs/ustring.h> -#endif - -#include <wtf/HashMap.h> - -#if USE(V8) -#include "v8.h" -#include "v8_proxy.h" -#endif - -// 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; - -#if USE(JSC) -namespace KJS { - namespace Bindings { - class RootObject; - class Instance; - } -} -#endif - -namespace WebCore { -class Document; -class Frame; -class String; -class Node; -class EventListener; -class Event; -class HTMLPlugInElement; -class PausedTimeouts; -class Widget; - -// JSString is the string class used for XMLHttpRequest's -// m_responseText field. -#if USE(JSC) -typedef KJS::UString JSString; -typedef KJS::Bindings::Instance* JSInstance; -typedef KJS::Bindings::Instance* JSPersistentInstance; -typedef KJS::JSValue* JSException; -typedef KJS::JSValue* JSResult; -#endif - -#if USE(V8) -typedef String JSString; -typedef v8::Local<v8::Object> JSInstance; -typedef v8::Persistent<v8::Object> JSPersistentInstance; -typedef v8::Local<v8::Value> JSException; -typedef v8::Persistent<v8::Value> JSResult; -#endif - -class ScriptController { -public: - ScriptController(Frame*); - ~ScriptController(); - -#if USE(V8) - // TODO(eseidel): V8Proxy should either be folded into ScriptController - // or this accessor should be made JSProxy* - V8Proxy* proxy() { return m_proxy.get(); } -#endif - - // Evaluate a script file in the environment of this proxy. - // If succeeded, 'succ' is set to true and result is returned - // as a string. - String evaluate(const String& filename, int baseLine, const String& code, Node* node = NULL, bool* succ = NULL); - - // Second API function for evaluating a JS code. - // It returns a JSResult which must be disposed by calling - // disposeJSResult. If the result is not disposed, it can cause - // serious memory leak. The caller determines whether the evaluation - // is successful by checking the value of JSResult. - JSResult evaluate(const String& filename, int baseLine, const String& code, Node*); - void disposeJSResult(JSResult result); - void collectGarbage(); - - PassRefPtr<EventListener> createHTMLEventHandler(const String& functionName, const String& code, Node*); -#if ENABLE(SVG) - PassRefPtr<EventListener> createSVGEventHandler(const String& functionName, const String& code, Node*); -#endif - - // Get the Root object - // JSRootObject* getRootObject(); - // Creates a property of the global object of a frame. - void BindToWindowObject(Frame*, const String& key, NPObject*); - - NPRuntimeFunctions* functions(); - - JSInstance createScriptInstanceForWidget(Widget*); - - void clearPluginObjects(); - void clearDocumentWrapper(); - void disconnectFrame(); - - // Check if the javascript engine has been initialized. - bool haveInterpreter() const; - - bool isEnabled() const; - - // TODO(eseide): void* is a compile hack - void attachDebugger(void*); - - // Create a NPObject wrapper for a JSObject - // NPObject *WrapScriptObject(NPP pluginId, JSObject* objectToWrap, - // JSRootObject* originRootObject, - // JSRootObject* rootObject); - - // --- Static methods assume we are running VM in single thread, --- - // --- and there is only one VM instance. --- - - // Returns the frame of the calling code is in. - // Not necessary the frame of this proxy. - // For example, JS code in frame A calls windowB.open(...). - // Window::open method has the frame pointer of B, but - // the execution context is in frame A, so it needs - // frame A's loader to complete URL. - static Frame* retrieveActiveFrame(); - - // Check whether it is safe to access a frame in another domain. - static bool isSafeScript(Frame* target); - - // Tell the proxy that document.domain is set. - static void setDomain(Frame* target, const String& newDomain); - - // Pass command-line flags to the JS engine - static void setFlags(const char* str, int length); - - // Protect and unprotect the JS wrapper from garbage collected. - static void gcProtectJSWrapper(void* object); - static void gcUnprotectJSWrapper(void* object); - - // Get/Set RecordPlaybackMode flag. - // This is a special mode where JS helps the browser implement - // playback/record mode. Generally, in this mode, some functions - // of client-side randomness are removed. For example, in - // this mode Math.random() and Date.getTime() may not return - // values which vary. - static bool RecordPlaybackMode() { return m_recordPlaybackMode; } - static void setRecordPlaybackMode(bool value) { m_recordPlaybackMode = value; } - - void finishedWithEvent(Event*); - void setEventHandlerLineno(int lineno); - - void setProcessingTimerCallback(bool b) { m_processingTimerCallback = b; } - bool processingUserGesture() const; - - void setPaused(bool b) { m_paused = b; } - bool isPaused() const { return m_paused; } - - const String* sourceURL() const { return m_sourceURL; } // 0 if we are not evaluating any script - - void clearWindowShell(); - void updateDocument(); - - void pauseTimeouts(OwnPtr<PausedTimeouts>&); - void resumeTimeouts(OwnPtr<PausedTimeouts>&); - - void clearScriptObjects(); - void cleanupScriptObjectsForPlugin(void*); - -#if ENABLE(NETSCAPE_PLUGIN_API) - NPObject* createScriptObjectForPluginElement(HTMLPlugInElement*); - NPObject* windowScriptNPObject(); -#endif - -private: - static bool m_recordPlaybackMode; - - Frame* m_frame; - const String* m_sourceURL; - - bool m_processingTimerCallback; - bool m_paused; - -#if USE(V8) - OwnPtr<V8Proxy> m_proxy; - typedef HashMap<void*, NPObject*> PluginObjectMap; -#endif - -#if USE(JSC) - // The root object used for objects bound outside the context of a plugin. - RefPtr<KJS::Bindings::RootObject> m_bindingRootObject; - RootObjectMap m_rootObjects; -#elif USE(V8) - // 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; -#endif -#if ENABLE(NETSCAPE_PLUGIN_API) - NPObject* m_windowScriptNPObject; -#endif -}; - -// JSInstance is an abstraction for a wrapped C class. JSC and V8 -// have very different implementations. -class JSInstanceHolder { -public: - JSInstanceHolder(); - JSInstanceHolder(JSInstance); - ~JSInstanceHolder(); - // Returns true if the holder is empty. - bool IsEmpty(); - // Get the contained JSInstance. - JSInstance Get(); - // Clear the contained JSInstance. - void Clear(); - JSInstanceHolder& operator=(JSInstance); - static JSInstance EmptyInstance(); - -private: - JSPersistentInstance m_instance; -}; - -} // namespace WebCore - -#endif // ScriptController_h |