Changeset 210627 in webkit
- Timestamp:
- Jan 12, 2017 1:01:40 AM (7 years ago)
- Location:
- trunk/Source
- Files:
-
- 2 added
- 19 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r210609 r210627 1 2017-01-12 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 Implement InlineClassicScript 4 https://bugs.webkit.org/show_bug.cgi?id=166925 5 6 Reviewed by Ryosuke Niwa. 7 8 Add ScriptFetcher field for SourceOrigin. 9 10 * runtime/SourceOrigin.h: 11 (JSC::SourceOrigin::SourceOrigin): 12 (JSC::SourceOrigin::fetcher): 13 1 14 2017-01-11 Andreas Kling <akling@apple.com> 2 15 -
trunk/Source/JavaScriptCore/runtime/SourceOrigin.h
r210149 r210627 26 26 #pragma once 27 27 28 #include "ScriptFetcher.h" 28 29 #include <wtf/text/WTFString.h> 29 30 … … 37 38 } 38 39 40 explicit SourceOrigin(const String& string, Ref<ScriptFetcher>&& fetcher) 41 : m_string(string) 42 , m_fetcher(WTFMove(fetcher)) 43 { 44 } 45 39 46 SourceOrigin() = default; 40 47 … … 42 49 bool isNull() const { return m_string.isNull(); } 43 50 51 ScriptFetcher* fetcher() const { return m_fetcher.get(); } 52 44 53 private: 45 54 String m_string; 55 RefPtr<ScriptFetcher> m_fetcher; 46 56 }; 47 57 -
trunk/Source/WebCore/CMakeLists.txt
r210588 r210627 1068 1068 bindings/js/CachedModuleScript.cpp 1069 1069 bindings/js/CachedModuleScriptLoader.cpp 1070 bindings/js/CachedScriptFetcher.cpp 1070 1071 bindings/js/CallbackFunction.cpp 1071 1072 bindings/js/CommonVM.cpp … … 1443 1444 dom/IdTargetObserver.cpp 1444 1445 dom/IdTargetObserverRegistry.cpp 1446 dom/InlineClassicScript.cpp 1445 1447 dom/InlineStyleSheetOwner.cpp 1446 1448 dom/InputEvent.cpp -
trunk/Source/WebCore/ChangeLog
r210621 r210627 1 2017-01-12 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 Implement InlineClassicScript 4 https://bugs.webkit.org/show_bug.cgi?id=166925 5 6 Reviewed by Ryosuke Niwa. 7 8 As of r210585, ScriptFetcher functionality is decoupled from ScriptElement. 9 This patch is a further cleanup. We introduce InlineClassicScript, which is 10 similar to LoadableClassicScript / LoadableModuleScript. And we move ScriptFetcher 11 functionality from LoadableScript to CachedScriptFetcher, which is the base 12 class of InlineClassicScript and LoadableScript. 13 14 And we start setting this CachedScriptFetcher to the member of JSC::SourceOrigin. 15 This allows us to examine the ScriptFetcher from the SourceOrigin. 16 When dynamic-import operator is called, we need to get the ScriptFetcher from the 17 caller script SourceOrigin since the subsequent module loading needs to know the 18 metadata about fetching and ScriptFetcher delivers it. 19 20 No behavior change. 21 22 * CMakeLists.txt: 23 * bindings/js/CachedModuleScript.cpp: 24 (WebCore::CachedModuleScript::load): 25 * bindings/js/CachedModuleScript.h: 26 * bindings/js/CachedModuleScriptLoader.cpp: 27 (WebCore::CachedModuleScriptLoader::create): 28 (WebCore::CachedModuleScriptLoader::CachedModuleScriptLoader): 29 (WebCore::CachedModuleScriptLoader::load): 30 * bindings/js/CachedModuleScriptLoader.h: 31 * bindings/js/CachedScriptFetcher.cpp: Copied from Source/WebCore/dom/LoadableScript.cpp. 32 (WebCore::CachedScriptFetcher::requestScriptWithCache): 33 * bindings/js/CachedScriptFetcher.h: Copied from Source/JavaScriptCore/runtime/SourceOrigin.h. 34 (WebCore::CachedScriptFetcher::CachedScriptFetcher): 35 * bindings/js/CachedScriptSourceProvider.h: 36 (WebCore::CachedScriptSourceProvider::create): 37 (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider): 38 (WebCore::makeSource): Deleted. 39 * bindings/js/ScriptController.cpp: 40 (WebCore::ScriptController::loadModuleScriptInWorld): 41 (WebCore::ScriptController::loadModuleScript): 42 * bindings/js/ScriptController.h: 43 * bindings/js/ScriptModuleLoader.cpp: 44 (WebCore::ScriptModuleLoader::fetch): 45 (WebCore::ScriptModuleLoader::notifyFinished): 46 * bindings/js/ScriptSourceCode.h: 47 (WebCore::ScriptSourceCode::ScriptSourceCode): 48 (WebCore::ScriptSourceCode::m_url): 49 * dom/InlineClassicScript.cpp: Added. 50 (WebCore::InlineClassicScript::create): 51 * dom/InlineClassicScript.h: Added. 52 * dom/LoadableClassicScript.cpp: 53 (WebCore::LoadableClassicScript::execute): 54 * dom/LoadableScript.cpp: 55 (WebCore::LoadableScript::requestScriptWithCache): Deleted. 56 * dom/LoadableScript.h: 57 (WebCore::LoadableScript::LoadableScript): 58 (): Deleted. 59 * dom/ScriptElement.cpp: 60 (WebCore::ScriptElement::prepareScript): 61 (WebCore::ScriptElement::requestModuleScript): 62 (WebCore::ScriptElement::executePendingScript): 63 * html/parser/HTMLScriptRunner.cpp: 64 (WebCore::HTMLScriptRunner::runScript): 65 * xml/parser/XMLDocumentParserLibxml2.cpp: 66 (WebCore::XMLDocumentParser::endElementNs): 67 1 68 2017-01-11 Eric Carlson <eric.carlson@apple.com> 2 69 -
trunk/Source/WebCore/bindings/js/CachedModuleScript.cpp
r210585 r210627 44 44 } 45 45 46 void CachedModuleScript::load(Document& document, const URL& rootURL, LoadableScript& loadableScript)46 void CachedModuleScript::load(Document& document, const URL& rootURL, CachedScriptFetcher& scriptFetcher) 47 47 { 48 48 if (auto* frame = document.frame()) 49 frame->script().loadModuleScript(*this, rootURL.string(), loadableScript);49 frame->script().loadModuleScript(*this, rootURL.string(), scriptFetcher); 50 50 } 51 51 52 void CachedModuleScript::load(Document& document, const ScriptSourceCode& sourceCode, LoadableScript& loadableScript)52 void CachedModuleScript::load(Document& document, const ScriptSourceCode& sourceCode, CachedScriptFetcher& scriptFetcher) 53 53 { 54 54 if (auto* frame = document.frame()) 55 frame->script().loadModuleScript(*this, sourceCode, loadableScript);55 frame->script().loadModuleScript(*this, sourceCode, scriptFetcher); 56 56 } 57 57 -
trunk/Source/WebCore/bindings/js/CachedModuleScript.h
r210585 r210627 53 53 static Ref<CachedModuleScript> create(); 54 54 55 void load(Document&, const URL& rootURL, LoadableScript&);56 void load(Document&, const ScriptSourceCode&, LoadableScript&);55 void load(Document&, const URL& rootURL, CachedScriptFetcher&); 56 void load(Document&, const ScriptSourceCode&, CachedScriptFetcher&); 57 57 58 58 private: -
trunk/Source/WebCore/bindings/js/CachedModuleScriptLoader.cpp
r210585 r210627 28 28 29 29 #include "CachedScript.h" 30 #include "CachedScriptFetcher.h" 30 31 #include "DOMWrapperWorld.h" 31 32 #include "Frame.h" 32 33 #include "JSDOMBinding.h" 33 #include "LoadableScript.h"34 34 #include "ResourceLoaderOptions.h" 35 35 #include "ScriptController.h" … … 39 39 namespace WebCore { 40 40 41 Ref<CachedModuleScriptLoader> CachedModuleScriptLoader::create(CachedModuleScriptLoaderClient& client, DeferredPromise& promise )41 Ref<CachedModuleScriptLoader> CachedModuleScriptLoader::create(CachedModuleScriptLoaderClient& client, DeferredPromise& promise, CachedScriptFetcher& scriptFetcher) 42 42 { 43 return adoptRef(*new CachedModuleScriptLoader(client, promise ));43 return adoptRef(*new CachedModuleScriptLoader(client, promise, scriptFetcher)); 44 44 } 45 45 46 CachedModuleScriptLoader::CachedModuleScriptLoader(CachedModuleScriptLoaderClient& client, DeferredPromise& promise )46 CachedModuleScriptLoader::CachedModuleScriptLoader(CachedModuleScriptLoaderClient& client, DeferredPromise& promise, CachedScriptFetcher& scriptFetcher) 47 47 : m_client(&client) 48 48 , m_promise(&promise) 49 , m_scriptFetcher(scriptFetcher) 49 50 { 50 51 } … … 58 59 } 59 60 60 bool CachedModuleScriptLoader::load(Document& document, LoadableScript& loadableScript,const URL& sourceURL)61 bool CachedModuleScriptLoader::load(Document& document, const URL& sourceURL) 61 62 { 62 63 ASSERT(!m_cachedScript); 63 m_cachedScript = loadableScript.requestScriptWithCache(document, sourceURL);64 m_cachedScript = m_scriptFetcher->requestScriptWithCache(document, sourceURL); 64 65 if (!m_cachedScript) 65 66 return false; -
trunk/Source/WebCore/bindings/js/CachedModuleScriptLoader.h
r210585 r210627 36 36 class CachedModuleScriptLoaderClient; 37 37 class CachedScript; 38 class CachedScriptFetcher; 38 39 class DeferredPromise; 39 40 class Document; 40 41 class JSDOMGlobalObject; 41 class LoadableScript;42 42 class URL; 43 43 44 44 class CachedModuleScriptLoader final : public RefCounted<CachedModuleScriptLoader>, private CachedResourceClient { 45 45 public: 46 static Ref<CachedModuleScriptLoader> create(CachedModuleScriptLoaderClient&, DeferredPromise& );46 static Ref<CachedModuleScriptLoader> create(CachedModuleScriptLoaderClient&, DeferredPromise&, CachedScriptFetcher&); 47 47 48 48 virtual ~CachedModuleScriptLoader(); 49 49 50 bool load(Document&, LoadableScript&,const URL& sourceURL);50 bool load(Document&, const URL& sourceURL); 51 51 52 CachedScriptFetcher& scriptFetcher() { return m_scriptFetcher.get(); } 52 53 CachedScript* cachedScript() { return m_cachedScript.get(); } 53 54 … … 59 60 60 61 private: 61 CachedModuleScriptLoader(CachedModuleScriptLoaderClient&, DeferredPromise& );62 CachedModuleScriptLoader(CachedModuleScriptLoaderClient&, DeferredPromise&, CachedScriptFetcher&); 62 63 63 64 void notifyFinished(CachedResource&) final; … … 65 66 CachedModuleScriptLoaderClient* m_client { nullptr }; 66 67 RefPtr<DeferredPromise> m_promise; 68 Ref<CachedScriptFetcher> m_scriptFetcher; 67 69 CachedResourceHandle<CachedScript> m_cachedScript; 68 70 }; -
trunk/Source/WebCore/bindings/js/CachedScriptFetcher.cpp
r210626 r210627 1 1 /* 2 * Copyright (C) 201 6 Apple, Inc. All Rights Reserved.2 * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com> 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 25 25 26 26 #include "config.h" 27 #include " LoadableScript.h"27 #include "CachedScriptFetcher.h" 28 28 29 29 #include "CachedResourceLoader.h" … … 31 31 #include "ContentSecurityPolicy.h" 32 32 #include "Document.h" 33 #include "LoadableScriptClient.h"34 33 #include "Settings.h" 35 34 36 35 namespace WebCore { 37 36 38 void LoadableScript::addClient(LoadableScriptClient& client) 39 { 40 m_clients.add(&client); 41 if (isLoaded()) { 42 Ref<LoadableScript> protectedThis(*this); 43 client.notifyFinished(*this); 44 } 45 } 46 47 void LoadableScript::removeClient(LoadableScriptClient& client) 48 { 49 m_clients.remove(&client); 50 } 51 52 void LoadableScript::notifyClientFinished() 53 { 54 RefPtr<LoadableScript> protectedThis(this); 55 56 Vector<LoadableScriptClient*> vector; 57 for (auto& pair : m_clients) 58 vector.append(pair.key); 59 for (auto& client : vector) 60 client->notifyFinished(*this); 61 } 62 63 CachedResourceHandle<CachedScript> LoadableScript::requestScriptWithCache(Document& document, const URL& sourceURL) const 37 CachedResourceHandle<CachedScript> CachedScriptFetcher::requestScriptWithCache(Document& document, const URL& sourceURL) const 64 38 { 65 39 auto* settings = document.settings(); -
trunk/Source/WebCore/bindings/js/CachedScriptFetcher.h
r210626 r210627 1 1 /* 2 * Copyright (C) 201 6 Yusuke Suzuki <utatane.tea@gmail.com>.2 * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com> 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 26 26 #pragma once 27 27 28 #include "CachedResourceHandle.h" 29 #include <runtime/ScriptFetcher.h> 28 30 #include <wtf/text/WTFString.h> 29 31 30 namespace JSC{32 namespace WebCore { 31 33 32 class SourceOrigin { 34 class CachedScript; 35 class Document; 36 class URL; 37 38 class CachedScriptFetcher : public JSC::ScriptFetcher { 33 39 public: 34 explicit SourceOrigin(const String& string) 35 : m_string(string) 40 CachedResourceHandle<CachedScript> requestScriptWithCache(Document&, const URL& sourceURL) const; 41 42 protected: 43 CachedScriptFetcher(const String& nonce, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) 44 : m_nonce(nonce) 45 , m_crossOriginMode(crossOriginMode) 46 , m_charset(charset) 47 , m_initiatorName(initiatorName) 48 , m_isInUserAgentShadowTree(isInUserAgentShadowTree) 36 49 { 37 50 } 38 51 39 SourceOrigin() = default;40 41 const String& string() const { return m_string; }42 bool isNull() const { return m_string.isNull(); }43 44 52 private: 45 String m_string; 53 String m_nonce; 54 String m_crossOriginMode; 55 String m_charset; 56 AtomicString m_initiatorName; 57 bool m_isInUserAgentShadowTree { false }; 46 58 }; 47 59 48 } // namespace JSC60 } // namespace WebCore -
trunk/Source/WebCore/bindings/js/CachedScriptSourceProvider.h
r210149 r210627 29 29 #include "CachedResourceHandle.h" 30 30 #include "CachedScript.h" 31 #include "CachedScriptFetcher.h" 31 32 #include <parser/SourceCode.h> 32 33 #include <parser/SourceProvider.h> … … 37 38 WTF_MAKE_FAST_ALLOCATED; 38 39 public: 39 static Ref<CachedScriptSourceProvider> create(CachedScript* cachedScript, JSC::SourceProviderSourceType sourceType ) { return adoptRef(*new CachedScriptSourceProvider(cachedScript, sourceType)); }40 static Ref<CachedScriptSourceProvider> create(CachedScript* cachedScript, JSC::SourceProviderSourceType sourceType, Ref<CachedScriptFetcher>&& scriptFetcher) { return adoptRef(*new CachedScriptSourceProvider(cachedScript, sourceType, WTFMove(scriptFetcher))); } 40 41 41 42 virtual ~CachedScriptSourceProvider() … … 48 49 49 50 private: 50 CachedScriptSourceProvider(CachedScript* cachedScript, JSC::SourceProviderSourceType sourceType )51 : SourceProvider(JSC::SourceOrigin { cachedScript->response().url() }, cachedScript->response().url(), TextPosition(), sourceType)51 CachedScriptSourceProvider(CachedScript* cachedScript, JSC::SourceProviderSourceType sourceType, Ref<CachedScriptFetcher>&& scriptFetcher) 52 : SourceProvider(JSC::SourceOrigin { cachedScript->response().url(), WTFMove(scriptFetcher) }, cachedScript->response().url(), TextPosition(), sourceType) 52 53 , m_cachedScript(cachedScript) 53 54 { … … 58 59 }; 59 60 60 inline JSC::SourceCode makeSource(CachedScript* cachedScript)61 {62 return JSC::SourceCode(CachedScriptSourceProvider::create(cachedScript, JSC::SourceProviderSourceType::Program));63 }64 65 61 } // namespace WebCore -
trunk/Source/WebCore/bindings/js/ScriptController.cpp
r210585 r210627 24 24 #include "BridgeJSC.h" 25 25 #include "CachedModuleScript.h" 26 #include "CachedScriptFetcher.h" 26 27 #include "CommonVM.h" 27 28 #include "ContentSecurityPolicy.h" … … 187 188 } 188 189 189 void ScriptController::loadModuleScriptInWorld(CachedModuleScript& moduleScript, const String& moduleName, LoadableScript& loadableScript, DOMWrapperWorld& world)190 void ScriptController::loadModuleScriptInWorld(CachedModuleScript& moduleScript, const String& moduleName, CachedScriptFetcher& scriptFetcher, DOMWrapperWorld& world) 190 191 { 191 192 JSLockHolder lock(world.vm()); … … 194 195 auto& state = *shell.window()->globalExec(); 195 196 196 auto& promise = JSMainThreadExecState::loadModule(state, moduleName, JSC::JSScriptFetcher::create(state.vm(), { & loadableScript}));197 auto& promise = JSMainThreadExecState::loadModule(state, moduleName, JSC::JSScriptFetcher::create(state.vm(), { &scriptFetcher })); 197 198 setupModuleScriptHandlers(moduleScript, promise, world); 198 199 } 199 200 200 void ScriptController::loadModuleScript(CachedModuleScript& moduleScript, const String& moduleName, LoadableScript& loadableScript)201 { 202 loadModuleScriptInWorld(moduleScript, moduleName, loadableScript, mainThreadNormalWorld());203 } 204 205 void ScriptController::loadModuleScriptInWorld(CachedModuleScript& moduleScript, const ScriptSourceCode& sourceCode, LoadableScript& loadableScript, DOMWrapperWorld& world)201 void ScriptController::loadModuleScript(CachedModuleScript& moduleScript, const String& moduleName, CachedScriptFetcher& scriptFetcher) 202 { 203 loadModuleScriptInWorld(moduleScript, moduleName, scriptFetcher, mainThreadNormalWorld()); 204 } 205 206 void ScriptController::loadModuleScriptInWorld(CachedModuleScript& moduleScript, const ScriptSourceCode& sourceCode, CachedScriptFetcher& scriptFetcher, DOMWrapperWorld& world) 206 207 { 207 208 JSLockHolder lock(world.vm()); … … 210 211 auto& state = *shell.window()->globalExec(); 211 212 212 auto& promise = JSMainThreadExecState::loadModule(state, sourceCode.jsSourceCode(), JSC::JSScriptFetcher::create(state.vm(), { & loadableScript}));213 auto& promise = JSMainThreadExecState::loadModule(state, sourceCode.jsSourceCode(), JSC::JSScriptFetcher::create(state.vm(), { &scriptFetcher })); 213 214 setupModuleScriptHandlers(moduleScript, promise, world); 214 215 } 215 216 216 void ScriptController::loadModuleScript(CachedModuleScript& moduleScript, const ScriptSourceCode& sourceCode, LoadableScript& loadableScript)217 { 218 loadModuleScriptInWorld(moduleScript, sourceCode, loadableScript, mainThreadNormalWorld());217 void ScriptController::loadModuleScript(CachedModuleScript& moduleScript, const ScriptSourceCode& sourceCode, CachedScriptFetcher& scriptFetcher) 218 { 219 loadModuleScriptInWorld(moduleScript, sourceCode, scriptFetcher, mainThreadNormalWorld()); 219 220 } 220 221 -
trunk/Source/WebCore/bindings/js/ScriptController.h
r210585 r210627 53 53 54 54 class CachedModuleScript; 55 class CachedScriptFetcher; 55 56 class Frame; 56 57 class HTMLDocument; 57 58 class HTMLPlugInElement; 58 class LoadableScript;59 59 class SecurityOrigin; 60 60 class ScriptSourceCode; … … 115 115 JSC::JSValue evaluateInWorld(const ScriptSourceCode&, DOMWrapperWorld&, ExceptionDetails* = nullptr); 116 116 117 void loadModuleScriptInWorld(CachedModuleScript&, const String& moduleName, LoadableScript&, DOMWrapperWorld&);118 void loadModuleScript(CachedModuleScript&, const String& moduleName, LoadableScript&);119 void loadModuleScriptInWorld(CachedModuleScript&, const ScriptSourceCode&, LoadableScript&, DOMWrapperWorld&);120 void loadModuleScript(CachedModuleScript&, const ScriptSourceCode&, LoadableScript&);117 void loadModuleScriptInWorld(CachedModuleScript&, const String& moduleName, CachedScriptFetcher&, DOMWrapperWorld&); 118 void loadModuleScript(CachedModuleScript&, const String& moduleName, CachedScriptFetcher&); 119 void loadModuleScriptInWorld(CachedModuleScript&, const ScriptSourceCode&, CachedScriptFetcher&, DOMWrapperWorld&); 120 void loadModuleScript(CachedModuleScript&, const ScriptSourceCode&, CachedScriptFetcher&); 121 121 122 122 JSC::JSValue linkAndEvaluateModuleScriptInWorld(CachedModuleScript& , DOMWrapperWorld&); -
trunk/Source/WebCore/bindings/js/ScriptModuleLoader.cpp
r210585 r210627 160 160 161 161 if (auto* frame = m_document.frame()) { 162 auto loader = CachedModuleScriptLoader::create(*this, deferred.get() );162 auto loader = CachedModuleScriptLoader::create(*this, deferred.get(), *static_cast<CachedScriptFetcher*>(JSC::jsCast<JSC::JSScriptFetcher*>(scriptFetcher)->fetcher())); 163 163 m_loaders.add(loader.copyRef()); 164 if (!loader->load(m_document, *static_cast<LoadableScript*>(JSC::jsCast<JSC::JSScriptFetcher*>(scriptFetcher)->fetcher()),completedURL)) {164 if (!loader->load(m_document, completedURL)) { 165 165 loader->clearClient(); 166 166 m_loaders.remove(WTFMove(loader)); … … 244 244 245 245 m_requestURLToResponseURLMap.add(cachedScript.url(), cachedScript.response().url()); 246 ScriptSourceCode scriptSourceCode(&cachedScript, JSC::SourceProviderSourceType::Module );246 ScriptSourceCode scriptSourceCode(&cachedScript, JSC::SourceProviderSourceType::Module, loader.scriptFetcher()); 247 247 promise->resolveWithCallback([] (JSC::ExecState& state, JSDOMGlobalObject&, JSC::SourceCode sourceCode) { 248 248 return JSC::JSSourceCode::create(state.vm(), WTFMove(sourceCode)); -
trunk/Source/WebCore/bindings/js/ScriptSourceCode.h
r210149 r210627 33 33 #include "CachedResourceHandle.h" 34 34 #include "CachedScript.h" 35 #include "CachedScriptFetcher.h" 35 36 #include "CachedScriptSourceProvider.h" 36 37 #include "URL.h" … … 50 51 } 51 52 52 explicit ScriptSourceCode(CachedScript* cachedScript, JSC::SourceProviderSourceType sourceType)53 : m_provider(CachedScriptSourceProvider::create(cachedScript, sourceType ))53 ScriptSourceCode(CachedScript* cachedScript, JSC::SourceProviderSourceType sourceType, Ref<CachedScriptFetcher>&& scriptFetcher) 54 : m_provider(CachedScriptSourceProvider::create(cachedScript, sourceType, WTFMove(scriptFetcher))) 54 55 , m_code(m_provider) 55 56 , m_cachedScript(cachedScript) 57 { 58 } 59 60 ScriptSourceCode(const String& source, const URL& url, const TextPosition& startPosition, JSC::SourceProviderSourceType sourceType, Ref<CachedScriptFetcher>&& scriptFetcher) 61 : m_provider(JSC::StringSourceProvider::create(source, JSC::SourceOrigin { url.string(), WTFMove(scriptFetcher) }, url.string(), startPosition, sourceType)) 62 , m_code(m_provider, startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt()) 63 , m_url(url) 56 64 { 57 65 } -
trunk/Source/WebCore/dom/LoadableClassicScript.cpp
r210585 r210627 105 105 { 106 106 ASSERT(!error()); 107 scriptElement.executeClassicScript(ScriptSourceCode(m_cachedScript.get(), JSC::SourceProviderSourceType::Program ));107 scriptElement.executeClassicScript(ScriptSourceCode(m_cachedScript.get(), JSC::SourceProviderSourceType::Program, *this)); 108 108 } 109 109 -
trunk/Source/WebCore/dom/LoadableScript.cpp
r210585 r210627 61 61 } 62 62 63 CachedResourceHandle<CachedScript> LoadableScript::requestScriptWithCache(Document& document, const URL& sourceURL) const64 {65 auto* settings = document.settings();66 if (settings && !settings->isScriptEnabled())67 return nullptr;68 69 ASSERT(document.contentSecurityPolicy());70 bool hasKnownNonce = document.contentSecurityPolicy()->allowScriptWithNonce(m_nonce, m_isInUserAgentShadowTree);71 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions();72 options.contentSecurityPolicyImposition = hasKnownNonce ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck;73 74 CachedResourceRequest request(ResourceRequest(sourceURL), options);75 request.setAsPotentiallyCrossOrigin(m_crossOriginMode, document);76 request.upgradeInsecureRequestIfNeeded(document);77 78 request.setCharset(m_charset);79 request.setInitiator(m_initiatorName);80 81 return document.cachedResourceLoader().requestScript(WTFMove(request));82 63 } 83 84 } -
trunk/Source/WebCore/dom/LoadableScript.h
r210585 r210627 26 26 #pragma once 27 27 28 #include "Cached ResourceHandle.h"28 #include "CachedScriptFetcher.h" 29 29 #include <runtime/ConsoleTypes.h> 30 #include <runtime/JSScriptFetcher.h>31 30 #include <wtf/HashCountedSet.h> 32 31 #include <wtf/RefCounted.h> … … 35 34 namespace WebCore { 36 35 37 class CachedScript;38 class Document;39 36 class LoadableScriptClient; 40 37 class ScriptElement; 41 class URL;42 38 43 class LoadableScript : public JSC::ScriptFetcher {39 class LoadableScript : public CachedScriptFetcher { 44 40 public: 45 41 enum class ErrorType { … … 74 70 virtual bool isModuleScript() const { return false; } 75 71 76 CachedResourceHandle<CachedScript> requestScriptWithCache(Document&, const URL& sourceURL) const;77 78 72 protected: 79 73 LoadableScript(const String& nonce, const String& crossOriginMode, const String& charset, const AtomicString& initiatorName, bool isInUserAgentShadowTree) 80 : m_nonce(nonce) 81 , m_crossOriginMode(crossOriginMode) 82 , m_charset(charset) 83 , m_initiatorName(initiatorName) 84 , m_isInUserAgentShadowTree(isInUserAgentShadowTree) 74 : CachedScriptFetcher(nonce, crossOriginMode, charset, initiatorName, isInUserAgentShadowTree) 85 75 { 86 76 } … … 89 79 90 80 private: 91 String m_nonce;92 String m_crossOriginMode;93 String m_charset;94 AtomicString m_initiatorName;95 bool m_isInUserAgentShadowTree { false };96 97 81 HashCountedSet<LoadableScriptClient*> m_clients; 98 82 }; -
trunk/Source/WebCore/dom/ScriptElement.cpp
r210585 r210627 39 39 #include "HTMLParserIdioms.h" 40 40 #include "IgnoreDestructiveWriteCountIncrementer.h" 41 #include "InlineClassicScript.h" 41 42 #include "LoadableClassicScript.h" 42 43 #include "LoadableModuleScript.h" … … 276 277 ASSERT(scriptType == ScriptType::Classic); 277 278 TextPosition position = document.isInDocumentWrite() ? TextPosition() : scriptStartPosition; 278 executeClassicScript(ScriptSourceCode(scriptContent(), document.url(), position, JSC::SourceProviderSourceType::Program ));279 executeClassicScript(ScriptSourceCode(scriptContent(), document.url(), position, JSC::SourceProviderSourceType::Program, InlineClassicScript::create(*this))); 279 280 } 280 281 … … 349 350 } 350 351 352 auto script = LoadableModuleScript::create(nonce, crossOriginMode, scriptCharset(), m_element.localName(), m_element.isInUserAgentShadowTree()); 353 351 354 TextPosition position = m_element.document().isInDocumentWrite() ? TextPosition() : scriptStartPosition; 352 ScriptSourceCode sourceCode(scriptContent(), m_element.document().url(), position, JSC::SourceProviderSourceType::Module );355 ScriptSourceCode sourceCode(scriptContent(), m_element.document().url(), position, JSC::SourceProviderSourceType::Module, script.copyRef()); 353 356 354 357 ASSERT(m_element.document().contentSecurityPolicy()); … … 358 361 return false; 359 362 360 auto script = LoadableModuleScript::create(nonce, crossOriginMode, scriptCharset(), m_element.localName(), m_element.isInUserAgentShadowTree());361 363 script->load(m_element.document(), sourceCode); 362 364 m_loadableScript = WTFMove(script); … … 427 429 ASSERT(!pendingScript.error()); 428 430 ASSERT_WITH_MESSAGE(scriptType() == ScriptType::Classic, "Module script always have a loadableScript pointer."); 429 executeClassicScript(ScriptSourceCode(scriptContent(), m_element.document().url(), pendingScript.startingPosition(), JSC::SourceProviderSourceType::Program ));431 executeClassicScript(ScriptSourceCode(scriptContent(), m_element.document().url(), pendingScript.startingPosition(), JSC::SourceProviderSourceType::Program, InlineClassicScript::create(*this))); 430 432 dispatchLoadEvent(); 431 433 } -
trunk/Source/WebCore/html/parser/HTMLScriptRunner.cpp
r210319 r210627 36 36 #include "HTMLScriptRunnerHost.h" 37 37 #include "IgnoreDestructiveWriteCountIncrementer.h" 38 #include "InlineClassicScript.h" 38 39 #include "Microtasks.h" 39 40 #include "MutationObserver.h" … … 259 260 m_parserBlockingScript = PendingScript::create(scriptElement, scriptStartPosition); 260 261 else 261 scriptElement.executeClassicScript(ScriptSourceCode(scriptElement.element().textContent(), documentURLForScriptExecution(m_document), scriptStartPosition ));262 scriptElement.executeClassicScript(ScriptSourceCode(scriptElement.element().textContent(), documentURLForScriptExecution(m_document), scriptStartPosition, JSC::SourceProviderSourceType::Program, InlineClassicScript::create(scriptElement))); 262 263 } else 263 264 requestParsingBlockingScript(scriptElement); -
trunk/Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp
r210319 r210627 39 39 #include "HTMLHtmlElement.h" 40 40 #include "HTMLTemplateElement.h" 41 #include "InlineClassicScript.h" 41 42 #include "Page.h" 42 43 #include "PendingScript.h" … … 878 879 879 880 if (scriptElement.readyToBeParserExecuted()) 880 scriptElement.executeClassicScript(ScriptSourceCode(scriptElement.scriptContent(), document()->url(), m_scriptStartPosition ));881 scriptElement.executeClassicScript(ScriptSourceCode(scriptElement.scriptContent(), document()->url(), m_scriptStartPosition, JSC::SourceProviderSourceType::Program, InlineClassicScript::create(scriptElement))); 881 882 else if (scriptElement.willBeParserExecuted() && scriptElement.loadableScript()) { 882 883 m_pendingScript = PendingScript::create(scriptElement, *scriptElement.loadableScript());
Note: See TracChangeset
for help on using the changeset viewer.