Title: [226691] branches/safari-605-branch
Revision
226691
Author
[email protected]
Date
2018-01-09 20:31:53 -0800 (Tue, 09 Jan 2018)

Log Message

Cherry-pick r226628. rdar://problem/36392341

Modified Paths

Diff

Modified: branches/safari-605-branch/LayoutTests/imported/w3c/ChangeLog (226690 => 226691)


--- branches/safari-605-branch/LayoutTests/imported/w3c/ChangeLog	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/LayoutTests/imported/w3c/ChangeLog	2018-01-10 04:31:53 UTC (rev 226691)
@@ -1,3 +1,18 @@
+2018-01-09  Jason Marcell  <[email protected]>
+
+        Cherry-pick r226628. rdar://problem/36392341
+
+    2018-01-09  Youenn Fablet  <[email protected]>
+
+            Add CSP support to service workers
+            https://bugs.webkit.org/show_bug.cgi?id=181385
+
+            Reviewed by Chris Dumez.
+
+            * web-platform-tests/service-workers/service-worker/service-worker-csp-connect.https-expected.txt:
+            * web-platform-tests/service-workers/service-worker/service-worker-csp-default.https-expected.txt:
+            * web-platform-tests/service-workers/service-worker/service-worker-csp-script.https-expected.txt:
+
 2018-01-08  Ms2ger  <[email protected]>
 
         Update imagebitmap tests.

Modified: branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-connect.https-expected.txt (226690 => 226691)


--- branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-connect.https-expected.txt	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-connect.https-expected.txt	2018-01-10 04:31:53 UTC (rev 226691)
@@ -1,6 +1,6 @@
 
 PASS CSP test for connect-src in ServiceWorkerGlobalScope 
 PASS importScripts test for connect-src 
-FAIL Fetch test for connect-src assert_unreached: unexpected rejection: assert_unreached: fetch should fail. Reached unreachable code Reached unreachable code
-FAIL Redirected fetch test for connect-src assert_unreached: unexpected rejection: assert_unreached: Redirected fetch should fail. Reached unreachable code Reached unreachable code
+PASS Fetch test for connect-src 
+PASS Redirected fetch test for connect-src 
 

Modified: branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-default.https-expected.txt (226690 => 226691)


--- branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-default.https-expected.txt	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-default.https-expected.txt	2018-01-10 04:31:53 UTC (rev 226691)
@@ -1,6 +1,6 @@
 
 PASS CSP test for default-src in ServiceWorkerGlobalScope 
-FAIL importScripts test for default-src assert_true: Importing the other origins script should fail. expected true got false
-FAIL Fetch test for default-src assert_unreached: unexpected rejection: assert_unreached: fetch should fail. Reached unreachable code Reached unreachable code
-FAIL Redirected fetch test for default-src assert_unreached: unexpected rejection: assert_unreached: Redirected fetch should fail. Reached unreachable code Reached unreachable code
+PASS importScripts test for default-src 
+PASS Fetch test for default-src 
+PASS Redirected fetch test for default-src 
 

Modified: branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-script.https-expected.txt (226690 => 226691)


--- branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-script.https-expected.txt	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-script.https-expected.txt	2018-01-10 04:31:53 UTC (rev 226691)
@@ -1,6 +1,6 @@
 
 PASS CSP test for script-src in ServiceWorkerGlobalScope 
-FAIL importScripts test for script-src assert_true: Importing the other origins script should fail. expected true got false
+PASS importScripts test for script-src 
 PASS Fetch test for script-src 
 PASS Redirected fetch test for script-src 
 

