Chromium Code Reviews| Index: third_party/WebKit/Source/core/loader/FrameLoader.cpp |
| diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
| index 4cbd51bfa9ecb2615c9f93bd6a81801b4e308834..e52102ed88282c91e0ded0913524b525a833b2b0 100644 |
| --- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
| +++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
| @@ -1672,7 +1672,7 @@ void FrameLoader::startLoad(FrameLoadRequest& frameLoadRequest, |
| // Record the latest requiredCSP value that will be used when sending this |
| // request. |
| recordLatestRequiredCSP(); |
| - modifyRequestForCSP(resourceRequest, nullptr); |
| + modifyRequestForCSP(resourceRequest, frameLoadRequest.originDocument()); |
|
arthursonzogni
2016/12/07 13:51:26
This line makes Upgrade Insecure Requests works wi
|
| if (!shouldContinueForNavigationPolicy( |
| resourceRequest, frameLoadRequest.substituteData(), nullptr, |
| frameLoadRequest.shouldCheckMainWorldContentSecurityPolicy(), |
| @@ -1867,17 +1867,11 @@ FrameLoader::insecureNavigationsToUpgrade() const { |
| if (!parentFrame) |
| return nullptr; |
| - // FIXME: We need a way to propagate insecure requests policy flags to |
| - // out-of-process frames. For now, we'll always use default behavior. |
| - if (!parentFrame->isLocalFrame()) |
| - return nullptr; |
| - |
| - DCHECK(toLocalFrame(parentFrame)->document()); |
| - return toLocalFrame(parentFrame)->document()->insecureNavigationsToUpgrade(); |
| + return parentFrame->securityContext()->insecureNavigationsToUpgrade(); |
| } |
| void FrameLoader::modifyRequestForCSP(ResourceRequest& resourceRequest, |
| - Document* document) const { |
| + Document* originDocument) const { |
| if (RuntimeEnabledFeatures::embedderCSPEnforcementEnabled() && |
| !requiredCSP().isEmpty()) { |
| // TODO(amalika): Strengthen this DCHECK that requiredCSP has proper format |
| @@ -1899,34 +1893,41 @@ void FrameLoader::modifyRequestForCSP(ResourceRequest& resourceRequest, |
| "1"); |
| } |
| - upgradeInsecureRequest(resourceRequest, document); |
| + upgradeInsecureRequest(resourceRequest, originDocument); |
| } |
| void FrameLoader::upgradeInsecureRequest(ResourceRequest& resourceRequest, |
| - Document* document) const { |
| + Document* originDocument) const { |
| + // We always upgrade requests that meet any of the following criteria: |
| + // |
| + // Enforced in FrameLoader::upgradeInsecureRequest. |
| + // 1. Are for subresources. |
| + // 2. Are for nested frames. |
| + // 3. Are form submissions. |
| + // 4. Whose hosts are contained in the originDocument's upgrade insecure |
| + // navigations set. (same-frame navigation). |
| + // Enforced in Frame::upgradeInsecureRequest. |
| + // 4. Whose hosts are contained in the originDocument's upgrade insecure |
| + // navigations set. (cross-frame navigation). |
| + |
| KURL url = resourceRequest.url(); |
| - // If we don't yet have an |m_document| (because we're loading an iframe, for |
| - // instance), check the FrameLoader's policy. |
| + // If we don't yet have an |originDocument| (because we're loading an iframe, |
| + // for instance), check the FrameLoader's policy. |
| WebInsecureRequestPolicy relevantPolicy = |
| - document ? document->getInsecureRequestPolicy() |
| - : getInsecureRequestPolicy(); |
| + originDocument ? originDocument->getInsecureRequestPolicy() |
| + : getInsecureRequestPolicy(); |
| SecurityContext::InsecureNavigationsSet* relevantNavigationSet = |
| - document ? document->insecureNavigationsToUpgrade() |
| - : insecureNavigationsToUpgrade(); |
| + originDocument ? originDocument->insecureNavigationsToUpgrade() |
| + : insecureNavigationsToUpgrade(); |
| if (url.protocolIs("http") && relevantPolicy & kUpgradeInsecureRequests) { |
| - // We always upgrade requests that meet any of the following criteria: |
| - // |
| - // 1. Are for subresources (including nested frames). |
| - // 2. Are form submissions. |
| - // 3. Whose hosts are contained in the document's InsecureNavigationSet. |
| if (resourceRequest.frameType() == WebURLRequest::FrameTypeNone || |
| resourceRequest.frameType() == WebURLRequest::FrameTypeNested || |
| resourceRequest.requestContext() == WebURLRequest::RequestContextForm || |
| (!url.host().isNull() && |
| relevantNavigationSet->contains(url.host().impl()->hash()))) { |
| - UseCounter::count(document, |
| + UseCounter::count(originDocument, |
| UseCounter::UpgradeInsecureRequestsUpgradedRequest); |
| url.setProtocol("https"); |
| if (url.port() == 80) |