Index: third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
index 5826cacd0a6e23ad3606c08c47422bf1ece5987b..3fa8a3f555a870bc50c7390dd53538b0398635b4 100644 |
--- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
+++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
@@ -2094,6 +2094,34 @@ bool WebLocalFrameImpl::maybeRenderFallbackContent( |
return true; |
} |
+// Called when a navigation is blocked because a Content Security Policy (CSP) |
+// is infringed. |
+void WebLocalFrameImpl::reportContentSecurityPolicyViolation( |
+ const blink::WebContentSecurityPolicyViolation& violation) { |
+ DCHECK(frame() && frame()->document()); |
+ Document* document = frame()->document(); |
+ Vector<String> reportEndpoints; |
+ for (const WebString& endPoint : violation.reportEndpoints) |
+ reportEndpoints.push_back(endPoint); |
+ document->contentSecurityPolicy()->reportViolation( |
+ violation.directive, /* directiveText */ |
+ ContentSecurityPolicy::getDirectiveType( |
+ violation.effectiveDirective), /* effectiveType */ |
+ violation.consoleMessage, /* consoleMessage */ |
+ violation.blockedUrl, /* blockedUrl */ |
+ reportEndpoints, /* reportEndpoints */ |
+ violation.header, /* header */ |
+ static_cast<ContentSecurityPolicyHeaderType>(violation.disposition), |
+ ContentSecurityPolicy::ViolationType::URLViolation, /* ViolationType */ |
+ nullptr, /* LocalFrame */ |
+ violation.afterRedirect ? RedirectStatus::FollowedRedirect |
+ : RedirectStatus::NoRedirect, |
+ // TODO(arthursonzogni, clamy) Provide the context line number here. |
+ // See http://crbug.com/690946 |
+ 0, /* contextLine */ |
+ nullptr); /* Element */ |
+} |
+ |
bool WebLocalFrameImpl::isLoading() const { |
if (!frame() || !frame()->document()) |
return false; |