Modified: branches/safari-605-branch/Source/WebCore/ChangeLog (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/ChangeLog	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/ChangeLog	2018-01-10 04:31:53 UTC (rev 226691)
@@ -1,5 +1,70 @@
 2018-01-09  Jason Marcell  <[email protected]>
 
+        Cherry-pick r226628. rdar://problem/36392341
+
+    2018-01-09  Youenn Fablet  <[email protected]>
+
+            Add CSP support to service workers
+            https://bugs.webkit.org/show_bug.cgi?id=181385
+
+            Reviewed by Chris Dumez.
+
+            Covered by rebased tests.
+
+            Added recovery of CSP information from WorkerScriptLoader.
+            Added plumbing to pass the CSP information to Service Workers.
+            Did not add persistency support for the CSP information as this requires changing the SQL database schema.
+            This will be done in a follow-up.
+
+            * workers/WorkerScriptLoader.cpp:
+            (WebCore::WorkerScriptLoader::loadAsynchronously):
+            (WebCore::WorkerScriptLoader::didReceiveResponse):
+            * workers/WorkerScriptLoader.h:
+            (WebCore::WorkerScriptLoader::contentSecurityPolicy const):
+            * workers/service/SWClientConnection.cpp:
+            (WebCore::SWClientConnection::finishedFetchingScript):
+            (WebCore::SWClientConnection::failedFetchingScript):
+            * workers/service/SWClientConnection.h:
+            * workers/service/ServiceWorkerContainer.cpp:
+            (WebCore::ServiceWorkerContainer::addRegistration):
+            (WebCore::ServiceWorkerContainer::jobFailedWithException):
+            (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
+            (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
+            * workers/service/ServiceWorkerContainer.h:
+            * workers/service/ServiceWorkerContextData.cpp:
+            (WebCore::ServiceWorkerContextData::isolatedCopy const):
+            * workers/service/ServiceWorkerContextData.h:
+            (WebCore::ServiceWorkerContextData::encode const):
+            (WebCore::ServiceWorkerContextData::decode):
+            * workers/service/ServiceWorkerFetchResult.h:
+            (WebCore::ServiceWorkerFetchResult::encode const):
+            (WebCore::ServiceWorkerFetchResult::decode):
+            * workers/service/ServiceWorkerGlobalScope.cpp:
+            (WebCore::ServiceWorkerGlobalScope::create):
+            * workers/service/ServiceWorkerGlobalScope.h:
+            * workers/service/ServiceWorkerJob.cpp:
+            (WebCore::ServiceWorkerJob::notifyFinished):
+            * workers/service/ServiceWorkerJobClient.h:
+            * workers/service/context/ServiceWorkerThread.cpp:
+            (WebCore::ServiceWorkerThread::ServiceWorkerThread):
+            (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
+            * workers/service/server/RegistrationDatabase.cpp:
+            (WebCore::v1RecordsTableSchema):
+            (WebCore::RegistrationDatabase::importRecords):
+            * workers/service/server/SWServer.cpp:
+            (WebCore::SWServer::updateWorker):
+            (WebCore::SWServer::installContextData):
+            * workers/service/server/SWServer.h:
+            * workers/service/server/SWServerJobQueue.cpp:
+            (WebCore::SWServerJobQueue::scriptFetchFinished):
+            * workers/service/server/SWServerWorker.cpp:
+            (WebCore::SWServerWorker::SWServerWorker):
+            (WebCore::m_contentSecurityPolicy):
+            (WebCore::SWServerWorker::contextData const):
+            * workers/service/server/SWServerWorker.h:
+
+2018-01-09  Jason Marcell  <[email protected]>
+
         Cherry-pick r226626. rdar://problem/36392359
 
     2018-01-09  Youenn Fablet  <[email protected]>

Modified: branches/safari-605-branch/Source/WebCore/workers/WorkerScriptLoader.cpp (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/WorkerScriptLoader.cpp	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/WorkerScriptLoader.cpp	2018-01-10 04:31:53 UTC (rev 226691)
@@ -134,6 +134,7 @@
     m_responseURL = response.url();
     m_responseMIMEType = response.mimeType();
     m_responseEncoding = response.textEncodingName();
+    m_contentSecurityPolicy = ContentSecurityPolicyResponseHeaders { response };
     if (m_client)
         m_client->didReceiveResponse(identifier, response);
 }

Modified: branches/safari-605-branch/Source/WebCore/workers/WorkerScriptLoader.h (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/WorkerScriptLoader.h	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/WorkerScriptLoader.h	2018-01-10 04:31:53 UTC (rev 226691)
@@ -26,6 +26,7 @@
 
 #pragma once
 
+#include "ContentSecurityPolicyResponseHeaders.h"
 #include "ResourceError.h"
 #include "ResourceRequest.h"
 #include "ThreadableLoader.h"
@@ -58,6 +59,7 @@
     void notifyError();
 
     String script();
+    const ContentSecurityPolicyResponseHeaders& contentSecurityPolicy() const { return m_contentSecurityPolicy; }
     const URL& url() const { return m_url; }
     const URL& responseURL() const;
     const String& responseMIMEType() const { return m_responseMIMEType; }
@@ -89,6 +91,7 @@
     URL m_url;
     URL m_responseURL;
     String m_responseMIMEType;
+    ContentSecurityPolicyResponseHeaders m_contentSecurityPolicy;
     unsigned long m_identifier { 0 };
     bool m_failed { false };
     bool m_finishing { false };

Modified: branches/safari-605-branch/Source/WebCore/workers/service/SWClientConnection.cpp (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/SWClientConnection.cpp	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/SWClientConnection.cpp	2018-01-10 04:31:53 UTC (rev 226691)
@@ -59,7 +59,7 @@
 {
     ASSERT(isMainThread());
 
-    finishFetchingScriptInServer({ { serverConnectionIdentifier(), jobIdentifier }, registrationKey, { }, error });
+    finishFetchingScriptInServer({ { serverConnectionIdentifier(), jobIdentifier }, registrationKey, { }, { }, error });
 }
 
 bool SWClientConnection::postTaskForJob(ServiceWorkerJobIdentifier jobIdentifier, IsJobComplete isJobComplete, WTF::Function<void(ServiceWorkerJob&)>&& task)

Modified: branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContainer.cpp (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContainer.cpp	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContainer.cpp	2018-01-10 04:31:53 UTC (rev 226691)
@@ -470,7 +470,7 @@
     job.fetchScriptWithContext(*context, cachePolicy);
 }
 
-void ServiceWorkerContainer::jobFinishedLoadingScript(ServiceWorkerJob& job, const String& script)
+void ServiceWorkerContainer::jobFinishedLoadingScript(ServiceWorkerJob& job, const String& script, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicy)
 {
 #ifndef NDEBUG
     ASSERT(m_creationThread.ptr() == &Thread::current());
@@ -478,8 +478,8 @@
 
     LOG(ServiceWorker, "SeviceWorkerContainer %p finished fetching script for job %s", this, job.identifier().loggingString().utf8().data());
 
-    callOnMainThread([connection = m_swConnection, jobDataIdentifier = job.data().identifier(), registrationKey = job.data().registrationKey(), script = script.isolatedCopy()] {
-        connection->finishFetchingScriptInServer({ jobDataIdentifier, registrationKey, script, { } });
+    callOnMainThread([connection = m_swConnection, jobDataIdentifier = job.data().identifier(), registrationKey = job.data().registrationKey(), script = script.isolatedCopy(), contentSecurityPolicy = contentSecurityPolicy.isolatedCopy()] {
+        connection->finishFetchingScriptInServer({ jobDataIdentifier, registrationKey, script, contentSecurityPolicy, { } });
     });
 }
 

Modified: branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContainer.h (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContainer.h	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContainer.h	2018-01-10 04:31:53 UTC (rev 226691)
@@ -91,7 +91,7 @@
     void jobResolvedWithRegistration(ServiceWorkerJob&, ServiceWorkerRegistrationData&&, ShouldNotifyWhenResolved) final;
     void jobResolvedWithUnregistrationResult(ServiceWorkerJob&, bool unregistrationResult) final;
     void startScriptFetchForJob(ServiceWorkerJob&, FetchOptions::Cache) final;
-    void jobFinishedLoadingScript(ServiceWorkerJob&, const String&) final;
+    void jobFinishedLoadingScript(ServiceWorkerJob&, const String& script, const ContentSecurityPolicyResponseHeaders&) final;
     void jobFailedLoadingScript(ServiceWorkerJob&, const ResourceError&, std::optional<Exception>&&) final;
 
     void jobDidFinish(ServiceWorkerJob&);

Modified: branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContextData.cpp (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContextData.cpp	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContextData.cpp	2018-01-10 04:31:53 UTC (rev 226691)
@@ -32,7 +32,7 @@
 
 ServiceWorkerContextData ServiceWorkerContextData::isolatedCopy() const
 {
-    return { jobDataIdentifier, registration.isolatedCopy(), serviceWorkerIdentifier, script.isolatedCopy(), scriptURL.isolatedCopy(), workerType, loadedFromDisk };
+    return { jobDataIdentifier, registration.isolatedCopy(), serviceWorkerIdentifier, script.isolatedCopy(), contentSecurityPolicy.isolatedCopy(), scriptURL.isolatedCopy(), workerType, loadedFromDisk };
 }
 
 } // namespace WebCore

Modified: branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContextData.h (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContextData.h	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerContextData.h	2018-01-10 04:31:53 UTC (rev 226691)
@@ -25,6 +25,7 @@
 
 #pragma once
 
+#include "ContentSecurityPolicyResponseHeaders.h"
 #include "ServiceWorkerIdentifier.h"
 #include "ServiceWorkerJobDataIdentifier.h"
 #include "ServiceWorkerRegistrationData.h"
@@ -40,10 +41,11 @@
     ServiceWorkerRegistrationData registration;
     ServiceWorkerIdentifier serviceWorkerIdentifier;
     String script;
+    ContentSecurityPolicyResponseHeaders contentSecurityPolicy;
     URL scriptURL;
     WorkerType workerType;
     bool loadedFromDisk;
-    
+
     template<class Encoder> void encode(Encoder&) const;
     template<class Decoder> static std::optional<ServiceWorkerContextData> decode(Decoder&);
     
@@ -53,7 +55,7 @@
 template<class Encoder>
 void ServiceWorkerContextData::encode(Encoder& encoder) const
 {
-    encoder << jobDataIdentifier << registration << serviceWorkerIdentifier << script << scriptURL << workerType << loadedFromDisk;
+    encoder << jobDataIdentifier << registration << serviceWorkerIdentifier << script << contentSecurityPolicy << scriptURL << workerType << loadedFromDisk;
 }
 
 template<class Decoder>
@@ -76,7 +78,11 @@
     String script;
     if (!decoder.decode(script))
         return std::nullopt;
-    
+
+    ContentSecurityPolicyResponseHeaders contentSecurityPolicy;
+    if (!decoder.decode(contentSecurityPolicy))
+        return std::nullopt;
+
     URL scriptURL;
     if (!decoder.decode(scriptURL))
         return std::nullopt;
@@ -89,7 +95,7 @@
     if (!decoder.decode(loadedFromDisk))
         return std::nullopt;
 
-    return {{ WTFMove(*jobDataIdentifier), WTFMove(*registration), WTFMove(*serviceWorkerIdentifier), WTFMove(script), WTFMove(scriptURL), workerType, loadedFromDisk}};
+    return {{ WTFMove(*jobDataIdentifier), WTFMove(*registration), WTFMove(*serviceWorkerIdentifier), WTFMove(script), WTFMove(contentSecurityPolicy), WTFMove(scriptURL), workerType, loadedFromDisk }};
 }
 
 } // namespace WebCore

Modified: branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerFetchResult.h (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerFetchResult.h	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerFetchResult.h	2018-01-10 04:31:53 UTC (rev 226691)
@@ -27,6 +27,7 @@
 
 #if ENABLE(SERVICE_WORKER)
 
+#include "ContentSecurityPolicyResponseHeaders.h"
 #include "ResourceError.h"
 #include "ServiceWorkerRegistrationKey.h"
 #include "ServiceWorkerTypes.h"
@@ -37,6 +38,7 @@
     ServiceWorkerJobDataIdentifier jobDataIdentifier;
     ServiceWorkerRegistrationKey registrationKey;
     String script;
+    ContentSecurityPolicyResponseHeaders contentSecurityPolicy;
     ResourceError scriptError;
 
     template<class Encoder> void encode(Encoder&) const;
@@ -46,7 +48,7 @@
 template<class Encoder>
 void ServiceWorkerFetchResult::encode(Encoder& encoder) const
 {
-    encoder << jobDataIdentifier << registrationKey << script << scriptError;
+    encoder << jobDataIdentifier << registrationKey << script << contentSecurityPolicy << scriptError;
 }
 
 template<class Decoder>
@@ -65,6 +67,8 @@
 
     if (!decoder.decode(result.script))
         return false;
+    if (!decoder.decode(result.contentSecurityPolicy))
+        return false;
     if (!decoder.decode(result.scriptError))
         return false;
 

Modified: branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp	2018-01-10 04:31:53 UTC (rev 226691)
@@ -38,6 +38,13 @@
 
 namespace WebCore {
 
+Ref<ServiceWorkerGlobalScope> ServiceWorkerGlobalScope::create(const ServiceWorkerContextData& data, const URL& url, const String& identifier, const String& userAgent, bool isOnline, ServiceWorkerThread& thread, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicy, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, PAL::SessionID sessionID)
+{
+    auto scope = adoptRef(*new ServiceWorkerGlobalScope { data, url, identifier, userAgent, isOnline, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, connectionProxy, socketProvider, sessionID });
+    scope->applyContentSecurityPolicyResponseHeaders(contentSecurityPolicy);
+    return scope;
+}
+
 ServiceWorkerGlobalScope::ServiceWorkerGlobalScope(const ServiceWorkerContextData& data, const URL& url, const String& identifier, const String& userAgent, bool isOnline, ServiceWorkerThread& thread, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, PAL::SessionID sessionID)
     : WorkerGlobalScope(url, identifier, userAgent, isOnline, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, connectionProxy, socketProvider, sessionID)
     , m_contextData(crossThreadCopy(data))

Modified: branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerGlobalScope.h (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerGlobalScope.h	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerGlobalScope.h	2018-01-10 04:31:53 UTC (rev 226691)
@@ -43,10 +43,7 @@
 
 class ServiceWorkerGlobalScope final : public WorkerGlobalScope {
 public:
-    template<typename... Args> static Ref<ServiceWorkerGlobalScope> create(Args&&... args)
-    {
-        return adoptRef(*new ServiceWorkerGlobalScope(std::forward<Args>(args)...));
-    }
+    static Ref<ServiceWorkerGlobalScope> create(const ServiceWorkerContextData&, const URL&, const String& identifier, const String& userAgent, bool isOnline, ServiceWorkerThread&, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, PAL::SessionID);
 
     ~ServiceWorkerGlobalScope();
 

Modified: branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerJob.cpp (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerJob.cpp	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerJob.cpp	2018-01-10 04:31:53 UTC (rev 226691)
@@ -142,7 +142,7 @@
     ASSERT(m_scriptLoader);
     
     if (!m_scriptLoader->failed())
-        m_client->jobFinishedLoadingScript(*this, m_scriptLoader->script());
+        m_client->jobFinishedLoadingScript(*this, m_scriptLoader->script(), m_scriptLoader->contentSecurityPolicy());
     else {
         auto& error =  m_scriptLoader->error();
         ASSERT(!error.isNull());

Modified: branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerJobClient.h (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerJobClient.h	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/ServiceWorkerJobClient.h	2018-01-10 04:31:53 UTC (rev 226691)
@@ -32,6 +32,7 @@
 
 namespace WebCore {
 
+class ContentSecurityPolicyResponseHeaders;
 class Exception;
 class ResourceError;
 class ServiceWorkerJob;
@@ -48,7 +49,7 @@
     virtual void jobResolvedWithRegistration(ServiceWorkerJob&, ServiceWorkerRegistrationData&&, ShouldNotifyWhenResolved) = 0;
     virtual void jobResolvedWithUnregistrationResult(ServiceWorkerJob&, bool unregistrationResult) = 0;
     virtual void startScriptFetchForJob(ServiceWorkerJob&, FetchOptions::Cache) = 0;
-    virtual void jobFinishedLoadingScript(ServiceWorkerJob&, const String&) = 0;
+    virtual void jobFinishedLoadingScript(ServiceWorkerJob&, const String& script, const ContentSecurityPolicyResponseHeaders&) = 0;
     virtual void jobFailedLoadingScript(ServiceWorkerJob&, const ResourceError&, std::optional<Exception>&&) = 0;
 
     virtual SWServerConnectionIdentifier connectionIdentifier() = 0;

Modified: branches/safari-605-branch/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp	2018-01-10 04:31:53 UTC (rev 226691)
@@ -71,7 +71,7 @@
 // FIXME: Use valid runtime flags
 
 ServiceWorkerThread::ServiceWorkerThread(const ServiceWorkerContextData& data, PAL::SessionID, String&& userAgent, WorkerLoaderProxy& loaderProxy, WorkerDebuggerProxy& debuggerProxy, IDBClient::IDBConnectionProxy* idbConnectionProxy, SocketProvider* socketProvider)
-    : WorkerThread(data.scriptURL, "serviceworker:" + Inspector::IdentifiersFactory::createIdentifier(), WTFMove(userAgent), NetworkStateNotifier::singleton().onLine(), data.script, loaderProxy, debuggerProxy, DummyServiceWorkerThreadProxy::shared(), WorkerThreadStartMode::Normal, ContentSecurityPolicyResponseHeaders { }, false, SecurityOrigin::create(data.scriptURL).get(), MonotonicTime::now(), idbConnectionProxy, socketProvider, JSC::RuntimeFlags::createAllEnabled(), SessionID::defaultSessionID())
+    : WorkerThread(data.scriptURL, "serviceworker:" + Inspector::IdentifiersFactory::createIdentifier(), WTFMove(userAgent), NetworkStateNotifier::singleton().onLine(), data.script, loaderProxy, debuggerProxy, DummyServiceWorkerThreadProxy::shared(), WorkerThreadStartMode::Normal, data.contentSecurityPolicy, false, SecurityOrigin::create(data.scriptURL).get(), MonotonicTime::now(), idbConnectionProxy, socketProvider, JSC::RuntimeFlags::createAllEnabled(), SessionID::defaultSessionID())
     , m_data(data.isolatedCopy())
     , m_workerObjectProxy(DummyServiceWorkerThreadProxy::shared())
 {
@@ -80,9 +80,9 @@
 
 ServiceWorkerThread::~ServiceWorkerThread() = default;
 
-Ref<WorkerGlobalScope> ServiceWorkerThread::createWorkerGlobalScope(const URL& url, const String& identifier, const String& userAgent, bool isOnline, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, PAL::SessionID sessionID)
+Ref<WorkerGlobalScope> ServiceWorkerThread::createWorkerGlobalScope(const URL& url, const String& identifier, const String& userAgent, bool isOnline, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicy, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, PAL::SessionID sessionID)
 {
-    return ServiceWorkerGlobalScope::create(m_data, url, identifier, userAgent, isOnline, *this, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, idbConnectionProxy(), socketProvider(), sessionID);
+    return ServiceWorkerGlobalScope::create(m_data, url, identifier, userAgent, isOnline, *this, contentSecurityPolicy, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, idbConnectionProxy(), socketProvider(), sessionID);
 }
 
 void ServiceWorkerThread::runEventLoop()

Modified: branches/safari-605-branch/Source/WebCore/workers/service/server/RegistrationDatabase.cpp (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/server/RegistrationDatabase.cpp	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/server/RegistrationDatabase.cpp	2018-01-10 04:31:53 UTC (rev 226691)
@@ -328,7 +328,7 @@
         auto registrationIdentifier = generateObjectIdentifier<ServiceWorkerRegistrationIdentifierType>();
         auto serviceWorkerData = ServiceWorkerData { workerIdentifier, scriptURL, ServiceWorkerState::Activated, *workerType, registrationIdentifier };
         auto registration = ServiceWorkerRegistrationData { WTFMove(*key), registrationIdentifier, URL(originURL, scopePath), *updateViaCache, lastUpdateCheckTime, std::nullopt, std::nullopt, WTFMove(serviceWorkerData) };
-        auto contextData = ServiceWorkerContextData { std::nullopt, WTFMove(registration), workerIdentifier, WTFMove(script), WTFMove(scriptURL), *workerType, true };
+        auto contextData = ServiceWorkerContextData { std::nullopt, WTFMove(registration), workerIdentifier, WTFMove(script), { }, WTFMove(scriptURL), *workerType, true };
 
         postTaskReply(createCrossThreadTask(*this, &RegistrationDatabase::addRegistrationToStore, WTFMove(contextData)));
     }

Modified: branches/safari-605-branch/Source/WebCore/workers/service/server/SWServer.cpp (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/server/SWServer.cpp	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/server/SWServer.cpp	2018-01-10 04:31:53 UTC (rev 226691)
@@ -431,10 +431,10 @@
     registration->removeClientServiceWorkerRegistration(connection.identifier());
 }
 
-void SWServer::updateWorker(Connection&, const ServiceWorkerJobDataIdentifier& jobDataIdentifier, SWServerRegistration& registration, const URL& url, const String& script, WorkerType type)
+void SWServer::updateWorker(Connection&, const ServiceWorkerJobDataIdentifier& jobDataIdentifier, SWServerRegistration& registration, const URL& url, const String& script, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicy, WorkerType type)
 {
     registration.setLastUpdateTime(WallTime::now());
-    tryInstallContextData({ jobDataIdentifier, registration.data(), generateObjectIdentifier<ServiceWorkerIdentifierType>(), script, url, type, false });
+    tryInstallContextData({ jobDataIdentifier, registration.data(), generateObjectIdentifier<ServiceWorkerIdentifierType>(), script, contentSecurityPolicy, url, type, false });
 }
 
 void SWServer::tryInstallContextData(ServiceWorkerContextData&& data)
@@ -478,7 +478,7 @@
     auto* registration = m_registrations.get(data.registration.key);
     RELEASE_ASSERT(registration);
 
-    auto worker = SWServerWorker::create(*this, *registration, connection->identifier(), data.scriptURL, data.script, data.workerType, data.serviceWorkerIdentifier);
+    auto worker = SWServerWorker::create(*this, *registration, connection->identifier(), data.scriptURL, data.script, data.contentSecurityPolicy, data.workerType, data.serviceWorkerIdentifier);
 
     // We don't immediately launch all workers that were just read in from disk,
     // as it is unlikely they will be needed immediately.

Modified: branches/safari-605-branch/Source/WebCore/workers/service/server/SWServer.h (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/server/SWServer.h	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/server/SWServer.h	2018-01-10 04:31:53 UTC (rev 226691)
@@ -140,7 +140,7 @@
     void postTask(CrossThreadTask&&);
     void postTaskReply(CrossThreadTask&&);
 
-    void updateWorker(Connection&, const ServiceWorkerJobDataIdentifier&, SWServerRegistration&, const URL&, const String& script, WorkerType);
+    void updateWorker(Connection&, const ServiceWorkerJobDataIdentifier&, SWServerRegistration&, const URL&, const String& script, const ContentSecurityPolicyResponseHeaders&, WorkerType);
     void terminateWorker(SWServerWorker&);
     void syncTerminateWorker(SWServerWorker&);
     void fireInstallEvent(SWServerWorker&);

Modified: branches/safari-605-branch/Source/WebCore/workers/service/server/SWServerJobQueue.cpp (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/server/SWServerJobQueue.cpp	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/server/SWServerJobQueue.cpp	2018-01-10 04:31:53 UTC (rev 226691)
@@ -96,7 +96,7 @@
     }
 
     // FIXME: Support the proper worker type (classic vs module)
-    m_server.updateWorker(connection, job.identifier(), *registration, job.scriptURL, result.script, WorkerType::Classic);
+    m_server.updateWorker(connection, job.identifier(), *registration, job.scriptURL, result.script, result.contentSecurityPolicy, WorkerType::Classic);
 }
 
 // https://w3c.github.io/ServiceWorker/#update-algorithm

Modified: branches/safari-605-branch/Source/WebCore/workers/service/server/SWServerWorker.cpp (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/server/SWServerWorker.cpp	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/server/SWServerWorker.cpp	2018-01-10 04:31:53 UTC (rev 226691)
@@ -43,12 +43,14 @@
     return allWorkers().get(identifier);
 }
 
-SWServerWorker::SWServerWorker(SWServer& server, SWServerRegistration& registration, SWServerToContextConnectionIdentifier contextConnectionIdentifier, const URL& scriptURL, const String& script, WorkerType type, ServiceWorkerIdentifier identifier)
+// FIXME: Use r-value references for script and contentSecurityPolicy
+SWServerWorker::SWServerWorker(SWServer& server, SWServerRegistration& registration, SWServerToContextConnectionIdentifier contextConnectionIdentifier, const URL& scriptURL, const String& script, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicy, WorkerType type, ServiceWorkerIdentifier identifier)
     : m_server(server)
     , m_registrationKey(registration.key())
     , m_contextConnectionIdentifier(contextConnectionIdentifier)
     , m_data { identifier, scriptURL, ServiceWorkerState::Redundant, type, registration.identifier() }
     , m_script(script)
+    , m_contentSecurityPolicy(contentSecurityPolicy)
 {
     m_data.scriptURL.removeFragmentIdentifier();
 
@@ -69,7 +71,7 @@
     auto* registration = m_server.getRegistration(m_registrationKey);
     ASSERT(registration);
 
-    return { std::nullopt, registration->data(), m_data.identifier, m_script, m_data.scriptURL, m_data.type, false };
+    return { std::nullopt, registration->data(), m_data.identifier, m_script, m_contentSecurityPolicy, m_data.scriptURL, m_data.type, false };
 }
 
 void SWServerWorker::terminate()

Modified: branches/safari-605-branch/Source/WebCore/workers/service/server/SWServerWorker.h (226690 => 226691)


--- branches/safari-605-branch/Source/WebCore/workers/service/server/SWServerWorker.h	2018-01-10 04:31:47 UTC (rev 226690)
+++ branches/safari-605-branch/Source/WebCore/workers/service/server/SWServerWorker.h	2018-01-10 04:31:53 UTC (rev 226691)
@@ -104,7 +104,7 @@
     const ClientOrigin& origin() const;
 
 private:
-    SWServerWorker(SWServer&, SWServerRegistration&, SWServerToContextConnectionIdentifier, const URL&, const String& script, WorkerType, ServiceWorkerIdentifier);
+    SWServerWorker(SWServer&, SWServerRegistration&, SWServerToContextConnectionIdentifier, const URL&, const String& script, const ContentSecurityPolicyResponseHeaders&,  WorkerType, ServiceWorkerIdentifier);
 
     void callWhenActivatedHandler(bool success);
 
@@ -113,6 +113,7 @@
     SWServerToContextConnectionIdentifier m_contextConnectionIdentifier;
     ServiceWorkerData m_data;
     String m_script;
+    ContentSecurityPolicyResponseHeaders m_contentSecurityPolicy;
     bool m_hasPendingEvents { false };
     State m_state { State::NotRunning };
     mutable std::optional<ClientOrigin> m_origin;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to