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

Side by Side Diff: third_party/WebKit/Source/core/dom/Document.cpp

Issue 1723753002: Make Document::isSecureContext() work for OOPIFs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: layout test tweaks, remove unnecessarily #include Created 4 years, 9 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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
(...skipping 3369 matching lines...) Expand 10 before | Expand all | Expand 10 after
3380 // Additionally, with 3380 // Additionally, with
3381 // <iframe src="scheme-has-exception://host"> 3381 // <iframe src="scheme-has-exception://host">
3382 // <iframe src="http://host"></iframe> 3382 // <iframe src="http://host"></iframe>
3383 // <iframe sandbox src="http://host"></iframe> 3383 // <iframe sandbox src="http://host"></iframe>
3384 // </iframe> 3384 // </iframe>
3385 // both inner iframes would fail the check, even though the outermost iframe 3385 // both inner iframes would fail the check, even though the outermost iframe
3386 // passes. 3386 // passes.
3387 // 3387 //
3388 // In all cases, a frame must be potentially trustworthy in addition to 3388 // In all cases, a frame must be potentially trustworthy in addition to
3389 // having an exception listed in order for the exception to be granted. 3389 // having an exception listed in order for the exception to be granted.
3390 if (SecurityContext::isSandboxed(SandboxOrigin)) { 3390 if (!isOriginPotentiallyTrustworthy(securityOrigin(), errorMessage))
3391 RefPtr<SecurityOrigin> origin = SecurityOrigin::create(url()); 3391 return false;
3392 if (!isOriginPotentiallyTrustworthy(origin.get(), errorMessage)) 3392 if (securityOrigin()->bypassSecureContextCheck())
3393 return false; 3393 return true;
3394 if (SchemeRegistry::schemeShouldBypassSecureContextCheck(origin->protoco l()))
3395 return true;
3396 } else {
3397 if (!isOriginPotentiallyTrustworthy(securityOrigin(), errorMessage))
3398 return false;
3399 if (SchemeRegistry::schemeShouldBypassSecureContextCheck(securityOrigin( )->protocol()))
3400 return true;
3401 }
3402 3394
3403 if (privilegeContextCheck == StandardSecureContextCheck) { 3395 if (privilegeContextCheck == StandardSecureContextCheck) {
3404 Document* context = parentDocument(); 3396 if (!m_frame)
3405 while (context) { 3397 return true;
3406 // Skip to the next ancestor if it's a srcdoc. 3398 Frame* parent = m_frame->tree().parent();
3407 if (!context->isSrcdocDocument()) { 3399 while (parent) {
3408 if (context->securityContext().isSandboxed(SandboxOrigin)) { 3400 if (!isOriginPotentiallyTrustworthy(parent->securityContext()->secur ityOrigin(), errorMessage))
3409 // For a sandboxed origin, use the document's URL. 3401 return false;
3410 RefPtr<SecurityOrigin> origin = SecurityOrigin::create(conte xt->url()); 3402 parent = parent->tree().parent();
3411 if (!isOriginPotentiallyTrustworthy(origin.get(), errorMessa ge))
3412 return false;
3413 } else {
3414 if (!isOriginPotentiallyTrustworthy(context->securityOrigin( ), errorMessage))
3415 return false;
3416 }
3417 }
3418 context = context->parentDocument();
3419 } 3403 }
3420 } 3404 }
3421 return true; 3405 return true;
3422 } 3406 }
3423 3407
3424 StyleSheetList* Document::styleSheets() 3408 StyleSheetList* Document::styleSheets()
3425 { 3409 {
3426 if (!m_styleSheetList) 3410 if (!m_styleSheetList)
3427 m_styleSheetList = StyleSheetList::create(this); 3411 m_styleSheetList = StyleSheetList::create(this);
3428 return m_styleSheetList.get(); 3412 return m_styleSheetList.get();
(...skipping 1506 matching lines...) Expand 10 before | Expand all | Expand 10 after
4935 // This can occur via document.implementation.createDocument(). 4919 // This can occur via document.implementation.createDocument().
4936 m_cookieURL = KURL(ParsedURLString, emptyString()); 4920 m_cookieURL = KURL(ParsedURLString, emptyString());
4937 setSecurityOrigin(SecurityOrigin::createUnique()); 4921 setSecurityOrigin(SecurityOrigin::createUnique());
4938 initContentSecurityPolicy(); 4922 initContentSecurityPolicy();
4939 return; 4923 return;
4940 } 4924 }
4941 4925
4942 // In the common case, create the security context from the currently 4926 // In the common case, create the security context from the currently
4943 // loading URL with a fresh content security policy. 4927 // loading URL with a fresh content security policy.
4944 m_cookieURL = m_url; 4928 m_cookieURL = m_url;
4929 // Set the origin initially based on the URL. enforceSandboxFlags()
4930 // will adjust it to be a unique origin if necessary.
4931 setSecurityOrigin(SecurityOrigin::create(m_url));
4945 enforceSandboxFlags(initializer.getSandboxFlags()); 4932 enforceSandboxFlags(initializer.getSandboxFlags());
4946 if (initializer.shouldEnforceStrictMixedContentChecking()) 4933 if (initializer.shouldEnforceStrictMixedContentChecking())
4947 enforceStrictMixedContentChecking(); 4934 enforceStrictMixedContentChecking();
4948 setInsecureRequestsPolicy(initializer.getInsecureRequestsPolicy()); 4935 setInsecureRequestsPolicy(initializer.getInsecureRequestsPolicy());
4949 if (initializer.insecureNavigationsToUpgrade()) { 4936 if (initializer.insecureNavigationsToUpgrade()) {
4950 for (auto toUpgrade : *initializer.insecureNavigationsToUpgrade()) 4937 for (auto toUpgrade : *initializer.insecureNavigationsToUpgrade())
4951 addInsecureNavigationUpgrade(toUpgrade); 4938 addInsecureNavigationUpgrade(toUpgrade);
4952 } 4939 }
4953 setSecurityOrigin(isSandboxed(SandboxOrigin) ? SecurityOrigin::createUnique( ) : SecurityOrigin::create(m_url));
4954 4940
4955 if (importsController()) { 4941 if (importsController()) {
4956 // If this document is an HTML import, grab a reference to it's master d ocument's Content 4942 // If this document is an HTML import, grab a reference to it's master d ocument's Content
4957 // Security Policy. We don't call 'initContentSecurityPolicy' in this ca se, as we can't 4943 // Security Policy. We don't call 'initContentSecurityPolicy' in this ca se, as we can't
4958 // rebind the master document's policy object: its ExecutionContext need s to remain tied 4944 // rebind the master document's policy object: its ExecutionContext need s to remain tied
4959 // to the master document. 4945 // to the master document.
4960 setContentSecurityPolicy(importsController()->master()->contentSecurityP olicy()); 4946 setContentSecurityPolicy(importsController()->master()->contentSecurityP olicy());
4961 } else { 4947 } else {
4962 initContentSecurityPolicy(); 4948 initContentSecurityPolicy();
4963 } 4949 }
(...skipping 25 matching lines...) Expand all
4989 // If we do not obtain a meaningful origin from the URL, then we try to 4975 // If we do not obtain a meaningful origin from the URL, then we try to
4990 // find one via the frame hierarchy. 4976 // find one via the frame hierarchy.
4991 4977
4992 if (!initializer.owner()) { 4978 if (!initializer.owner()) {
4993 didFailToInitializeSecurityOrigin(); 4979 didFailToInitializeSecurityOrigin();
4994 return; 4980 return;
4995 } 4981 }
4996 4982
4997 if (isSandboxed(SandboxOrigin)) { 4983 if (isSandboxed(SandboxOrigin)) {
4998 // If we're supposed to inherit our security origin from our owner, 4984 // If we're supposed to inherit our security origin from our owner,
4999 // but we're also sandboxed, the only thing we inherit is the ability 4985 // but we're also sandboxed, the only things we inherit are the
5000 // to load local resources. This lets about:blank iframes in file:// 4986 // potential trustworthiness of the origin and the ability to
4987 // load local resources. The latter lets about:blank iframes in file://
5001 // URL documents load images and other resources from the file system. 4988 // URL documents load images and other resources from the file system.
4989 if (initializer.owner()->securityOrigin()->isPotentiallyTrustworthy())
4990 securityOrigin()->setIsPotentiallyTrustworthySandboxedOrigin();
5002 if (initializer.owner()->securityOrigin()->canLoadLocalResources()) 4991 if (initializer.owner()->securityOrigin()->canLoadLocalResources())
5003 securityOrigin()->grantLoadLocalResources(); 4992 securityOrigin()->grantLoadLocalResources();
5004 return; 4993 return;
5005 } 4994 }
5006 4995
5007 m_cookieURL = initializer.owner()->cookieURL(); 4996 m_cookieURL = initializer.owner()->cookieURL();
5008 // We alias the SecurityOrigins to match Firefox, see Bug 15313 4997 // We alias the SecurityOrigins to match Firefox, see Bug 15313
5009 // https://bugs.webkit.org/show_bug.cgi?id=15313 4998 // https://bugs.webkit.org/show_bug.cgi?id=15313
5010 setSecurityOrigin(initializer.owner()->securityOrigin()); 4999 setSecurityOrigin(initializer.owner()->securityOrigin());
5011 } 5000 }
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after
5995 #ifndef NDEBUG 5984 #ifndef NDEBUG
5996 using namespace blink; 5985 using namespace blink;
5997 void showLiveDocumentInstances() 5986 void showLiveDocumentInstances()
5998 { 5987 {
5999 Document::WeakDocumentSet& set = Document::liveDocumentSet(); 5988 Document::WeakDocumentSet& set = Document::liveDocumentSet();
6000 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 5989 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
6001 for (Document* document : set) 5990 for (Document* document : set)
6002 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str ing().utf8().data()); 5991 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str ing().utf8().data());
6003 } 5992 }
6004 #endif 5993 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698