Index: third_party/WebKit/Source/core/loader/MixedContentChecker.cpp |
diff --git a/third_party/WebKit/Source/core/loader/MixedContentChecker.cpp b/third_party/WebKit/Source/core/loader/MixedContentChecker.cpp |
index 21c313b2ce4e3735c1e6a6554233143787c2aa0a..5fdd0d93700db11c51c76fc2f69563668c82ac39 100644 |
--- a/third_party/WebKit/Source/core/loader/MixedContentChecker.cpp |
+++ b/third_party/WebKit/Source/core/loader/MixedContentChecker.cpp |
@@ -61,6 +61,81 @@ KURL mainResourceUrlForFrame(Frame* frame) { |
return toLocalFrame(frame)->document()->url(); |
} |
+const char* requestContextName(WebURLRequest::RequestContext context) { |
+ switch (context) { |
+ case WebURLRequest::RequestContextAudio: |
+ return "audio file"; |
+ case WebURLRequest::RequestContextBeacon: |
+ return "Beacon endpoint"; |
+ case WebURLRequest::RequestContextCSPReport: |
+ return "Content Security Policy reporting endpoint"; |
+ case WebURLRequest::RequestContextDownload: |
+ return "download"; |
+ case WebURLRequest::RequestContextEmbed: |
+ return "plugin resource"; |
+ case WebURLRequest::RequestContextEventSource: |
+ return "EventSource endpoint"; |
+ case WebURLRequest::RequestContextFavicon: |
+ return "favicon"; |
+ case WebURLRequest::RequestContextFetch: |
+ return "resource"; |
+ case WebURLRequest::RequestContextFont: |
+ return "font"; |
+ case WebURLRequest::RequestContextForm: |
+ return "form action"; |
+ case WebURLRequest::RequestContextFrame: |
+ return "frame"; |
+ case WebURLRequest::RequestContextHyperlink: |
+ return "resource"; |
+ case WebURLRequest::RequestContextIframe: |
+ return "frame"; |
+ case WebURLRequest::RequestContextImage: |
+ return "image"; |
+ case WebURLRequest::RequestContextImageSet: |
+ return "image"; |
+ case WebURLRequest::RequestContextImport: |
+ return "HTML Import"; |
+ case WebURLRequest::RequestContextInternal: |
+ return "resource"; |
+ case WebURLRequest::RequestContextLocation: |
+ return "resource"; |
+ case WebURLRequest::RequestContextManifest: |
+ return "manifest"; |
+ case WebURLRequest::RequestContextObject: |
+ return "plugin resource"; |
+ case WebURLRequest::RequestContextPing: |
+ return "hyperlink auditing endpoint"; |
+ case WebURLRequest::RequestContextPlugin: |
+ return "plugin data"; |
+ case WebURLRequest::RequestContextPrefetch: |
+ return "prefetch resource"; |
+ case WebURLRequest::RequestContextScript: |
+ return "script"; |
+ case WebURLRequest::RequestContextServiceWorker: |
+ return "Service Worker script"; |
+ case WebURLRequest::RequestContextSharedWorker: |
+ return "Shared Worker script"; |
+ case WebURLRequest::RequestContextStyle: |
+ return "stylesheet"; |
+ case WebURLRequest::RequestContextSubresource: |
+ return "resource"; |
+ case WebURLRequest::RequestContextTrack: |
+ return "Text Track"; |
+ case WebURLRequest::RequestContextUnspecified: |
+ return "resource"; |
+ case WebURLRequest::RequestContextVideo: |
+ return "video"; |
+ case WebURLRequest::RequestContextWorker: |
+ return "Worker script"; |
+ case WebURLRequest::RequestContextXMLHttpRequest: |
+ return "XMLHttpRequest endpoint"; |
+ case WebURLRequest::RequestContextXSLT: |
+ return "XSLT"; |
+ } |
+ NOTREACHED(); |
+ return "resource"; |
+} |
+ |
} // namespace |
static void measureStricterVersionOfIsMixedContent(Frame* frame, |
@@ -150,8 +225,7 @@ void MixedContentChecker::logToConsoleAboutFetch( |
"Mixed Content: The page at '%s' was loaded over HTTPS, but requested an " |
"insecure %s '%s'. %s", |
mainResourceUrl.elidedString().utf8().data(), |
- WebMixedContent::requestContextName(requestContext), |
- url.elidedString().utf8().data(), |
+ requestContextName(requestContext), url.elidedString().utf8().data(), |
allowed ? "This content should also be served over HTTPS." |
: "This request has been blocked; the content must be served " |
"over HTTPS."); |
@@ -219,6 +293,13 @@ bool MixedContentChecker::shouldBlockFetch( |
ResourceRequest::RedirectStatus redirectStatus, |
const KURL& url, |
MixedContentChecker::ReportingStatus reportingStatus) { |
+ // Frame-level loads are checked by the browser. No need to check them again |
+ // here. |
+ if (frame->settings()->getBrowserSideNavigationEnabled() && |
+ frameType != WebURLRequest::FrameTypeNone) { |
+ return false; |
+ } |
+ |
Frame* effectiveFrame = effectiveFrameForFrameType(frame, frameType); |
Frame* mixedFrame = |
inWhichFrameIsContentMixed(effectiveFrame, frameType, url); |
@@ -488,6 +569,26 @@ void MixedContentChecker::handleCertificateError( |
} |
} |
+// static |
+void MixedContentChecker::mixedContentFoundByTheBrowser( |
+ LocalFrame* frame, |
+ const KURL& mainResourceUrl, |
+ const KURL& mixedContentUrl, |
+ WebURLRequest::RequestContext requestContext, |
+ bool wasAllowed, |
+ bool hadRedirect) { |
+ logToConsoleAboutFetch(frame, mainResourceUrl, mixedContentUrl, |
+ requestContext, wasAllowed); |
+ ContentSecurityPolicy* policy = |
+ frame->securityContext()->contentSecurityPolicy(); |
+ if (policy) { |
+ policy->reportMixedContent( |
+ mixedContentUrl, hadRedirect |
+ ? ResourceRequest::RedirectStatus::FollowedRedirect |
+ : ResourceRequest::RedirectStatus::NoRedirect); |
+ } |
+} |
+ |
WebMixedContent::ContextType MixedContentChecker::contextTypeForInspector( |
LocalFrame* frame, |
const ResourceRequest& request) { |