| 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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 #include "core/svg/SVGStyleElement.h" | 167 #include "core/svg/SVGStyleElement.h" |
| 168 #include "core/xml/XSLTProcessor.h" | 168 #include "core/xml/XSLTProcessor.h" |
| 169 #include "core/xml/parser/XMLDocumentParser.h" | 169 #include "core/xml/parser/XMLDocumentParser.h" |
| 170 #include "platform/DateComponents.h" | 170 #include "platform/DateComponents.h" |
| 171 #include "platform/Language.h" | 171 #include "platform/Language.h" |
| 172 #include "platform/Timer.h" | 172 #include "platform/Timer.h" |
| 173 #include "platform/TraceEvent.h" | 173 #include "platform/TraceEvent.h" |
| 174 #include "platform/network/HTTPParsers.h" | 174 #include "platform/network/HTTPParsers.h" |
| 175 #include "platform/text/PlatformLocale.h" | 175 #include "platform/text/PlatformLocale.h" |
| 176 #include "platform/text/SegmentedString.h" | 176 #include "platform/text/SegmentedString.h" |
| 177 #include "weborigin/OriginAccessEntry.h" |
| 177 #include "weborigin/SchemeRegistry.h" | 178 #include "weborigin/SchemeRegistry.h" |
| 178 #include "weborigin/SecurityOrigin.h" | 179 #include "weborigin/SecurityOrigin.h" |
| 179 #include "wtf/CurrentTime.h" | 180 #include "wtf/CurrentTime.h" |
| 180 #include "wtf/HashFunctions.h" | 181 #include "wtf/HashFunctions.h" |
| 181 #include "wtf/MainThread.h" | 182 #include "wtf/MainThread.h" |
| 182 #include "wtf/PassRefPtr.h" | 183 #include "wtf/PassRefPtr.h" |
| 183 #include "wtf/StdLibExtras.h" | 184 #include "wtf/StdLibExtras.h" |
| 184 #include "wtf/TemporaryChange.h" | 185 #include "wtf/TemporaryChange.h" |
| 185 #include "wtf/UnusedParam.h" | 186 #include "wtf/UnusedParam.h" |
| 186 #include "wtf/text/StringBuffer.h" | 187 #include "wtf/text/StringBuffer.h" |
| (...skipping 3567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3754 return securityOrigin()->domain(); | 3755 return securityOrigin()->domain(); |
| 3755 } | 3756 } |
| 3756 | 3757 |
| 3757 void Document::setDomain(const String& newDomain, ExceptionState& es) | 3758 void Document::setDomain(const String& newDomain, ExceptionState& es) |
| 3758 { | 3759 { |
| 3759 if (SchemeRegistry::isDomainRelaxationForbiddenForURLScheme(securityOrigin()
->protocol())) { | 3760 if (SchemeRegistry::isDomainRelaxationForbiddenForURLScheme(securityOrigin()
->protocol())) { |
| 3760 es.throwSecurityError(ExceptionMessages::failedToSet("domain", "Document
", "assignment is forbidden for the '" + securityOrigin()->protocol() + "' schem
e.")); | 3761 es.throwSecurityError(ExceptionMessages::failedToSet("domain", "Document
", "assignment is forbidden for the '" + securityOrigin()->protocol() + "' schem
e.")); |
| 3761 return; | 3762 return; |
| 3762 } | 3763 } |
| 3763 | 3764 |
| 3764 // Both NS and IE specify that changing the domain is only allowed when | 3765 String exceptionMessage = ExceptionMessages::failedToSet("domain", "Document
", "'" + newDomain + "' is not a suffix of '" + domain() + "'."); |
| 3765 // the new domain is a suffix of the old domain. | 3766 if (newDomain.isEmpty()) { |
| 3766 | |
| 3767 // If the new domain is the same as the old domain, still call | |
| 3768 // securityOrigin()->setDomainForDOM. This will change the | |
| 3769 // security check behavior. For example, if a page loaded on port 8000 | |
| 3770 // assigns its current domain using document.domain, the page will | |
| 3771 // allow other pages loaded on different ports in the same domain that | |
| 3772 // have also assigned to access this page. | |
| 3773 if (equalIgnoringCase(domain(), newDomain)) { | |
| 3774 securityOrigin()->setDomainFromDOM(newDomain); | |
| 3775 if (m_frame) | |
| 3776 m_frame->script().updateSecurityOrigin(); | |
| 3777 return; | |
| 3778 } | |
| 3779 | |
| 3780 int oldLength = domain().length(); | |
| 3781 int newLength = newDomain.length(); | |
| 3782 String exceptionMessage = ExceptionMessages::failedToSet("domain", "Documen
t", "'" + newDomain + "' is not a suffix of '" + domain() + "'."); | |
| 3783 // e.g. newDomain = subdomain.www.example.com (25) and domain() = www.exampl
e.com (15) | |
| 3784 if (newLength >= oldLength) { | |
| 3785 es.throwSecurityError(exceptionMessage); | 3767 es.throwSecurityError(exceptionMessage); |
| 3786 return; | 3768 return; |
| 3787 } | 3769 } |
| 3788 | 3770 |
| 3789 String test = domain(); | 3771 OriginAccessEntry::IPAddressSetting ipAddressSetting = settings() && setting
s()->treatIPAddressAsDomain() ? OriginAccessEntry::TreatIPAddressAsDomain : Orig
inAccessEntry::TreatIPAddressAsIPAddress; |
| 3790 // Check that it's a complete suffix, not e.g. "ample.com" | 3772 OriginAccessEntry accessEntry(securityOrigin()->protocol(), newDomain, Origi
nAccessEntry::AllowSubdomains, ipAddressSetting); |
| 3791 if (test[oldLength - newLength - 1] != '.') { | 3773 if (!accessEntry.matchesOrigin(*securityOrigin())) { |
| 3792 es.throwSecurityError(exceptionMessage); | 3774 es.throwSecurityError(exceptionMessage); |
| 3793 return; | 3775 return; |
| 3794 } | 3776 } |
| 3795 | |
| 3796 // Now test is "example.com" from domain() | |
| 3797 // and we check that it's the same thing as newDomain | |
| 3798 test.remove(0, oldLength - newLength); | |
| 3799 if (test != newDomain) { | |
| 3800 es.throwSecurityError(exceptionMessage); | |
| 3801 return; | |
| 3802 } | |
| 3803 | 3777 |
| 3804 securityOrigin()->setDomainFromDOM(newDomain); | 3778 securityOrigin()->setDomainFromDOM(newDomain); |
| 3805 if (m_frame) | 3779 if (m_frame) |
| 3806 m_frame->script().updateSecurityOrigin(); | 3780 m_frame->script().updateSecurityOrigin(); |
| 3807 } | 3781 } |
| 3808 | 3782 |
| 3809 // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-lastmodified | 3783 // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-lastmodified |
| 3810 String Document::lastModified() const | 3784 String Document::lastModified() const |
| 3811 { | 3785 { |
| 3812 DateComponents date; | 3786 DateComponents date; |
| (...skipping 1438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5251 void Document::modifiedStyleSheet(StyleSheet* sheet, RecalcStyleTime when, Style
ResolverUpdateMode updateMode) | 5225 void Document::modifiedStyleSheet(StyleSheet* sheet, RecalcStyleTime when, Style
ResolverUpdateMode updateMode) |
| 5252 { | 5226 { |
| 5253 if (!isActive()) | 5227 if (!isActive()) |
| 5254 return; | 5228 return; |
| 5255 | 5229 |
| 5256 styleEngine()->modifiedStyleSheet(sheet); | 5230 styleEngine()->modifiedStyleSheet(sheet); |
| 5257 styleResolverChanged(when, updateMode); | 5231 styleResolverChanged(when, updateMode); |
| 5258 } | 5232 } |
| 5259 | 5233 |
| 5260 } // namespace WebCore | 5234 } // namespace WebCore |
| OLD | NEW |