Title: [239569] trunk/Source
Revision
239569
Author
[email protected]
Date
2019-01-02 09:59:08 -0800 (Wed, 02 Jan 2019)

Log Message

SourceProviders should use an actual URL instead of a string
https://bugs.webkit.org/show_bug.cgi?id=192734

Reviewed by Yusuke Suzuki.

Source/_javascript_Core:

This will be useful for the Module loader API in the future where
by default it will use the relative path from the referring module
to resolve dependencies.

I didn't change the JSC shell's urls to be absolute paths as it
caused problems with the stack traces in our Chakra tests. Since
the absolute paths included system directories the diff would
appear incorrect.
See: https://bugs.webkit.org/show_bug.cgi?id=193077

* API/JSBase.cpp:
(JSEvaluateScript):
(JSCheckScriptSyntax):
* API/JSScriptRef.cpp:
(OpaqueJSScript::create):
(OpaqueJSScript::OpaqueJSScript):
* API/glib/JSCContext.cpp:
(jsc_context_check_syntax):
* jsc.cpp:
(jscSource):
(GlobalObject::moduleLoaderFetch):
(functionCheckModuleSyntax):
(runWithOptions):
* parser/SourceCode.h:
(JSC::makeSource):
* parser/SourceProvider.cpp:
(JSC::SourceProvider::SourceProvider):
* parser/SourceProvider.h:
(JSC::SourceProvider::url const):
(JSC::StringSourceProvider::create):
(JSC::StringSourceProvider::StringSourceProvider):
(JSC::WebAssemblySourceProvider::create):
(JSC::WebAssemblySourceProvider::WebAssemblySourceProvider):
* runtime/FunctionConstructor.cpp:
(JSC::constructFunctionSkippingEvalEnabledCheck):
* tools/CodeProfile.h:
(JSC::CodeProfile::CodeProfile):
* tools/FunctionOverrides.cpp:
(JSC::initializeOverrideInfo):

Source/WebCore:

Remove ScriptSourceCode's URL member and make the url() method
reference the URL on the SourceProvider. Also, avoid some
ref count churn.

Additionally, this patch fixes an existing bug in
WorkletGlobalScope() that would use a ScriptSourceCode after
WTFMoving it.

