| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 #include "core/timing/DOMWindowPerformance.h" | 63 #include "core/timing/DOMWindowPerformance.h" |
| 64 #include "core/timing/Performance.h" | 64 #include "core/timing/Performance.h" |
| 65 #include "platform/Logging.h" | 65 #include "platform/Logging.h" |
| 66 #include "platform/TracedValue.h" | 66 #include "platform/TracedValue.h" |
| 67 #include "platform/mhtml/MHTMLArchive.h" | 67 #include "platform/mhtml/MHTMLArchive.h" |
| 68 #include "platform/network/ResourceLoadPriority.h" | 68 #include "platform/network/ResourceLoadPriority.h" |
| 69 #include "platform/network/ResourceTimingInfo.h" | 69 #include "platform/network/ResourceTimingInfo.h" |
| 70 #include "platform/weborigin/SchemeRegistry.h" | 70 #include "platform/weborigin/SchemeRegistry.h" |
| 71 #include "platform/weborigin/SecurityPolicy.h" | 71 #include "platform/weborigin/SecurityPolicy.h" |
| 72 #include "public/platform/WebCachePolicy.h" | 72 #include "public/platform/WebCachePolicy.h" |
| 73 #include "public/platform/WebDocumentSubresourceFilter.h" |
| 73 #include "public/platform/WebFrameScheduler.h" | 74 #include "public/platform/WebFrameScheduler.h" |
| 74 | 75 |
| 75 #include <algorithm> | 76 #include <algorithm> |
| 76 | 77 |
| 77 namespace blink { | 78 namespace blink { |
| 78 | 79 |
| 79 namespace { | 80 namespace { |
| 80 | 81 |
| 81 bool shouldDisallowFetchForMainFrameScript(const ResourceRequest& request, Fetch
Request::DeferOption defer, const Document& document) | 82 bool shouldDisallowFetchForMainFrameScript(const ResourceRequest& request, Fetch
Request::DeferOption defer, const Document& document) |
| 82 { | 83 { |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 } | 566 } |
| 566 | 567 |
| 567 // Measure the number of pages that load resources after a redirect | 568 // Measure the number of pages that load resources after a redirect |
| 568 // when a CSP is active, to see if implementing CSP | 569 // when a CSP is active, to see if implementing CSP |
| 569 // 'unsafe-redirect' is feasible. | 570 // 'unsafe-redirect' is feasible. |
| 570 if (csp && csp->isActive() && resourceRequest.frameType() != WebURLRequest::
FrameTypeTopLevel && resourceRequest.frameType() != WebURLRequest::FrameTypeAuxi
liary && redirectStatus == RedirectStatus::FollowedRedirect) { | 571 if (csp && csp->isActive() && resourceRequest.frameType() != WebURLRequest::
FrameTypeTopLevel && resourceRequest.frameType() != WebURLRequest::FrameTypeAuxi
liary && redirectStatus == RedirectStatus::FollowedRedirect) { |
| 571 ASSERT(frame()->document()); | 572 ASSERT(frame()->document()); |
| 572 UseCounter::count(frame()->document(), UseCounter::ResourceLoadedAfterRe
directWithCSP); | 573 UseCounter::count(frame()->document(), UseCounter::ResourceLoadedAfterRe
directWithCSP); |
| 573 } | 574 } |
| 574 | 575 |
| 575 // Last of all, check for mixed content. We do this last so that when | 576 // Check for mixed content. We do this second-to-last so that when folks blo
ck |
| 576 // folks block mixed content with a CSP policy, they don't get a warning. | 577 // mixed content with a CSP policy, they don't get a warning. They'll still |
| 577 // They'll still get a warning in the console about CSP blocking the load. | 578 // get a warning in the console about CSP blocking the load. |
| 578 MixedContentChecker::ReportingStatus mixedContentReporting = forPreload ? | 579 MixedContentChecker::ReportingStatus mixedContentReporting = forPreload ? |
| 579 MixedContentChecker::SuppressReport : MixedContentChecker::SendReport; | 580 MixedContentChecker::SuppressReport : MixedContentChecker::SendReport; |
| 580 if (MixedContentChecker::shouldBlockFetch(frame(), resourceRequest, url, mix
edContentReporting)) | 581 if (MixedContentChecker::shouldBlockFetch(frame(), resourceRequest, url, mix
edContentReporting)) |
| 581 return ResourceRequestBlockedReasonMixedContent; | 582 return ResourceRequestBlockedReasonMixedContent; |
| 582 | 583 |
| 584 // Let the client have the final say into whether or not the load should pro
ceed. |
| 585 DocumentLoader* documentLoader = effectiveDocumentLoader(); |
| 586 if (documentLoader && documentLoader->subresourceFilter() && type != Resourc
e::MainResource && type != Resource::ImportResource && !documentLoader->subresou
rceFilter()->allowLoad(url, resourceRequest.requestContext())) |
| 587 return ResourceRequestBlockedReasonSubresourceFilter; |
| 588 |
| 583 return ResourceRequestBlockedReasonNone; | 589 return ResourceRequestBlockedReasonNone; |
| 584 } | 590 } |
| 585 | 591 |
| 586 bool FrameFetchContext::isControlledByServiceWorker() const | 592 bool FrameFetchContext::isControlledByServiceWorker() const |
| 587 { | 593 { |
| 588 ASSERT(m_documentLoader || frame()->loader().documentLoader()); | 594 ASSERT(m_documentLoader || frame()->loader().documentLoader()); |
| 589 if (m_documentLoader) | 595 if (m_documentLoader) |
| 590 return frame()->loader().client()->isControlledByServiceWorker(*m_docume
ntLoader); | 596 return frame()->loader().client()->isControlledByServiceWorker(*m_docume
ntLoader); |
| 591 // m_documentLoader is null while loading resources from an HTML import. | 597 // m_documentLoader is null while loading resources from an HTML import. |
| 592 // In such cases whether the request is controlled by ServiceWorker or not | 598 // In such cases whether the request is controlled by ServiceWorker or not |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 815 } | 821 } |
| 816 | 822 |
| 817 DEFINE_TRACE(FrameFetchContext) | 823 DEFINE_TRACE(FrameFetchContext) |
| 818 { | 824 { |
| 819 visitor->trace(m_document); | 825 visitor->trace(m_document); |
| 820 visitor->trace(m_documentLoader); | 826 visitor->trace(m_documentLoader); |
| 821 FetchContext::trace(visitor); | 827 FetchContext::trace(visitor); |
| 822 } | 828 } |
| 823 | 829 |
| 824 } // namespace blink | 830 } // namespace blink |
| OLD | NEW |