summaryrefslogtreecommitdiff
path: root/Source/WebCore/bindings/js/ScriptController.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/bindings/js/ScriptController.h')
-rw-r--r--Source/WebCore/bindings/js/ScriptController.h107
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