* bindings/js/CachedScriptSourceProvider.h:
(WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
* bindings/js/ScheduledAction.cpp:
(WebCore::ScheduledAction::execute):
* bindings/js/ScriptController.cpp:
(WebCore::ScriptController::executeScriptInWorld):
(WebCore::ScriptController::executeScript):
* bindings/js/ScriptSourceCode.h:
(WebCore::ScriptSourceCode::ScriptSourceCode):
(WebCore::ScriptSourceCode::m_code):
(WebCore::ScriptSourceCode::url const):
(WebCore::ScriptSourceCode::m_url): Deleted.
* dom/ScriptElement.cpp:
(WebCore::ScriptElement::prepareScript):
(WebCore::ScriptElement::requestModuleScript):
(WebCore::ScriptElement::executePendingScript):
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
* page/Frame.cpp:
(WebCore::Frame::injectUserScriptImmediately):
* workers/WorkerGlobalScope.cpp:
(WebCore::WorkerGlobalScope::importScripts):
* workers/WorkerThread.cpp:
(WebCore::WorkerThread::workerThread):
* worklets/WorkletGlobalScope.cpp:
(WebCore::WorkletGlobalScope::WorkletGlobalScope):
* xml/parser/XMLDocumentParserLibxml2.cpp:
(WebCore::XMLDocumentParser::endElementNs):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/API/JSBase.cpp (239568 => 239569)


--- trunk/Source/_javascript_Core/API/JSBase.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/_javascript_Core/API/JSBase.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -64,7 +64,7 @@
     // evaluate sets "this" to the global object if it is NULL
     JSGlobalObject* globalObject = vm.vmEntryGlobalObject(exec);
     auto sourceURLString = sourceURL ? sourceURL->string() : String();
-    SourceCode source = makeSource(script->string(), SourceOrigin { sourceURLString }, sourceURLString, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
+    SourceCode source = makeSource(script->string(), SourceOrigin { sourceURLString }, URL({ }, sourceURLString), TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
 
     NakedPtr<Exception> evaluationException;
     JSValue returnValue = profiledEvaluate(globalObject->globalExec(), ProfilingReason::API, source, jsThisObject, evaluationException);
@@ -103,7 +103,7 @@
     startingLineNumber = std::max(1, startingLineNumber);
 
     auto sourceURLString = sourceURL ? sourceURL->string() : String();
-    SourceCode source = makeSource(script->string(), SourceOrigin { sourceURLString }, sourceURLString, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
+    SourceCode source = makeSource(script->string(), SourceOrigin { sourceURLString }, URL({ }, sourceURLString), TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()));
     
     JSValue syntaxException;
     bool isValidSyntax = checkSyntax(vm.vmEntryGlobalObject(exec)->globalExec(), source, &syntaxException);

Modified: trunk/Source/_javascript_Core/API/JSScriptRef.cpp (239568 => 239569)


--- trunk/Source/_javascript_Core/API/JSScriptRef.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/_javascript_Core/API/JSScriptRef.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -41,9 +41,9 @@
 
 struct OpaqueJSScript : public SourceProvider {
 public:
-    static WTF::Ref<OpaqueJSScript> create(VM& vm, const SourceOrigin& sourceOrigin, const String& url, int startingLineNumber, const String& source)
+    static WTF::Ref<OpaqueJSScript> create(VM& vm, const SourceOrigin& sourceOrigin, URL&& url, int startingLineNumber, const String& source)
     {
-        return WTF::adoptRef(*new OpaqueJSScript(vm, sourceOrigin, url, startingLineNumber, source));
+        return WTF::adoptRef(*new OpaqueJSScript(vm, sourceOrigin, WTFMove(url), startingLineNumber, source));
     }
 
     unsigned hash() const override
@@ -59,8 +59,8 @@
     VM& vm() const { return m_vm; }
 
 private:
-    OpaqueJSScript(VM& vm, const SourceOrigin& sourceOrigin, const String& url, int startingLineNumber, const String& source)
-        : SourceProvider(sourceOrigin, url, TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()), SourceProviderSourceType::Program)
+    OpaqueJSScript(VM& vm, const SourceOrigin& sourceOrigin, URL&& url, int startingLineNumber, const String& source)
+        : SourceProvider(sourceOrigin, WTFMove(url), TextPosition(OrdinalNumber::fromOneBasedInt(startingLineNumber), OrdinalNumber()), SourceProviderSourceType::Program)
         , m_vm(vm)
         , m_source(source.isNull() ? *StringImpl::empty() : *source.impl())
     {
@@ -94,7 +94,7 @@
     startingLineNumber = std::max(1, startingLineNumber);
 
     auto sourceURLString = url ? url->string() : String();
-    auto result = OpaqueJSScript::create(vm, SourceOrigin { sourceURLString }, sourceURLString, startingLineNumber, String(StringImpl::createFromLiteral(source, length)));
+    auto result = OpaqueJSScript::create(vm, SourceOrigin { sourceURLString }, URL({ }, sourceURLString), startingLineNumber, String(StringImpl::createFromLiteral(source, length)));
 
     ParserError error;
     if (!parseScript(vm, SourceCode(result.copyRef()), error)) {
@@ -116,7 +116,7 @@
     startingLineNumber = std::max(1, startingLineNumber);
 
     auto sourceURLString = url ? url->string() : String();
-    auto result = OpaqueJSScript::create(vm, SourceOrigin { sourceURLString }, sourceURLString, startingLineNumber, source->string());
+    auto result = OpaqueJSScript::create(vm, SourceOrigin { sourceURLString }, URL({ }, sourceURLString), startingLineNumber, source->string());
 
     ParserError error;
     if (!parseScript(vm, SourceCode(result.copyRef()), error)) {

Modified: trunk/Source/_javascript_Core/API/glib/JSCContext.cpp (239568 => 239569)


--- trunk/Source/_javascript_Core/API/glib/JSCContext.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/_javascript_Core/API/glib/JSCContext.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -945,7 +945,7 @@
 
     String sourceURLString = uri ? String::fromUTF8(uri) : String();
     JSC::SourceCode source = JSC::makeSource(String::fromUTF8(code, length < 0 ? strlen(code) : length), JSC::SourceOrigin { sourceURLString },
-        sourceURLString, TextPosition(OrdinalNumber::fromOneBasedInt(lineNumber), OrdinalNumber()));
+        URL({ }, sourceURLString), TextPosition(OrdinalNumber::fromOneBasedInt(lineNumber), OrdinalNumber()));
     bool success = false;
     JSC::ParserError error;
     switch (mode) {

Modified: trunk/Source/_javascript_Core/ChangeLog (239568 => 239569)


--- trunk/Source/_javascript_Core/ChangeLog	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/_javascript_Core/ChangeLog	2019-01-02 17:59:08 UTC (rev 239569)
@@ -1,3 +1,50 @@
+2018-12-31  Keith Miller  <[email protected]>
+
+        SourceProviders should use an actual URL instead of a string
+        https://bugs.webkit.org/show_bug.cgi?id=192734
+
+        Reviewed by Yusuke Suzuki.
+
+        This will be useful for the Module loader API in the future where
+        by default it will use the relative path from the referring module
+        to resolve dependencies.
+
+        I didn't change the JSC shell's urls to be absolute paths as it
+        caused problems with the stack traces in our Chakra tests. Since
+        the absolute paths included system directories the diff would
+        appear incorrect.
+        See: https://bugs.webkit.org/show_bug.cgi?id=193077
+
+        * API/JSBase.cpp:
+        (JSEvaluateScript):
+        (JSCheckScriptSyntax):
+        * API/JSScriptRef.cpp:
+        (OpaqueJSScript::create):
+        (OpaqueJSScript::OpaqueJSScript):
+        * API/glib/JSCContext.cpp:
+        (jsc_context_check_syntax):
+        * jsc.cpp:
+        (jscSource):
+        (GlobalObject::moduleLoaderFetch):
+        (functionCheckModuleSyntax):
+        (runWithOptions):
+        * parser/SourceCode.h:
+        (JSC::makeSource):
+        * parser/SourceProvider.cpp:
+        (JSC::SourceProvider::SourceProvider):
+        * parser/SourceProvider.h:
+        (JSC::SourceProvider::url const):
+        (JSC::StringSourceProvider::create):
+        (JSC::StringSourceProvider::StringSourceProvider):
+        (JSC::WebAssemblySourceProvider::create):
+        (JSC::WebAssemblySourceProvider::WebAssemblySourceProvider):
+        * runtime/FunctionConstructor.cpp:
+        (JSC::constructFunctionSkippingEvalEnabledCheck):
+        * tools/CodeProfile.h:
+        (JSC::CodeProfile::CodeProfile):
+        * tools/FunctionOverrides.cpp:
+        (JSC::initializeOverrideInfo):
+
 2019-01-01  Jeff Miller  <[email protected]>
 
         Update user-visible copyright strings to include 2019

Modified: trunk/Source/_javascript_Core/jsc.cpp (239568 => 239569)


--- trunk/Source/_javascript_Core/jsc.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/_javascript_Core/jsc.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -87,6 +87,7 @@
 #include <wtf/MonotonicTime.h>
 #include <wtf/NeverDestroyed.h>
 #include <wtf/StringPrintStream.h>
+#include <wtf/URL.h>
 #include <wtf/WallTime.h>
 #include <wtf/text/StringBuilder.h>
 
@@ -459,13 +460,6 @@
     return String::fromUTF8WithLatin1Fallback(utf8.data(), utf8.size());
 }
 
-template<typename Vector>
-static inline SourceCode jscSource(const Vector& utf8, const SourceOrigin& sourceOrigin, const String& filename)
-{
-    String str = stringFromUTF(utf8);
-    return makeSource(str, sourceOrigin, filename);
-}
-
 class GlobalObject : public JSGlobalObject {
 private:
     GlobalObject(VM&, Structure*);
@@ -957,6 +951,14 @@
 }
 
 template<typename Vector>
+static inline SourceCode jscSource(const Vector& utf8, const SourceOrigin& sourceOrigin, const String& filename)
+{
+    // FIXME: This should use an absolute file URL https://bugs.webkit.org/show_bug.cgi?id=193077
+    String str = stringFromUTF(utf8);
+    return makeSource(str, sourceOrigin, URL({ }, filename));
+}
+
+template<typename Vector>
 static bool fetchModuleFromLocalFileSystem(const String& fileName, Vector& buffer)
 {
     // We assume that fileName is always an absolute path.
@@ -1019,11 +1021,13 @@
     if (!fetchModuleFromLocalFileSystem(moduleKey, buffer))
         return reject(createError(exec, makeString("Could not open file '", moduleKey, "'.")));
 
+
+    URL moduleURL = URL({ }, moduleKey);
 #if ENABLE(WEBASSEMBLY)
     // FileSystem does not have mime-type header. The JSC shell recognizes WebAssembly's magic header.
     if (buffer.size() >= 4) {
         if (buffer[0] == '\0' && buffer[1] == 'a' && buffer[2] == 's' && buffer[3] == 'm') {
-            auto source = SourceCode(WebAssemblySourceProvider::create(WTFMove(buffer), SourceOrigin { moduleKey }, moduleKey));
+            auto source = SourceCode(WebAssemblySourceProvider::create(WTFMove(buffer), SourceOrigin { moduleKey }, WTFMove(moduleURL)));
             catchScope.releaseAssertNoException();
             auto sourceCode = JSSourceCode::create(vm, WTFMove(source));
             catchScope.releaseAssertNoException();
@@ -1034,7 +1038,7 @@
     }
 #endif
 
-    auto sourceCode = JSSourceCode::create(vm, makeSource(stringFromUTF(buffer), SourceOrigin { moduleKey }, moduleKey, TextPosition(), SourceProviderSourceType::Module));
+    auto sourceCode = JSSourceCode::create(vm, makeSource(stringFromUTF(buffer), SourceOrigin { moduleKey }, WTFMove(moduleURL), TextPosition(), SourceProviderSourceType::Module));
     catchScope.releaseAssertNoException();
     auto result = deferred->resolve(exec, sourceCode);
     catchScope.clearException();
@@ -2081,7 +2085,7 @@
     stopWatch.start();
 
     ParserError error;
-    bool validSyntax = checkModuleSyntax(exec, makeSource(source, { }, String(), TextPosition(), SourceProviderSourceType::Module), error);
+    bool validSyntax = checkModuleSyntax(exec, makeSource(source, { }, URL(), TextPosition(), SourceProviderSourceType::Module), error);
     RETURN_IF_EXCEPTION(scope, encodedJSValue());
     stopWatch.stop();
 
@@ -2440,8 +2444,10 @@
 
         bool isLastFile = i == scripts.size() - 1;
         if (isModule) {
-            if (!promise)
-                promise = loadAndEvaluateModule(globalObject->globalExec(), makeSource(stringFromUTF(scriptBuffer), SourceOrigin { absolutePath(fileName) }, fileName, TextPosition(), SourceProviderSourceType::Module), jsUndefined());
+            if (!promise) {
+                // FIXME: This should use an absolute file URL https://bugs.webkit.org/show_bug.cgi?id=193077
+                promise = loadAndEvaluateModule(globalObject->globalExec(), makeSource(stringFromUTF(scriptBuffer), SourceOrigin { absolutePath(fileName) }, URL({ }, fileName), TextPosition(), SourceProviderSourceType::Module), jsUndefined());
+            }
             scope.clearException();
 
             JSFunction* fulfillHandler = JSNativeStdFunction::create(vm, globalObject, 1, String(), [&success, &options, isLastFile](ExecState* exec) {

Modified: trunk/Source/_javascript_Core/parser/SourceCode.h (239568 => 239569)


--- trunk/Source/_javascript_Core/parser/SourceCode.h	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/_javascript_Core/parser/SourceCode.h	2019-01-02 17:59:08 UTC (rev 239569)
@@ -100,9 +100,9 @@
         OrdinalNumber m_startColumn;
     };
 
-    inline SourceCode makeSource(const String& source, const SourceOrigin& sourceOrigin, const String& url = "" const TextPosition& startPosition = TextPosition(), SourceProviderSourceType sourceType = SourceProviderSourceType::Program)
+    inline SourceCode makeSource(const String& source, const SourceOrigin& sourceOrigin, URL&& url = "" const TextPosition& startPosition = TextPosition(), SourceProviderSourceType sourceType = SourceProviderSourceType::Program)
     {
-        return SourceCode(StringSourceProvider::create(source, sourceOrigin, url, startPosition, sourceType), startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt());
+        return SourceCode(StringSourceProvider::create(source, sourceOrigin, WTFMove(url), startPosition, sourceType), startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt());
     }
     
     inline SourceCode SourceCode::subExpression(unsigned openBrace, unsigned closeBrace, int firstLine, int startColumn) const

Modified: trunk/Source/_javascript_Core/parser/SourceProvider.cpp (239568 => 239569)


--- trunk/Source/_javascript_Core/parser/SourceProvider.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/_javascript_Core/parser/SourceProvider.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -31,11 +31,11 @@
 
 namespace JSC {
 
-SourceProvider::SourceProvider(const SourceOrigin& sourceOrigin, const String& url, const TextPosition& startPosition, SourceProviderSourceType sourceType)
-    : m_sourceType(sourceType)
+SourceProvider::SourceProvider(const SourceOrigin& sourceOrigin, URL&& url, const TextPosition& startPosition, SourceProviderSourceType sourceType)
+    : m_url(WTFMove(url))
+    , m_sourceType(sourceType)
     , m_validated(false)
     , m_sourceOrigin(sourceOrigin)
-    , m_url(url)
     , m_startPosition(startPosition)
 {
 }

Modified: trunk/Source/_javascript_Core/parser/SourceProvider.h (239568 => 239569)


--- trunk/Source/_javascript_Core/parser/SourceProvider.h	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/_javascript_Core/parser/SourceProvider.h	2019-01-02 17:59:08 UTC (rev 239569)
@@ -30,6 +30,7 @@
 
 #include "SourceOrigin.h"
 #include <wtf/RefCounted.h>
+#include <wtf/URL.h>
 #include <wtf/text/TextPosition.h>
 #include <wtf/text/WTFString.h>
 
@@ -45,7 +46,7 @@
     public:
         static const intptr_t nullID = 1;
         
-        JS_EXPORT_PRIVATE SourceProvider(const SourceOrigin&, const String& url, const TextPosition& startPosition, SourceProviderSourceType);
+        JS_EXPORT_PRIVATE SourceProvider(const SourceOrigin&, URL&&, const TextPosition& startPosition, SourceProviderSourceType);
 
         JS_EXPORT_PRIVATE virtual ~SourceProvider();
 
@@ -57,7 +58,7 @@
         }
 
         const SourceOrigin& sourceOrigin() const { return m_sourceOrigin; }
-        const String& url() const { return m_url; }
+        const URL& url() const { return m_url; }
         const String& sourceURL() const { return m_sourceURLDirective; }
         const String& sourceMappingURL() const { return m_sourceMappingURLDirective; }
 
@@ -80,10 +81,10 @@
     private:
         JS_EXPORT_PRIVATE void getID();
 
+        URL m_url;
         SourceProviderSourceType m_sourceType;
         bool m_validated : 1;
         SourceOrigin m_sourceOrigin;
-        String m_url;
         String m_sourceURLDirective;
         String m_sourceMappingURLDirective;
         TextPosition m_startPosition;
@@ -92,9 +93,9 @@
 
     class StringSourceProvider : public SourceProvider {
     public:
-        static Ref<StringSourceProvider> create(const String& source, const SourceOrigin& sourceOrigin, const String& url, const TextPosition& startPosition = TextPosition(), SourceProviderSourceType sourceType = SourceProviderSourceType::Program)
+        static Ref<StringSourceProvider> create(const String& source, const SourceOrigin& sourceOrigin, URL&& url, const TextPosition& startPosition = TextPosition(), SourceProviderSourceType sourceType = SourceProviderSourceType::Program)
         {
-            return adoptRef(*new StringSourceProvider(source, sourceOrigin, url, startPosition, sourceType));
+            return adoptRef(*new StringSourceProvider(source, sourceOrigin, WTFMove(url), startPosition, sourceType));
         }
         
         unsigned hash() const override
@@ -108,8 +109,8 @@
         }
 
     private:
-        StringSourceProvider(const String& source, const SourceOrigin& sourceOrigin, const String& url, const TextPosition& startPosition, SourceProviderSourceType sourceType)
-            : SourceProvider(sourceOrigin, url, startPosition, sourceType)
+        StringSourceProvider(const String& source, const SourceOrigin& sourceOrigin, URL&& url, const TextPosition& startPosition, SourceProviderSourceType sourceType)
+            : SourceProvider(sourceOrigin, WTFMove(url), startPosition, sourceType)
             , m_source(source.isNull() ? *StringImpl::empty() : *source.impl())
         {
         }
@@ -120,9 +121,9 @@
 #if ENABLE(WEBASSEMBLY)
     class WebAssemblySourceProvider : public SourceProvider {
     public:
-        static Ref<WebAssemblySourceProvider> create(Vector<uint8_t>&& data, const SourceOrigin& sourceOrigin, const String& url)
+        static Ref<WebAssemblySourceProvider> create(Vector<uint8_t>&& data, const SourceOrigin& sourceOrigin, URL&& url)
         {
-            return adoptRef(*new WebAssemblySourceProvider(WTFMove(data), sourceOrigin, url));
+            return adoptRef(*new WebAssemblySourceProvider(WTFMove(data), sourceOrigin, WTFMove(url)));
         }
 
         unsigned hash() const override
@@ -141,8 +142,8 @@
         }
 
     private:
-        WebAssemblySourceProvider(Vector<uint8_t>&& data, const SourceOrigin& sourceOrigin, const String& url)
-            : SourceProvider(sourceOrigin, url, TextPosition(), SourceProviderSourceType::WebAssembly)
+        WebAssemblySourceProvider(Vector<uint8_t>&& data, const SourceOrigin& sourceOrigin, URL&& url)
+            : SourceProvider(sourceOrigin, WTFMove(url), TextPosition(), SourceProviderSourceType::WebAssembly)
             , m_source("[WebAssembly source]")
             , m_data(WTFMove(data))
         {

Modified: trunk/Source/_javascript_Core/runtime/FunctionConstructor.cpp (239568 => 239569)


--- trunk/Source/_javascript_Core/runtime/FunctionConstructor.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/_javascript_Core/runtime/FunctionConstructor.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -142,7 +142,7 @@
         program = builder.toString();
     }
 
-    SourceCode source = makeSource(program, sourceOrigin, sourceURL, position);
+    SourceCode source = makeSource(program, sourceOrigin, URL({ }, sourceURL), position);
     JSObject* exception = nullptr;
     FunctionExecutable* function = FunctionExecutable::fromGlobalCode(functionName, *exec, source, exception, overrideLineNumber, functionConstructorParametersEndPosition);
     if (!function) {

Modified: trunk/Source/_javascript_Core/tools/CodeProfile.h (239568 => 239569)


--- trunk/Source/_javascript_Core/tools/CodeProfile.h	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/_javascript_Core/tools/CodeProfile.h	2019-01-02 17:59:08 UTC (rev 239569)
@@ -35,7 +35,7 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     CodeProfile(const SourceCode& source, CodeProfile* parent)
-        : m_file(source.provider()->url().utf8())
+        : m_file(String(source.provider()->url()).utf8())
         , m_lineNumber(source.firstLine().oneBasedInt())
         , m_parent(parent)
     {

Modified: trunk/Source/_javascript_Core/tools/FunctionOverrides.cpp (239568 => 239569)


--- trunk/Source/_javascript_Core/tools/FunctionOverrides.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/_javascript_Core/tools/FunctionOverrides.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -126,7 +126,7 @@
     newProviderStr.append(origHeader);
     newProviderStr.append(newBody);
 
-    Ref<SourceProvider> newProvider = StringSourceProvider::create(newProviderStr, SourceOrigin { "<overridden>" }, "<overridden>");
+    Ref<SourceProvider> newProvider = StringSourceProvider::create(newProviderStr, SourceOrigin { "<overridden>" }, URL({ }, "<overridden>"));
 
     info.firstLine = 1;
     info.lineCount = 1; // Faking it. This doesn't really matter for now.

Modified: trunk/Source/WebCore/ChangeLog (239568 => 239569)


--- trunk/Source/WebCore/ChangeLog	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/ChangeLog	2019-01-02 17:59:08 UTC (rev 239569)
@@ -1,3 +1,47 @@
+2018-12-31  Keith Miller  <[email protected]>
+
+        SourceProviders should use an actual URL instead of a string
+        https://bugs.webkit.org/show_bug.cgi?id=192734
+
+        Reviewed by Yusuke Suzuki.
+
+        Remove ScriptSourceCode's URL member and make the url() method
+        reference the URL on the SourceProvider. Also, avoid some
+        ref count churn.
+
+        Additionally, this patch fixes an existing bug in
+        WorkletGlobalScope() that would use a ScriptSourceCode after
+        WTFMoving it.
+
+        * bindings/js/CachedScriptSourceProvider.h:
+        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
+        * bindings/js/ScheduledAction.cpp:
+        (WebCore::ScheduledAction::execute):
+        * bindings/js/ScriptController.cpp:
+        (WebCore::ScriptController::executeScriptInWorld):
+        (WebCore::ScriptController::executeScript):
+        * bindings/js/ScriptSourceCode.h:
+        (WebCore::ScriptSourceCode::ScriptSourceCode):
+        (WebCore::ScriptSourceCode::m_code):
+        (WebCore::ScriptSourceCode::url const):
+        (WebCore::ScriptSourceCode::m_url): Deleted.
+        * dom/ScriptElement.cpp:
+        (WebCore::ScriptElement::prepareScript):
+        (WebCore::ScriptElement::requestModuleScript):
+        (WebCore::ScriptElement::executePendingScript):
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
+        * page/Frame.cpp:
+        (WebCore::Frame::injectUserScriptImmediately):
+        * workers/WorkerGlobalScope.cpp:
+        (WebCore::WorkerGlobalScope::importScripts):
+        * workers/WorkerThread.cpp:
+        (WebCore::WorkerThread::workerThread):
+        * worklets/WorkletGlobalScope.cpp:
+        (WebCore::WorkletGlobalScope::WorkletGlobalScope):
+        * xml/parser/XMLDocumentParserLibxml2.cpp:
+        (WebCore::XMLDocumentParser::endElementNs):
+
 2019-01-01  Jeff Miller  <[email protected]>
 
         Update user-visible copyright strings to include 2019

Modified: trunk/Source/WebCore/bindings/js/CachedScriptSourceProvider.h (239568 => 239569)


--- trunk/Source/WebCore/bindings/js/CachedScriptSourceProvider.h	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/bindings/js/CachedScriptSourceProvider.h	2019-01-02 17:59:08 UTC (rev 239569)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2008-2018 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -48,7 +48,7 @@
 
 private:
     CachedScriptSourceProvider(CachedScript* cachedScript, JSC::SourceProviderSourceType sourceType, Ref<CachedScriptFetcher>&& scriptFetcher)
-        : SourceProvider(JSC::SourceOrigin { cachedScript->response().url(), WTFMove(scriptFetcher) }, cachedScript->response().url(), TextPosition(), sourceType)
+        : SourceProvider(JSC::SourceOrigin { cachedScript->response().url(), WTFMove(scriptFetcher) }, URL(cachedScript->response().url()), TextPosition(), sourceType)
         , m_cachedScript(cachedScript)
     {
         m_cachedScript->addClient(*this);

Modified: trunk/Source/WebCore/bindings/js/ScheduledAction.cpp (239568 => 239569)


--- trunk/Source/WebCore/bindings/js/ScheduledAction.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/bindings/js/ScheduledAction.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -150,7 +150,7 @@
         JSWorkerGlobalScope* contextWrapper = scriptController->workerGlobalScopeWrapper();
         executeFunctionInContext(contextWrapper, contextWrapper, workerGlobalScope);
     } else {
-        ScriptSourceCode code(m_code, workerGlobalScope.url());
+        ScriptSourceCode code(m_code, URL(workerGlobalScope.url()));
         scriptController->evaluate(code);
     }
 }

Modified: trunk/Source/WebCore/bindings/js/ScriptController.cpp (239568 => 239569)


--- trunk/Source/WebCore/bindings/js/ScriptController.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/bindings/js/ScriptController.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -543,7 +543,7 @@
 JSValue ScriptController::executeScriptInWorld(DOMWrapperWorld& world, const String& script, bool forceUserGesture, ExceptionDetails* exceptionDetails)
 {
     UserGestureIndicator gestureIndicator(forceUserGesture ? Optional<ProcessingUserGestureState>(ProcessingUserGesture) : WTF::nullopt);
-    ScriptSourceCode sourceCode(script, m_frame.document()->url(), TextPosition(), JSC::SourceProviderSourceType::Program, CachedScriptFetcher::create(m_frame.document()->charset()));
+    ScriptSourceCode sourceCode(script, URL(m_frame.document()->url()), TextPosition(), JSC::SourceProviderSourceType::Program, CachedScriptFetcher::create(m_frame.document()->charset()));
 
     if (!canExecuteScripts(AboutToExecuteScript) || isPaused())
         return { };
@@ -572,7 +572,7 @@
 JSValue ScriptController::executeScript(const String& script, bool forceUserGesture, ExceptionDetails* exceptionDetails)
 {
     UserGestureIndicator gestureIndicator(forceUserGesture ? Optional<ProcessingUserGestureState>(ProcessingUserGesture) : WTF::nullopt);
-    return executeScript(ScriptSourceCode(script, m_frame.document()->url(), TextPosition(), JSC::SourceProviderSourceType::Program, CachedScriptFetcher::create(m_frame.document()->charset())), exceptionDetails);
+    return executeScript(ScriptSourceCode(script, URL(m_frame.document()->url()), TextPosition(), JSC::SourceProviderSourceType::Program, CachedScriptFetcher::create(m_frame.document()->charset())), exceptionDetails);
 }
 
 JSValue ScriptController::executeScript(const ScriptSourceCode& sourceCode, ExceptionDetails* exceptionDetails)

Modified: trunk/Source/WebCore/bindings/js/ScriptSourceCode.h (239568 => 239569)


--- trunk/Source/WebCore/bindings/js/ScriptSourceCode.h	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/bindings/js/ScriptSourceCode.h	2019-01-02 17:59:08 UTC (rev 239569)
@@ -44,10 +44,9 @@
 
 class ScriptSourceCode {
 public:
-    ScriptSourceCode(const String& source, const URL& url = "" const TextPosition& startPosition = TextPosition(), JSC::SourceProviderSourceType sourceType = JSC::SourceProviderSourceType::Program)
-        : m_provider(JSC::StringSourceProvider::create(source, JSC::SourceOrigin { url.string() }, url.string(), startPosition, sourceType))
+    ScriptSourceCode(const String& source, URL&& url = "" const TextPosition& startPosition = TextPosition(), JSC::SourceProviderSourceType sourceType = JSC::SourceProviderSourceType::Program)
+        : m_provider(JSC::StringSourceProvider::create(source, JSC::SourceOrigin { url.string() }, WTFMove(url), startPosition, sourceType))
         , m_code(m_provider.copyRef(), startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt())
-        , m_url(url)
     {
     }
 
@@ -58,10 +57,9 @@
     {
     }
 
-    ScriptSourceCode(const String& source, const URL& url, const TextPosition& startPosition, JSC::SourceProviderSourceType sourceType, Ref<CachedScriptFetcher>&& scriptFetcher)
-        : m_provider(JSC::StringSourceProvider::create(source, JSC::SourceOrigin { url.string(), WTFMove(scriptFetcher) }, url.string(), startPosition, sourceType))
+    ScriptSourceCode(const String& source, URL&& url, const TextPosition& startPosition, JSC::SourceProviderSourceType sourceType, Ref<CachedScriptFetcher>&& scriptFetcher)
+        : m_provider(JSC::StringSourceProvider::create(source, JSC::SourceOrigin { url.string(), WTFMove(scriptFetcher) }, WTFMove(url), startPosition, sourceType))
         , m_code(m_provider.copyRef(), startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt())
-        , m_url(url)
     {
     }
 
@@ -75,13 +73,12 @@
 
     CachedScript* cachedScript() const { return m_cachedScript.get(); }
 
-    const URL& url() const { return m_url; }
+    const URL& url() const { return m_provider->url(); }
     
 private:
     Ref<JSC::SourceProvider> m_provider;
     JSC::SourceCode m_code;
     CachedResourceHandle<CachedScript> m_cachedScript;
-    URL m_url;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/dom/ScriptElement.cpp (239568 => 239569)


--- trunk/Source/WebCore/dom/ScriptElement.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/dom/ScriptElement.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -264,7 +264,7 @@
     } else {
         ASSERT(scriptType == ScriptType::Classic);
         TextPosition position = document.isInDocumentWrite() ? TextPosition() : scriptStartPosition;
-        executeClassicScript(ScriptSourceCode(scriptContent(), document.url(), position, JSC::SourceProviderSourceType::Program, InlineClassicScript::create(*this)));
+        executeClassicScript(ScriptSourceCode(scriptContent(), URL(document.url()), position, JSC::SourceProviderSourceType::Program, InlineClassicScript::create(*this)));
     }
 
     return true;
@@ -347,7 +347,7 @@
     auto script = LoadableModuleScript::create(nonce, emptyString(), crossOriginMode, scriptCharset(), m_element.localName(), m_element.isInUserAgentShadowTree());
 
     TextPosition position = m_element.document().isInDocumentWrite() ? TextPosition() : scriptStartPosition;
-    ScriptSourceCode sourceCode(scriptContent(), m_element.document().url(), position, JSC::SourceProviderSourceType::Module, script.copyRef());
+    ScriptSourceCode sourceCode(scriptContent(), URL(m_element.document().url()), position, JSC::SourceProviderSourceType::Module, script.copyRef());
 
     ASSERT(m_element.document().contentSecurityPolicy());
     const auto& contentSecurityPolicy = *m_element.document().contentSecurityPolicy();
@@ -435,7 +435,7 @@
     else {
         ASSERT(!pendingScript.error());
         ASSERT_WITH_MESSAGE(scriptType() == ScriptType::Classic, "Module script always have a loadableScript pointer.");
-        executeClassicScript(ScriptSourceCode(scriptContent(), m_element.document().url(), pendingScript.startingPosition(), JSC::SourceProviderSourceType::Program, InlineClassicScript::create(*this)));
+        executeClassicScript(ScriptSourceCode(scriptContent(), URL(m_element.document().url()), pendingScript.startingPosition(), JSC::SourceProviderSourceType::Program, InlineClassicScript::create(*this)));
         dispatchLoadEventRespectingUserGestureIndicator();
     }
 }

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (239568 => 239569)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -7231,7 +7231,7 @@
 #else
         URL scriptURL;
 #endif
-        scriptController.evaluateInWorld(ScriptSourceCode(mediaControlsScript, scriptURL), world);
+        scriptController.evaluateInWorld(ScriptSourceCode(mediaControlsScript, WTFMove(scriptURL)), world);
         if (UNLIKELY(scope.exception())) {
             scope.clearException();
             return false;

Modified: trunk/Source/WebCore/page/Frame.cpp (239568 => 239569)


--- trunk/Source/WebCore/page/Frame.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/page/Frame.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -738,7 +738,7 @@
 
     document->topDocument().setAsRunningUserScripts();
     loader().client().willInjectUserScript(world);
-    m_script->evaluateInWorld(ScriptSourceCode(script.source(), script.url()), world);
+    m_script->evaluateInWorld(ScriptSourceCode(script.source(), URL(script.url())), world);
 }
 
 RenderView* Frame::contentRenderer() const

Modified: trunk/Source/WebCore/workers/WorkerGlobalScope.cpp (239568 => 239569)


--- trunk/Source/WebCore/workers/WorkerGlobalScope.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/workers/WorkerGlobalScope.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -312,7 +312,7 @@
         InspectorInstrumentation::scriptImported(*this, scriptLoader->identifier(), scriptLoader->script());
 
         NakedPtr<JSC::Exception> exception;
-        m_script->evaluate(ScriptSourceCode(scriptLoader->script(), scriptLoader->responseURL()), exception);
+        m_script->evaluate(ScriptSourceCode(scriptLoader->script(), URL(scriptLoader->responseURL())), exception);
         if (exception) {
             m_script->setException(exception);
             return { };

Modified: trunk/Source/WebCore/workers/WorkerThread.cpp (239568 => 239569)


--- trunk/Source/WebCore/workers/WorkerThread.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/workers/WorkerThread.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -190,7 +190,7 @@
     }
 
     String exceptionMessage;
-    scriptController->evaluate(ScriptSourceCode(m_startupData->m_sourceCode, m_startupData->m_scriptURL), &exceptionMessage);
+    scriptController->evaluate(ScriptSourceCode(m_startupData->m_sourceCode, URL(m_startupData->m_scriptURL)), &exceptionMessage);
     
     callOnMainThread([evaluateCallback = WTFMove(m_evaluateCallback), message = exceptionMessage.isolatedCopy()] {
         if (evaluateCallback)

Modified: trunk/Source/WebCore/worklets/WorkletGlobalScope.cpp (239568 => 239569)


--- trunk/Source/WebCore/worklets/WorkletGlobalScope.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/worklets/WorkletGlobalScope.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -61,7 +61,7 @@
     ASSERT(document.page());
 
     setSecurityOriginPolicy(SecurityOriginPolicy::create(m_topOrigin.copyRef()));
-    setContentSecurityPolicy(std::make_unique<ContentSecurityPolicy>(URL { code.url() }, *this));
+    setContentSecurityPolicy(std::make_unique<ContentSecurityPolicy>(URL { m_code.url() }, *this));
 }
 
 WorkletGlobalScope::~WorkletGlobalScope()

Modified: trunk/Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp (239568 => 239569)


--- trunk/Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp	2019-01-01 19:29:55 UTC (rev 239568)
+++ trunk/Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp	2019-01-02 17:59:08 UTC (rev 239569)
@@ -877,7 +877,7 @@
         // the libxml2 and Qt XMLDocumentParser implementations.
 
         if (scriptElement.readyToBeParserExecuted())
-            scriptElement.executeClassicScript(ScriptSourceCode(scriptElement.scriptContent(), document()->url(), m_scriptStartPosition, JSC::SourceProviderSourceType::Program, InlineClassicScript::create(scriptElement)));
+            scriptElement.executeClassicScript(ScriptSourceCode(scriptElement.scriptContent(), URL(document()->url()), m_scriptStartPosition, JSC::SourceProviderSourceType::Program, InlineClassicScript::create(scriptElement)));
         else if (scriptElement.willBeParserExecuted() && scriptElement.loadableScript()) {
             m_pendingScript = PendingScript::create(scriptElement, *scriptElement.loadableScript());
             m_pendingScript->setClient(*this);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to