Diff
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (226627 => 226628)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2018-01-09 13:57:25 UTC (rev 226628)
@@ -1,3 +1,14 @@
+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-09 Ali Juma <[email protected]>
Implement VisualViewport API events
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-connect.https-expected.txt (226627 => 226628)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-connect.https-expected.txt 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-connect.https-expected.txt 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-default.https-expected.txt (226627 => 226628)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-default.https-expected.txt 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-default.https-expected.txt 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-script.https-expected.txt (226627 => 226628)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-script.https-expected.txt 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/service-worker-csp-script.https-expected.txt 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/ChangeLog (226627 => 226628)
--- trunk/Source/WebCore/ChangeLog 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/ChangeLog 2018-01-09 13:57:25 UTC (rev 226628)
@@ -1,3 +1,64 @@
+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 Antoine Quint <[email protected]>
Provide a method to obtain a CSS value from a RenderStyle by CSSPropertyID
Modified: trunk/Source/WebCore/workers/WorkerScriptLoader.cpp (226627 => 226628)
--- trunk/Source/WebCore/workers/WorkerScriptLoader.cpp 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/WorkerScriptLoader.cpp 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/WorkerScriptLoader.h (226627 => 226628)
--- trunk/Source/WebCore/workers/WorkerScriptLoader.h 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/WorkerScriptLoader.h 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/SWClientConnection.cpp (226627 => 226628)
--- trunk/Source/WebCore/workers/service/SWClientConnection.cpp 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/SWClientConnection.cpp 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp (226627 => 226628)
--- trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContainer.cpp 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h (226627 => 226628)
--- trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContainer.h 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/ServiceWorkerContextData.cpp (226627 => 226628)
--- trunk/Source/WebCore/workers/service/ServiceWorkerContextData.cpp 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContextData.cpp 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/ServiceWorkerContextData.h (226627 => 226628)
--- trunk/Source/WebCore/workers/service/ServiceWorkerContextData.h 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerContextData.h 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/ServiceWorkerFetchResult.h (226627 => 226628)
--- trunk/Source/WebCore/workers/service/ServiceWorkerFetchResult.h 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerFetchResult.h 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp (226627 => 226628)
--- trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.h (226627 => 226628)
--- trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.h 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.h 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp (226627 => 226628)
--- trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJob.cpp 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/ServiceWorkerJobClient.h (226627 => 226628)
--- trunk/Source/WebCore/workers/service/ServiceWorkerJobClient.h 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/ServiceWorkerJobClient.h 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp (226627 => 226628)
--- trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/server/RegistrationDatabase.cpp (226627 => 226628)
--- trunk/Source/WebCore/workers/service/server/RegistrationDatabase.cpp 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/server/RegistrationDatabase.cpp 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/server/SWServer.cpp (226627 => 226628)
--- trunk/Source/WebCore/workers/service/server/SWServer.cpp 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/server/SWServer.cpp 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/server/SWServer.h (226627 => 226628)
--- trunk/Source/WebCore/workers/service/server/SWServer.h 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/server/SWServer.h 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/server/SWServerJobQueue.cpp (226627 => 226628)
--- trunk/Source/WebCore/workers/service/server/SWServerJobQueue.cpp 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/server/SWServerJobQueue.cpp 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/server/SWServerWorker.cpp (226627 => 226628)
--- trunk/Source/WebCore/workers/service/server/SWServerWorker.cpp 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/server/SWServerWorker.cpp 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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: trunk/Source/WebCore/workers/service/server/SWServerWorker.h (226627 => 226628)
--- trunk/Source/WebCore/workers/service/server/SWServerWorker.h 2018-01-09 13:11:53 UTC (rev 226627)
+++ trunk/Source/WebCore/workers/service/server/SWServerWorker.h 2018-01-09 13:57:25 UTC (rev 226628)
@@ -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;