| 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 4751 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4762 bool Document::useSecureKeyboardEntryWhenActive() const | 4762 bool Document::useSecureKeyboardEntryWhenActive() const |
| 4763 { | 4763 { |
| 4764 return m_useSecureKeyboardEntryWhenActive; | 4764 return m_useSecureKeyboardEntryWhenActive; |
| 4765 } | 4765 } |
| 4766 | 4766 |
| 4767 void Document::initSecurityContext() | 4767 void Document::initSecurityContext() |
| 4768 { | 4768 { |
| 4769 initSecurityContext(DocumentInit(m_url, m_frame, contextDocument(), m_import
sController)); | 4769 initSecurityContext(DocumentInit(m_url, m_frame, contextDocument(), m_import
sController)); |
| 4770 } | 4770 } |
| 4771 | 4771 |
| 4772 static PassRefPtr<ContentSecurityPolicy> contentSecurityPolicyFor(Document* docu
ment) | |
| 4773 { | |
| 4774 if (document->importsController()) | |
| 4775 return document->importsController()->master()->contentSecurityPolicy(); | |
| 4776 return ContentSecurityPolicy::create(document); | |
| 4777 } | |
| 4778 | |
| 4779 void Document::initSecurityContext(const DocumentInit& initializer) | 4772 void Document::initSecurityContext(const DocumentInit& initializer) |
| 4780 { | 4773 { |
| 4781 if (haveInitializedSecurityOrigin()) { | 4774 if (haveInitializedSecurityOrigin()) { |
| 4782 ASSERT(securityOrigin()); | 4775 ASSERT(securityOrigin()); |
| 4783 return; | 4776 return; |
| 4784 } | 4777 } |
| 4785 | 4778 |
| 4786 if (!initializer.hasSecurityContext()) { | 4779 if (!initializer.hasSecurityContext()) { |
| 4787 // No source for a security context. | 4780 // No source for a security context. |
| 4788 // This can occur via document.implementation.createDocument(). | 4781 // This can occur via document.implementation.createDocument(). |
| 4789 m_cookieURL = KURL(ParsedURLString, emptyString()); | 4782 m_cookieURL = KURL(ParsedURLString, emptyString()); |
| 4790 setSecurityOrigin(SecurityOrigin::createUnique()); | 4783 setSecurityOrigin(SecurityOrigin::createUnique()); |
| 4791 setContentSecurityPolicy(ContentSecurityPolicy::create(this)); | 4784 initContentSecurityPolicy(); |
| 4792 return; | 4785 return; |
| 4793 } | 4786 } |
| 4794 | 4787 |
| 4795 // In the common case, create the security context from the currently | 4788 // In the common case, create the security context from the currently |
| 4796 // loading URL with a fresh content security policy. | 4789 // loading URL with a fresh content security policy. |
| 4797 m_cookieURL = m_url; | 4790 m_cookieURL = m_url; |
| 4798 enforceSandboxFlags(initializer.sandboxFlags()); | 4791 enforceSandboxFlags(initializer.sandboxFlags()); |
| 4799 setSecurityOrigin(isSandboxed(SandboxOrigin) ? SecurityOrigin::createUnique(
) : SecurityOrigin::create(m_url)); | 4792 setSecurityOrigin(isSandboxed(SandboxOrigin) ? SecurityOrigin::createUnique(
) : SecurityOrigin::create(m_url)); |
| 4800 setContentSecurityPolicy(contentSecurityPolicyFor(this)); | 4793 |
| 4794 if (importsController()) { |
| 4795 // If this document is an HTML import, grab a reference to it's master d
ocument's Content |
| 4796 // Security Policy. We don't call 'initContentSecurityPolicy' in this ca
se, as we can't |
| 4797 // rebind the master document's policy object: its ExecutionContext need
s to remain tied |
| 4798 // to the master document. |
| 4799 setContentSecurityPolicy(importsController()->master()->contentSecurityP
olicy()); |
| 4800 } else { |
| 4801 initContentSecurityPolicy(); |
| 4802 } |
| 4801 | 4803 |
| 4802 if (Settings* settings = initializer.settings()) { | 4804 if (Settings* settings = initializer.settings()) { |
| 4803 if (!settings->webSecurityEnabled()) { | 4805 if (!settings->webSecurityEnabled()) { |
| 4804 // Web security is turned off. We should let this document access ev
ery other document. This is used primary by testing | 4806 // Web security is turned off. We should let this document access ev
ery other document. This is used primary by testing |
| 4805 // harnesses for web sites. | 4807 // harnesses for web sites. |
| 4806 securityOrigin()->grantUniversalAccess(); | 4808 securityOrigin()->grantUniversalAccess(); |
| 4807 } else if (securityOrigin()->isLocal()) { | 4809 } else if (securityOrigin()->isLocal()) { |
| 4808 if (settings->allowUniversalAccessFromFileURLs()) { | 4810 if (settings->allowUniversalAccessFromFileURLs()) { |
| 4809 // Some clients want local URLs to have universal access, but th
at setting is dangerous for other clients. | 4811 // Some clients want local URLs to have universal access, but th
at setting is dangerous for other clients. |
| 4810 securityOrigin()->grantUniversalAccess(); | 4812 securityOrigin()->grantUniversalAccess(); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4842 securityOrigin()->grantLoadLocalResources(); | 4844 securityOrigin()->grantLoadLocalResources(); |
| 4843 return; | 4845 return; |
| 4844 } | 4846 } |
| 4845 | 4847 |
| 4846 m_cookieURL = initializer.owner()->cookieURL(); | 4848 m_cookieURL = initializer.owner()->cookieURL(); |
| 4847 // We alias the SecurityOrigins to match Firefox, see Bug 15313 | 4849 // We alias the SecurityOrigins to match Firefox, see Bug 15313 |
| 4848 // https://bugs.webkit.org/show_bug.cgi?id=15313 | 4850 // https://bugs.webkit.org/show_bug.cgi?id=15313 |
| 4849 setSecurityOrigin(initializer.owner()->securityOrigin()); | 4851 setSecurityOrigin(initializer.owner()->securityOrigin()); |
| 4850 } | 4852 } |
| 4851 | 4853 |
| 4852 void Document::initContentSecurityPolicy(const ContentSecurityPolicyResponseHead
ers& headers) | 4854 void Document::initContentSecurityPolicy(PassRefPtr<ContentSecurityPolicy> csp) |
| 4853 { | 4855 { |
| 4856 setContentSecurityPolicy(csp ? csp : ContentSecurityPolicy::create()); |
| 4854 if (m_frame && m_frame->tree().parent() && m_frame->tree().parent()->isLocal
Frame() && (shouldInheritSecurityOriginFromOwner(m_url) || isPluginDocument())) | 4857 if (m_frame && m_frame->tree().parent() && m_frame->tree().parent()->isLocal
Frame() && (shouldInheritSecurityOriginFromOwner(m_url) || isPluginDocument())) |
| 4855 contentSecurityPolicy()->copyStateFrom(toLocalFrame(m_frame->tree().pare
nt())->document()->contentSecurityPolicy()); | 4858 contentSecurityPolicy()->copyStateFrom(toLocalFrame(m_frame->tree().pare
nt())->document()->contentSecurityPolicy()); |
| 4856 contentSecurityPolicy()->didReceiveHeaders(headers); | 4859 if (transformSourceDocument()) |
| 4860 contentSecurityPolicy()->copyStateFrom(transformSourceDocument()->conten
tSecurityPolicy()); |
| 4861 contentSecurityPolicy()->bindToExecutionContext(this); |
| 4857 } | 4862 } |
| 4858 | 4863 |
| 4859 bool Document::allowInlineEventHandlers(Node* node, EventListener* listener, con
st String& contextURL, const WTF::OrdinalNumber& contextLine) | 4864 bool Document::allowInlineEventHandlers(Node* node, EventListener* listener, con
st String& contextURL, const WTF::OrdinalNumber& contextLine) |
| 4860 { | 4865 { |
| 4861 if (!contentSecurityPolicy()->allowInlineEventHandlers(contextURL, contextLi
ne)) | 4866 if (!contentSecurityPolicy()->allowInlineEventHandlers(contextURL, contextLi
ne)) |
| 4862 return false; | 4867 return false; |
| 4863 | 4868 |
| 4864 // HTML says that inline script needs browsing context to create its executi
on environment. | 4869 // HTML says that inline script needs browsing context to create its executi
on environment. |
| 4865 // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.ht
ml#event-handler-attributes | 4870 // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.ht
ml#event-handler-attributes |
| 4866 // Also, if the listening node came from other document, which happens on co
ntext-less event dispatching, | 4871 // Also, if the listening node came from other document, which happens on co
ntext-less event dispatching, |
| (...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5826 using namespace blink; | 5831 using namespace blink; |
| 5827 void showLiveDocumentInstances() | 5832 void showLiveDocumentInstances() |
| 5828 { | 5833 { |
| 5829 WeakDocumentSet& set = liveDocumentSet(); | 5834 WeakDocumentSet& set = liveDocumentSet(); |
| 5830 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); | 5835 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); |
| 5831 for (WeakDocumentSet::const_iterator it = set.begin(); it != set.end(); ++it
) { | 5836 for (WeakDocumentSet::const_iterator it = set.begin(); it != set.end(); ++it
) { |
| 5832 fprintf(stderr, "- Document %p URL: %s\n", *it, (*it)->url().string().ut
f8().data()); | 5837 fprintf(stderr, "- Document %p URL: %s\n", *it, (*it)->url().string().ut
f8().data()); |
| 5833 } | 5838 } |
| 5834 } | 5839 } |
| 5835 #endif | 5840 #endif |
| OLD | NEW |