OLD | NEW |
---|---|
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 3368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3379 // Additionally, with | 3379 // Additionally, with |
3380 // <iframe src="scheme-has-exception://host"> | 3380 // <iframe src="scheme-has-exception://host"> |
3381 // <iframe src="http://host"></iframe> | 3381 // <iframe src="http://host"></iframe> |
3382 // <iframe sandbox src="http://host"></iframe> | 3382 // <iframe sandbox src="http://host"></iframe> |
3383 // </iframe> | 3383 // </iframe> |
3384 // both inner iframes would fail the check, even though the outermost iframe | 3384 // both inner iframes would fail the check, even though the outermost iframe |
3385 // passes. | 3385 // passes. |
3386 // | 3386 // |
3387 // In all cases, a frame must be potentially trustworthy in addition to | 3387 // In all cases, a frame must be potentially trustworthy in addition to |
3388 // having an exception listed in order for the exception to be granted. | 3388 // having an exception listed in order for the exception to be granted. |
3389 if (SecurityContext::isSandboxed(SandboxOrigin)) { | 3389 if (!isOriginPotentiallyTrustworthy(securityOrigin(), errorMessage)) |
3390 RefPtr<SecurityOrigin> origin = SecurityOrigin::create(url()); | 3390 return false; |
3391 if (!isOriginPotentiallyTrustworthy(origin.get(), errorMessage)) | 3391 if (SchemeRegistry::schemeShouldBypassSecureContextCheck(securityOrigin()->p rotocol())) |
3392 return false; | 3392 return true; |
3393 if (SchemeRegistry::schemeShouldBypassSecureContextCheck(origin->protoco l())) | |
3394 return true; | |
3395 } else { | |
3396 if (!isOriginPotentiallyTrustworthy(securityOrigin(), errorMessage)) | |
3397 return false; | |
3398 if (SchemeRegistry::schemeShouldBypassSecureContextCheck(securityOrigin( )->protocol())) | |
3399 return true; | |
3400 } | |
3401 | 3393 |
3402 if (privilegeContextCheck == StandardSecureContextCheck) { | 3394 if (privilegeContextCheck == StandardSecureContextCheck) { |
3403 Document* context = parentDocument(); | 3395 if (!m_frame) |
3404 while (context) { | 3396 return true; |
3405 // Skip to the next ancestor if it's a srcdoc. | 3397 Frame* parent = m_frame->tree().parent(); |
3406 if (!context->isSrcdocDocument()) { | 3398 while (parent) { |
3407 if (context->securityContext().isSandboxed(SandboxOrigin)) { | 3399 if (!isOriginPotentiallyTrustworthy(parent->securityContext()->secur ityOrigin(), errorMessage)) |
3408 // For a sandboxed origin, use the document's URL. | 3400 return false; |
3409 RefPtr<SecurityOrigin> origin = SecurityOrigin::create(conte xt->url()); | 3401 parent = parent->tree().parent(); |
3410 if (!isOriginPotentiallyTrustworthy(origin.get(), errorMessa ge)) | |
3411 return false; | |
3412 } else { | |
3413 if (!isOriginPotentiallyTrustworthy(context->securityOrigin( ), errorMessage)) | |
3414 return false; | |
3415 } | |
3416 } | |
3417 context = context->parentDocument(); | |
3418 } | 3402 } |
3419 } | 3403 } |
3420 return true; | 3404 return true; |
3421 } | 3405 } |
3422 | 3406 |
3423 StyleSheetList* Document::styleSheets() | 3407 StyleSheetList* Document::styleSheets() |
3424 { | 3408 { |
3425 if (!m_styleSheetList) | 3409 if (!m_styleSheetList) |
3426 m_styleSheetList = StyleSheetList::create(this); | 3410 m_styleSheetList = StyleSheetList::create(this); |
3427 return m_styleSheetList.get(); | 3411 return m_styleSheetList.get(); |
(...skipping 1507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4935 enforceStrictMixedContentChecking(); | 4919 enforceStrictMixedContentChecking(); |
4936 setInsecureRequestsPolicy(initializer.getInsecureRequestsPolicy()); | 4920 setInsecureRequestsPolicy(initializer.getInsecureRequestsPolicy()); |
4937 if (initializer.insecureNavigationsToUpgrade()) { | 4921 if (initializer.insecureNavigationsToUpgrade()) { |
4938 for (auto toUpgrade : *initializer.insecureNavigationsToUpgrade()) | 4922 for (auto toUpgrade : *initializer.insecureNavigationsToUpgrade()) |
4939 addInsecureNavigationUpgrade(toUpgrade); | 4923 addInsecureNavigationUpgrade(toUpgrade); |
4940 } | 4924 } |
4941 | 4925 |
4942 if (isSandboxed(SandboxOrigin)) { | 4926 if (isSandboxed(SandboxOrigin)) { |
4943 m_cookieURL = m_url; | 4927 m_cookieURL = m_url; |
4944 setSecurityOrigin(SecurityOrigin::createUnique()); | 4928 setSecurityOrigin(SecurityOrigin::createUnique()); |
4945 // If we're supposed to inherit our security origin from our owner, | 4929 // If we're supposed to inherit our security origin from our |
4946 // but we're also sandboxed, the only thing we inherit is the ability | 4930 // owner, but we're also sandboxed, the only things we inherit are |
4947 // to load local resources. This lets about:blank iframes in file:// | 4931 // the origin's potential trustworthiness and the ability to |
4948 // URL documents load images and other resources from the file system. | 4932 // load local resources. The latter lets about:blank iframes in |
4933 // file:// URL documents load images and other resources from | |
4934 // the file system. | |
4935 if (initializer.owner() && initializer.owner()->securityOrigin()->isPote ntiallyTrustworthy()) | |
4936 setUniqueOriginIsPotentiallyTrustworthy(); | |
4949 if (initializer.owner() && initializer.owner()->securityOrigin()->canLoa dLocalResources()) | 4937 if (initializer.owner() && initializer.owner()->securityOrigin()->canLoa dLocalResources()) |
4950 securityOrigin()->grantLoadLocalResources(); | 4938 securityOrigin()->grantLoadLocalResources(); |
4951 } else if (initializer.owner()) { | 4939 } else if (initializer.owner()) { |
4952 m_cookieURL = initializer.owner()->cookieURL(); | 4940 m_cookieURL = initializer.owner()->cookieURL(); |
4953 // We alias the SecurityOrigins to match Firefox, see Bug 15313 | 4941 // We alias the SecurityOrigins to match Firefox, see Bug 15313 |
4954 // https://bugs.webkit.org/show_bug.cgi?id=15313 | 4942 // https://bugs.webkit.org/show_bug.cgi?id=15313 |
4955 setSecurityOrigin(initializer.owner()->securityOrigin()); | 4943 setSecurityOrigin(initializer.owner()->securityOrigin()); |
4956 } else { | 4944 } else { |
4957 m_cookieURL = m_url; | 4945 m_cookieURL = m_url; |
4958 setSecurityOrigin(SecurityOrigin::create(m_url)); | 4946 setSecurityOrigin(SecurityOrigin::create(m_url)); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4994 securityOrigin()->blockLocalAccessFromLocalOrigin(); | 4982 securityOrigin()->blockLocalAccessFromLocalOrigin(); |
4995 } | 4983 } |
4996 } | 4984 } |
4997 } | 4985 } |
4998 | 4986 |
4999 if (initializer.shouldTreatURLAsSrcdocDocument()) { | 4987 if (initializer.shouldTreatURLAsSrcdocDocument()) { |
5000 m_isSrcdocDocument = true; | 4988 m_isSrcdocDocument = true; |
5001 setBaseURLOverride(initializer.parentBaseURL()); | 4989 setBaseURLOverride(initializer.parentBaseURL()); |
5002 } | 4990 } |
5003 | 4991 |
5004 if (securityOrigin()->hasSuborigin()) | 4992 if (securityOrigin()->isUnique() && SecurityOrigin::create(m_url)->isPotenti allyTrustworthy()) |
alexmos
2016/03/09 18:45:06
Weird that there were two identical enforceSuborig
estark
2016/03/10 00:53:44
Huh, I actually didn't notice that I deleted this;
| |
5005 enforceSuborigin(securityOrigin()->suboriginName()); | 4993 setUniqueOriginIsPotentiallyTrustworthy(); |
5006 } | 4994 } |
5007 | 4995 |
5008 void Document::initContentSecurityPolicy(PassRefPtrWillBeRawPtr<ContentSecurityP olicy> csp) | 4996 void Document::initContentSecurityPolicy(PassRefPtrWillBeRawPtr<ContentSecurityP olicy> csp) |
5009 { | 4997 { |
5010 setContentSecurityPolicy(csp ? csp : ContentSecurityPolicy::create()); | 4998 setContentSecurityPolicy(csp ? csp : ContentSecurityPolicy::create()); |
5011 if (m_frame && m_frame->tree().parent() && m_frame->tree().parent()->isLocal Frame()) { | 4999 if (m_frame && m_frame->tree().parent() && m_frame->tree().parent()->isLocal Frame()) { |
5012 ContentSecurityPolicy* parentCSP = toLocalFrame(m_frame->tree().parent() )->document()->contentSecurityPolicy(); | 5000 ContentSecurityPolicy* parentCSP = toLocalFrame(m_frame->tree().parent() )->document()->contentSecurityPolicy(); |
5013 if (shouldInheritSecurityOriginFromOwner(m_url)) { | 5001 if (shouldInheritSecurityOriginFromOwner(m_url)) { |
5014 contentSecurityPolicy()->copyStateFrom(parentCSP); | 5002 contentSecurityPolicy()->copyStateFrom(parentCSP); |
5015 } else if (isPluginDocument()) { | 5003 } else if (isPluginDocument()) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5056 LocalFrame* frame = executingFrame(); | 5044 LocalFrame* frame = executingFrame(); |
5057 if (!frame) | 5045 if (!frame) |
5058 return false; | 5046 return false; |
5059 if (!node->document().executingFrame()) | 5047 if (!node->document().executingFrame()) |
5060 return false; | 5048 return false; |
5061 if (!frame->script().canExecuteScripts(AboutToExecuteScript)) | 5049 if (!frame->script().canExecuteScripts(AboutToExecuteScript)) |
5062 return false; | 5050 return false; |
5063 return true; | 5051 return true; |
5064 } | 5052 } |
5065 | 5053 |
5054 void Document::enforceSandboxFlags(SandboxFlags mask) | |
5055 { | |
5056 RefPtr<SecurityOrigin> standInOrigin = securityOrigin(); | |
5057 applySandboxFlags(mask); | |
5058 if (standInOrigin && !standInOrigin->isUnique() && securityOrigin()->isUniqu e() && standInOrigin->isPotentiallyTrustworthy()) | |
5059 setUniqueOriginIsPotentiallyTrustworthy(); | |
5060 } | |
5061 | |
5066 void Document::updateSecurityOrigin(PassRefPtr<SecurityOrigin> origin) | 5062 void Document::updateSecurityOrigin(PassRefPtr<SecurityOrigin> origin) |
5067 { | 5063 { |
5068 setSecurityOrigin(origin); | 5064 setSecurityOrigin(origin); |
5069 didUpdateSecurityOrigin(); | 5065 didUpdateSecurityOrigin(); |
5070 } | 5066 } |
5071 | 5067 |
5072 void Document::didUpdateSecurityOrigin() | 5068 void Document::didUpdateSecurityOrigin() |
5073 { | 5069 { |
5074 if (!m_frame) | 5070 if (!m_frame) |
5075 return; | 5071 return; |
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5915 securityContext().setShouldEnforceStrictMixedContentChecking(true); | 5911 securityContext().setShouldEnforceStrictMixedContentChecking(true); |
5916 if (frame()) | 5912 if (frame()) |
5917 frame()->loader().client()->didEnforceStrictMixedContentChecking(); | 5913 frame()->loader().client()->didEnforceStrictMixedContentChecking(); |
5918 } | 5914 } |
5919 | 5915 |
5920 PassOwnPtrWillBeRawPtr<OriginTrialContext> Document::createOriginTrialContext() | 5916 PassOwnPtrWillBeRawPtr<OriginTrialContext> Document::createOriginTrialContext() |
5921 { | 5917 { |
5922 return adoptPtrWillBeNoop(new DocumentOriginTrialContext(this)); | 5918 return adoptPtrWillBeNoop(new DocumentOriginTrialContext(this)); |
5923 } | 5919 } |
5924 | 5920 |
5921 void Document::setUniqueOriginIsPotentiallyTrustworthy() | |
5922 { | |
5923 securityOrigin()->setUniqueOriginIsPotentiallyTrustworthy(true); | |
5924 if (frame()) | |
5925 frame()->loader().client()->didSetUniqueOriginPotentiallyTrustworthy(); | |
5926 } | |
5927 | |
5925 DEFINE_TRACE(Document) | 5928 DEFINE_TRACE(Document) |
5926 { | 5929 { |
5927 #if ENABLE(OILPAN) | 5930 #if ENABLE(OILPAN) |
5928 visitor->trace(m_importsController); | 5931 visitor->trace(m_importsController); |
5929 visitor->trace(m_docType); | 5932 visitor->trace(m_docType); |
5930 visitor->trace(m_implementation); | 5933 visitor->trace(m_implementation); |
5931 visitor->trace(m_autofocusElement); | 5934 visitor->trace(m_autofocusElement); |
5932 visitor->trace(m_focusedElement); | 5935 visitor->trace(m_focusedElement); |
5933 visitor->trace(m_sequentialFocusNavigationStartingPoint); | 5936 visitor->trace(m_sequentialFocusNavigationStartingPoint); |
5934 visitor->trace(m_hoverNode); | 5937 visitor->trace(m_hoverNode); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5996 #ifndef NDEBUG | 5999 #ifndef NDEBUG |
5997 using namespace blink; | 6000 using namespace blink; |
5998 void showLiveDocumentInstances() | 6001 void showLiveDocumentInstances() |
5999 { | 6002 { |
6000 Document::WeakDocumentSet& set = Document::liveDocumentSet(); | 6003 Document::WeakDocumentSet& set = Document::liveDocumentSet(); |
6001 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); | 6004 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); |
6002 for (Document* document : set) | 6005 for (Document* document : set) |
6003 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().get String().utf8().data()); | 6006 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().get String().utf8().data()); |
6004 } | 6007 } |
6005 #endif | 6008 #endif |
OLD | NEW |