Index: Source/core/dom/StyleElement.cpp |
diff --git a/Source/core/dom/StyleElement.cpp b/Source/core/dom/StyleElement.cpp |
index 58102bf84e944f8cb52db60328d7bb48ebbc26d7..cea6ad5b960500eba5264b104721ecdd605aa512 100644 |
--- a/Source/core/dom/StyleElement.cpp |
+++ b/Source/core/dom/StyleElement.cpp |
@@ -21,6 +21,7 @@ |
#include "config.h" |
#include "core/dom/StyleElement.h" |
+#include "bindings/v8/ScriptController.h" |
#include "core/css/MediaList.h" |
#include "core/css/MediaQueryEvaluator.h" |
#include "core/css/StyleSheetContents.h" |
@@ -28,6 +29,7 @@ |
#include "core/dom/Element.h" |
#include "core/dom/ScriptableDocumentParser.h" |
#include "core/dom/StyleEngine.h" |
+#include "core/frame/LocalFrame.h" |
#include "core/frame/csp/ContentSecurityPolicy.h" |
#include "core/html/HTMLStyleElement.h" |
#include "platform/TraceEvent.h" |
@@ -147,9 +149,14 @@ void StyleElement::createSheet(Element* e, const String& text) |
if (m_sheet) |
clearSheet(e); |
+ // Inline style added from an isolated world should bypass the main world's |
+ // CSP just as an inline script would. |
+ LocalFrame* frame = document.frame(); |
+ bool shouldBypassMainWorldContentSecurityPolicy = frame && frame->script().shouldBypassMainWorldContentSecurityPolicy(); |
+ |
// If type is empty or CSS, this is a CSS style sheet. |
const AtomicString& type = this->type(); |
- bool passesContentSecurityPolicyChecks = document.contentSecurityPolicy()->allowStyleHash(text) || document.contentSecurityPolicy()->allowStyleNonce(e->fastGetAttribute(HTMLNames::nonceAttr)) || document.contentSecurityPolicy()->allowInlineStyle(e->document().url(), m_startPosition.m_line); |
+ bool passesContentSecurityPolicyChecks = shouldBypassMainWorldContentSecurityPolicy || document.contentSecurityPolicy()->allowStyleHash(text) || document.contentSecurityPolicy()->allowStyleNonce(e->fastGetAttribute(HTMLNames::nonceAttr)) || document.contentSecurityPolicy()->allowInlineStyle(e->document().url(), m_startPosition.m_line); |
if (isCSS(e, type) && passesContentSecurityPolicyChecks) { |
RefPtrWillBeRawPtr<MediaQuerySet> mediaQueries = MediaQuerySet::create(media()); |