diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/bindings/js/ScriptController.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/bindings/js/ScriptController.h')
-rw-r--r-- | Source/WebCore/bindings/js/ScriptController.h | 107 |
1 files changed, 59 insertions, 48 deletions
diff --git a/Source/WebCore/bindings/js/ScriptController.h b/Source/WebCore/bindings/js/ScriptController.h index 67e96ec3c..58fd49da8 100644 --- a/Source/WebCore/bindings/js/ScriptController.h +++ b/Source/WebCore/bindings/js/ScriptController.h @@ -1,7 +1,7 @@ /* * Copyright (C) 1999 Harri Porten (porten@kde.org) * Copyright (C) 2001 Peter Kelly (pmk@post.com) - * Copyright (C) 2008 Apple Inc. All rights reserved. + * Copyright (C) 2008-2016 Apple Inc. All rights reserved. * Copyright (C) 2008 Eric Seidel <eric@webkit.org> * * This library is free software; you can redistribute it and/or @@ -19,8 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef ScriptController_h -#define ScriptController_h +#pragma once #include "FrameLoaderTypes.h" #include "JSDOMWindowShell.h" @@ -30,37 +29,40 @@ #include <wtf/RefPtr.h> #include <wtf/text/TextPosition.h> -#if PLATFORM(MAC) +#if PLATFORM(COCOA) #include <wtf/RetainPtr.h> -OBJC_CLASS WebScriptObject; OBJC_CLASS JSContext; +OBJC_CLASS WebScriptObject; #endif struct NPObject; -namespace Deprecated { -class ScriptValue; -} - namespace JSC { - class JSGlobalObject; - class ExecState; - - namespace Bindings { - class Instance; - class RootObject; - } +class ExecState; +class JSGlobalObject; +class JSInternalPromise; +class JSModuleRecord; + +namespace Bindings { +class Instance; +class RootObject; +} } namespace WebCore { -class HTMLPlugInElement; +class CachedScriptFetcher; class Frame; +class HTMLDocument; +class HTMLPlugInElement; +class LoadableModuleScript; class ScriptSourceCode; class SecurityOrigin; +class URL; class Widget; +struct ExceptionDetails; -typedef HashMap<void*, RefPtr<JSC::Bindings::RootObject>> RootObjectMap; +using RootObjectMap = HashMap<void*, RefPtr<JSC::Bindings::RootObject>>; enum ReasonForCallingCanExecuteScripts { AboutToExecuteScript, @@ -68,18 +70,21 @@ enum ReasonForCallingCanExecuteScripts { }; class ScriptController { - friend class ScriptCachedFrameData; + WTF_MAKE_FAST_ALLOCATED; + typedef HashMap<RefPtr<DOMWrapperWorld>, JSC::Strong<JSDOMWindowShell>> ShellMap; public: explicit ScriptController(Frame&); ~ScriptController(); - static PassRefPtr<DOMWrapperWorld> createWorld(); + WEBCORE_EXPORT static Ref<DOMWrapperWorld> createWorld(); - JSDOMWindowShell* createWindowShell(DOMWrapperWorld&); + JSDOMWindowShell& createWindowShell(DOMWrapperWorld&); void destroyWindowShell(DOMWrapperWorld&); + Vector<JSC::Strong<JSDOMWindowShell>> windowShells(); + JSDOMWindowShell* windowShell(DOMWrapperWorld& world) { ShellMap::iterator iter = m_windowShells.find(&world); @@ -97,9 +102,9 @@ public: static void getAllWorlds(Vector<Ref<DOMWrapperWorld>>&); - Deprecated::ScriptValue executeScript(const ScriptSourceCode&); - Deprecated::ScriptValue executeScript(const String& script, bool forceUserGesture = false); - Deprecated::ScriptValue executeScriptInWorld(DOMWrapperWorld&, const String& script, bool forceUserGesture = false); + JSC::JSValue executeScript(const ScriptSourceCode&, ExceptionDetails* = nullptr); + WEBCORE_EXPORT JSC::JSValue executeScript(const String& script, bool forceUserGesture = false, ExceptionDetails* = nullptr); + WEBCORE_EXPORT JSC::JSValue executeScriptInWorld(DOMWrapperWorld&, const String& script, bool forceUserGesture = false); // Returns true if argument is a JavaScript URL. bool executeIfJavaScriptURL(const URL&, ShouldReplaceDocumentIfJavaScriptURL shouldReplaceDocumentIfJavaScriptURL = ReplaceDocumentIfJavaScriptURL); @@ -108,18 +113,30 @@ public: // Darwin is an exception to this rule: it is OK to call this function from any thread, even reentrantly. static void initializeThreading(); - Deprecated::ScriptValue evaluate(const ScriptSourceCode&); - Deprecated::ScriptValue evaluateInWorld(const ScriptSourceCode&, DOMWrapperWorld&); + JSC::JSValue evaluate(const ScriptSourceCode&, ExceptionDetails* = nullptr); + JSC::JSValue evaluateInWorld(const ScriptSourceCode&, DOMWrapperWorld&, ExceptionDetails* = nullptr); + + void loadModuleScriptInWorld(LoadableModuleScript&, const String& moduleName, DOMWrapperWorld&); + void loadModuleScript(LoadableModuleScript&, const String& moduleName); + void loadModuleScriptInWorld(LoadableModuleScript&, const ScriptSourceCode&, DOMWrapperWorld&); + void loadModuleScript(LoadableModuleScript&, const ScriptSourceCode&); + + JSC::JSValue linkAndEvaluateModuleScriptInWorld(LoadableModuleScript& , DOMWrapperWorld&); + JSC::JSValue linkAndEvaluateModuleScript(LoadableModuleScript&); + + JSC::JSValue evaluateModule(const URL&, JSC::JSModuleRecord&, DOMWrapperWorld&); + JSC::JSValue evaluateModule(const URL&, JSC::JSModuleRecord&); WTF::TextPosition eventHandlerPosition() const; void enableEval(); void disableEval(const String& errorMessage); - static bool processingUserGesture(); + WEBCORE_EXPORT static bool processingUserGesture(); + WEBCORE_EXPORT static bool processingUserGestureForMedia(); static bool canAccessFromCurrentOrigin(Frame*); - bool canExecuteScripts(ReasonForCallingCanExecuteScripts); + WEBCORE_EXPORT bool canExecuteScripts(ReasonForCallingCanExecuteScripts); // Debugger can be 0 to detach any existing Debugger. void attachDebugger(JSC::Debugger*); // Attaches/detaches in all worlds/window shells. @@ -130,44 +147,40 @@ public: const String* sourceURL() const { return m_sourceURL; } // 0 if we are not evaluating any script - void clearWindowShell(DOMWindow* newDOMWindow, bool goingIntoPageCache); + void clearWindowShellsNotMatchingDOMWindow(DOMWindow*, bool goingIntoPageCache); + void setDOMWindowForWindowShell(DOMWindow*); void updateDocument(); void namedItemAdded(HTMLDocument*, const AtomicString&) { } void namedItemRemoved(HTMLDocument*, const AtomicString&) { } void clearScriptObjects(); - void cleanupScriptObjectsForPlugin(void*); + WEBCORE_EXPORT void cleanupScriptObjectsForPlugin(void*); void updatePlatformScriptObjects(); - PassRefPtr<JSC::Bindings::Instance> createScriptInstanceForWidget(Widget*); - JSC::Bindings::RootObject* bindingRootObject(); + RefPtr<JSC::Bindings::Instance> createScriptInstanceForWidget(Widget*); + WEBCORE_EXPORT JSC::Bindings::RootObject* bindingRootObject(); JSC::Bindings::RootObject* cacheableBindingRootObject(); - PassRefPtr<JSC::Bindings::RootObject> createRootObject(void* nativeHandle); + WEBCORE_EXPORT RefPtr<JSC::Bindings::RootObject> createRootObject(void* nativeHandle); -#if ENABLE(INSPECTOR) - static void setCaptureCallStackForUncaughtExceptions(bool); void collectIsolatedContexts(Vector<std::pair<JSC::ExecState*, SecurityOrigin*>>&); -#endif -#if PLATFORM(MAC) - WebScriptObject* windowScriptObject(); - JSContext *javaScriptContext(); +#if PLATFORM(COCOA) + WEBCORE_EXPORT WebScriptObject* windowScriptObject(); + WEBCORE_EXPORT JSContext *javaScriptContext(); #endif - JSC::JSObject* jsObjectForPluginElement(HTMLPlugInElement*); + WEBCORE_EXPORT JSC::JSObject* jsObjectForPluginElement(HTMLPlugInElement*); #if ENABLE(NETSCAPE_PLUGIN_API) - NPObject* createScriptObjectForPluginElement(HTMLPlugInElement*); - NPObject* windowScriptNPObject(); + WEBCORE_EXPORT NPObject* windowScriptNPObject(); #endif - bool shouldBypassMainWorldContentSecurityPolicy(); - private: - JSDOMWindowShell* initScript(DOMWrapperWorld&); + WEBCORE_EXPORT JSDOMWindowShell* initScript(DOMWrapperWorld&); + void setupModuleScriptHandlers(LoadableModuleScript&, JSC::JSInternalPromise&, DOMWrapperWorld&); void disconnectPlatformScriptObjects(); @@ -188,11 +201,9 @@ private: #if ENABLE(NETSCAPE_PLUGIN_API) NPObject* m_windowScriptNPObject; #endif -#if PLATFORM(MAC) +#if PLATFORM(COCOA) RetainPtr<WebScriptObject> m_windowScriptObject; #endif }; } // namespace WebCore - -#endif // ScriptController_h |