Index: Source/core/dom/Document.cpp |
diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp |
index 43e0fbb257c9b8957918ee8083fdb126fa1d6114..4062d41226534d89e4486773cebf5ec5018738e0 100644 |
--- a/Source/core/dom/Document.cpp |
+++ b/Source/core/dom/Document.cpp |
@@ -4769,13 +4769,6 @@ void Document::initSecurityContext() |
initSecurityContext(DocumentInit(m_url, m_frame, contextDocument(), m_importsController)); |
} |
-static PassRefPtr<ContentSecurityPolicy> contentSecurityPolicyFor(Document* document) |
-{ |
- if (document->importsController()) |
- return document->importsController()->master()->contentSecurityPolicy(); |
- return ContentSecurityPolicy::create(document); |
-} |
- |
void Document::initSecurityContext(const DocumentInit& initializer) |
{ |
if (haveInitializedSecurityOrigin()) { |
@@ -4788,7 +4781,7 @@ void Document::initSecurityContext(const DocumentInit& initializer) |
// This can occur via document.implementation.createDocument(). |
m_cookieURL = KURL(ParsedURLString, emptyString()); |
setSecurityOrigin(SecurityOrigin::createUnique()); |
- setContentSecurityPolicy(ContentSecurityPolicy::create(this)); |
+ initContentSecurityPolicy(); |
return; |
} |
@@ -4797,7 +4790,16 @@ void Document::initSecurityContext(const DocumentInit& initializer) |
m_cookieURL = m_url; |
enforceSandboxFlags(initializer.sandboxFlags()); |
setSecurityOrigin(isSandboxed(SandboxOrigin) ? SecurityOrigin::createUnique() : SecurityOrigin::create(m_url)); |
- setContentSecurityPolicy(contentSecurityPolicyFor(this)); |
+ |
+ if (importsController()) { |
+ // If this document is an HTML import, grab a reference to it's master document's Content |
+ // Security Policy. We don't call 'initContentSecurityPolicy' in this case, as we can't |
+ // rebind the master document's policy object: its ExecutionContext needs to remain tied |
+ // to the master document. |
+ setContentSecurityPolicy(importsController()->master()->contentSecurityPolicy()); |
+ } else { |
+ initContentSecurityPolicy(); |
+ } |
if (Settings* settings = initializer.settings()) { |
if (!settings->webSecurityEnabled()) { |
@@ -4849,11 +4851,14 @@ void Document::initSecurityContext(const DocumentInit& initializer) |
setSecurityOrigin(initializer.owner()->securityOrigin()); |
} |
-void Document::initContentSecurityPolicy(const ContentSecurityPolicyResponseHeaders& headers) |
+void Document::initContentSecurityPolicy(PassRefPtr<ContentSecurityPolicy> csp) |
{ |
+ setContentSecurityPolicy(csp ? csp : ContentSecurityPolicy::create()); |
if (m_frame && m_frame->tree().parent() && m_frame->tree().parent()->isLocalFrame() && (shouldInheritSecurityOriginFromOwner(m_url) || isPluginDocument())) |
contentSecurityPolicy()->copyStateFrom(toLocalFrame(m_frame->tree().parent())->document()->contentSecurityPolicy()); |
- contentSecurityPolicy()->didReceiveHeaders(headers); |
+ if (transformSourceDocument()) |
+ contentSecurityPolicy()->copyStateFrom(transformSourceDocument()->contentSecurityPolicy()); |
+ contentSecurityPolicy()->bindToExecutionContext(this); |
} |
bool Document::allowInlineEventHandlers(Node* node, EventListener* listener, const String& contextURL, const WTF::OrdinalNumber& contextLine) |