Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: third_party/WebKit/Source/core/loader/FrameFetchContext.cpp

Issue 2068443002: Revert of Move 'frame-src' CSP checks into FrameFetchContext. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: run revert on local machine to resolve conflicts Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 508 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 case Resource::XSLStyleSheet: 519 case Resource::XSLStyleSheet:
520 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 520 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
521 case Resource::SVGDocument: 521 case Resource::SVGDocument:
522 if (!securityOrigin->canRequest(url)) { 522 if (!securityOrigin->canRequest(url)) {
523 printAccessDeniedMessage(url); 523 printAccessDeniedMessage(url);
524 return ResourceRequestBlockedReasonOrigin; 524 return ResourceRequestBlockedReasonOrigin;
525 } 525 }
526 break; 526 break;
527 } 527 }
528 528
529 if (contentSecurityPolicyBlocksRequest(type, resourceRequest, url, options, forPreload, redirectStatus)) 529 // FIXME: Convert this to check the isolated world's Content Security Policy once webkit.org/b/104520 is solved.
530 return ResourceRequestBlockedReasonCSP; 530 bool shouldBypassMainWorldCSP = frame()->script().shouldBypassMainWorldCSP() || options.contentSecurityPolicyOption == DoNotCheckContentSecurityPolicy;
531
532 // Don't send CSP messages for preloads, we might never actually display tho se items.
533 ContentSecurityPolicy::ReportingStatus cspReporting = forPreload ?
534 ContentSecurityPolicy::SuppressReport : ContentSecurityPolicy::SendRepor t;
535
536 if (m_document) {
537 DCHECK(m_document->contentSecurityPolicy());
538 if (!shouldBypassMainWorldCSP && !m_document->contentSecurityPolicy()->a llowRequest(resourceRequest.requestContext(), url, options.contentSecurityPolicy Nonce, redirectStatus, cspReporting))
539 return ResourceRequestBlockedReasonCSP;
540 }
531 541
532 if (type == Resource::Script || type == Resource::ImportResource) { 542 if (type == Resource::Script || type == Resource::ImportResource) {
533 ASSERT(frame()); 543 ASSERT(frame());
534 if (!frame()->loader().client()->allowScriptFromSource(!frame()->setting s() || frame()->settings()->scriptEnabled(), url)) { 544 if (!frame()->loader().client()->allowScriptFromSource(!frame()->setting s() || frame()->settings()->scriptEnabled(), url)) {
535 frame()->loader().client()->didNotAllowScript(); 545 frame()->loader().client()->didNotAllowScript();
536 // TODO(estark): Use a different ResourceRequestBlockedReason 546 // TODO(estark): Use a different ResourceRequestBlockedReason
537 // here, since this check has nothing to do with 547 // here, since this check has nothing to do with
538 // CSP. https://crbug.com/600795 548 // CSP. https://crbug.com/600795
539 return ResourceRequestBlockedReasonCSP; 549 return ResourceRequestBlockedReasonCSP;
540 } 550 }
(...skipping 28 matching lines...) Expand all
569 return ResourceRequestBlockedReasonMixedContent; 579 return ResourceRequestBlockedReasonMixedContent;
570 580
571 // Let the client have the final say into whether or not the load should pro ceed. 581 // Let the client have the final say into whether or not the load should pro ceed.
572 DocumentLoader* documentLoader = masterDocumentLoader(); 582 DocumentLoader* documentLoader = masterDocumentLoader();
573 if (documentLoader && documentLoader->subresourceFilter() && type != Resourc e::MainResource && type != Resource::ImportResource && !documentLoader->subresou rceFilter()->allowLoad(url, resourceRequest.requestContext())) 583 if (documentLoader && documentLoader->subresourceFilter() && type != Resourc e::MainResource && type != Resource::ImportResource && !documentLoader->subresou rceFilter()->allowLoad(url, resourceRequest.requestContext()))
574 return ResourceRequestBlockedReasonSubresourceFilter; 584 return ResourceRequestBlockedReasonSubresourceFilter;
575 585
576 return ResourceRequestBlockedReasonNone; 586 return ResourceRequestBlockedReasonNone;
577 } 587 }
578 588
579 bool FrameFetchContext::contentSecurityPolicyBlocksRequest(Resource::Type type, const ResourceRequest& resourceRequest, const KURL& url, const ResourceLoaderOpt ions& options, bool forPreload, ResourceRequest::RedirectStatus redirectStatus) const
580 {
581 // FIXME: Convert this to check the isolated world's Content Security Policy once webkit.org/b/104520 is solved.
582 if (!frame()->script().shouldBypassMainWorldCSP() && options.contentSecurity PolicyOption == CheckContentSecurityPolicy) {
583 // Don't send CSP messages for preloads, we might never actually display those items.
584 ContentSecurityPolicy::ReportingStatus cspReporting = forPreload ? Conte ntSecurityPolicy::SuppressReport : ContentSecurityPolicy::SendReport;
585 if (m_document) {
586 DCHECK(m_document->contentSecurityPolicy());
587 if (!m_document->contentSecurityPolicy()->allowRequest(resourceReque st.requestContext(), url, options.contentSecurityPolicyNonce, redirectStatus, cs pReporting))
588 return true;
589 } else if (type == Resource::MainResource) {
590 // When loading the main document of an iframe, we won't have a docu ment
591 // yet. We instead need to grab the frame's parent's policy in order to
592 // perform 'frame-src' checks:
593 if (Frame* parentFrame = frame()->tree().parent()) {
594 if (!parentFrame->securityContext()->contentSecurityPolicy()->al lowChildFrameFromSource(url, redirectStatus, cspReporting)) {
595 // TODO(mkwst): If we cancel the request after a redirect, w e never instantiate
596 // a document, and therefore don't inherit the loader's sand box flags, or trigger
597 // a load event. This is strange.
598 if (redirectStatus == ResourceRequest::RedirectStatus::Follo wedRedirect) {
599 frame()->document()->enforceSandboxFlags(SandboxOrigin);
600 frame()->owner()->dispatchLoad();
601 }
602 return true;
603 }
604 }
605 }
606 }
607 return false;
608 }
609
610 bool FrameFetchContext::isControlledByServiceWorker() const 589 bool FrameFetchContext::isControlledByServiceWorker() const
611 { 590 {
612 ASSERT(m_documentLoader || frame()->loader().documentLoader()); 591 ASSERT(m_documentLoader || frame()->loader().documentLoader());
613 if (m_documentLoader) 592 if (m_documentLoader)
614 return frame()->loader().client()->isControlledByServiceWorker(*m_docume ntLoader); 593 return frame()->loader().client()->isControlledByServiceWorker(*m_docume ntLoader);
615 // m_documentLoader is null while loading resources from an HTML import. 594 // m_documentLoader is null while loading resources from an HTML import.
616 // In such cases whether the request is controlled by ServiceWorker or not 595 // In such cases whether the request is controlled by ServiceWorker or not
617 // is determined by the document loader of the frame. 596 // is determined by the document loader of the frame.
618 return frame()->loader().client()->isControlledByServiceWorker(*frame()->loa der().documentLoader()); 597 return frame()->loader().client()->isControlledByServiceWorker(*frame()->loa der().documentLoader());
619 } 598 }
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 } 773 }
795 774
796 DEFINE_TRACE(FrameFetchContext) 775 DEFINE_TRACE(FrameFetchContext)
797 { 776 {
798 visitor->trace(m_document); 777 visitor->trace(m_document);
799 visitor->trace(m_documentLoader); 778 visitor->trace(m_documentLoader);
800 FetchContext::trace(visitor); 779 FetchContext::trace(visitor);
801 } 780 }
802 781
803 } // namespace blink 782 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/loader/FrameFetchContext.h ('k') | third_party/WebKit/Source/core/loader/FrameLoader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698