Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(396)

Unified Diff: Source/web/WebEmbeddedWorkerImpl.cpp

Issue 714833002: [ServiceWorker] CSP support for ServiceWorker environment. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: else if Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/web/WebEmbeddedWorkerImpl.cpp
diff --git a/Source/web/WebEmbeddedWorkerImpl.cpp b/Source/web/WebEmbeddedWorkerImpl.cpp
index 24a2327033df1285e3e2da989832efe0c811ef32..1d2ea672898545bd17d15fad5c7eb84099403c53 100644
--- a/Source/web/WebEmbeddedWorkerImpl.cpp
+++ b/Source/web/WebEmbeddedWorkerImpl.cpp
@@ -33,6 +33,7 @@
#include "core/dom/CrossThreadTask.h"
#include "core/dom/Document.h"
+#include "core/frame/csp/ContentSecurityPolicy.h"
#include "core/inspector/InspectorInstrumentation.h"
#include "core/inspector/WorkerDebuggerAgent.h"
#include "core/inspector/WorkerInspectorController.h"
@@ -49,6 +50,7 @@
#include "platform/SharedBuffer.h"
#include "platform/heap/Handle.h"
#include "platform/network/ContentSecurityPolicyParsers.h"
+#include "platform/network/ContentSecurityPolicyResponseHeaders.h"
#include "public/platform/Platform.h"
#include "public/platform/WebURLRequest.h"
#include "public/web/WebDevToolsAgent.h"
@@ -88,6 +90,13 @@ public:
*loadingContext, scriptURL, DenyCrossOriginRequests, this);
}
+ void didReceiveResponse(unsigned long identifier, const ResourceResponse& response) override
+ {
+ m_contentSecurityPolicy = ContentSecurityPolicy::create();
+ m_contentSecurityPolicy->setOverrideURLForSelf(response.url());
+ m_contentSecurityPolicy->didReceiveHeaders(ContentSecurityPolicyResponseHeaders(response));
+ }
+
virtual void notifyFinished() override
{
m_callback();
@@ -101,6 +110,7 @@ public:
bool failed() const { return m_scriptLoader->failed(); }
const KURL& url() const { return m_scriptLoader->responseURL(); }
String script() const { return m_scriptLoader->script(); }
+ PassRefPtr<ContentSecurityPolicy> releaseContentSecurityPolicy() { return m_contentSecurityPolicy.release(); }
private:
Loader() : m_scriptLoader(WorkerScriptLoader::create())
@@ -108,6 +118,7 @@ private:
}
RefPtr<WorkerScriptLoader> m_scriptLoader;
+ RefPtr<ContentSecurityPolicy> m_contentSecurityPolicy;
Closure m_callback;
};
@@ -407,6 +418,9 @@ void WebEmbeddedWorkerImpl::startWorkerThread()
providePermissionClientToWorker(workerClients.get(), m_permissionClient.release());
provideServiceWorkerGlobalScopeClientToWorker(workerClients.get(), ServiceWorkerGlobalScopeClientImpl::create(*m_workerContextClient));
+ // We need to set the CSP to both the shadow page's document and the ServiceWorkerGlobalScope.
+ document->initContentSecurityPolicy(m_mainScriptLoader->releaseContentSecurityPolicy());
+
KURL scriptURL = m_mainScriptLoader->url();
OwnPtrWillBeRawPtr<WorkerThreadStartupData> startupData =
WorkerThreadStartupData::create(
@@ -414,9 +428,8 @@ void WebEmbeddedWorkerImpl::startWorkerThread()
m_workerStartData.userAgent,
m_mainScriptLoader->script(),
startMode,
- // FIXME: fill appropriate CSP info and policy type.
- String(),
- ContentSecurityPolicyHeaderTypeEnforce,
+ document->contentSecurityPolicy()->deprecatedHeader(),
Mike West 2014/11/12 12:28:36 I don't think this is correct; it differs from the
horo 2014/11/13 01:09:02 This document is not the document who created (reg
Mike West 2014/11/19 10:31:49 Hrm. Ok, then I misunderstood the implementation h
horo 2014/11/19 12:35:41 Yes. We create the dummy document which lives in t
+ document->contentSecurityPolicy()->deprecatedHeaderType(),
starterOrigin,
workerClients.release());

Powered by Google App Engine
This is Rietveld 408576698