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

Side by Side Diff: Source/platform/weborigin/OriginAccessEntry.cpp

Issue 1128913004: Improve OriginAccessEntry support for IP addresses. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Feedback. Created 5 years, 7 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 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 13 matching lines...) Expand all
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "config.h" 31 #include "config.h"
32 #include "platform/weborigin/OriginAccessEntry.h" 32 #include "platform/weborigin/OriginAccessEntry.h"
33 33
34 #include "platform/weborigin/KURL.h"
34 #include "platform/weborigin/SecurityOrigin.h" 35 #include "platform/weborigin/SecurityOrigin.h"
35 #include "public/platform/Platform.h" 36 #include "public/platform/Platform.h"
36 #include "public/platform/WebPublicSuffixList.h" 37 #include "public/platform/WebPublicSuffixList.h"
38 #include <url/third_party/mozilla/url_parse.h>
39 #include <url/url_canon.h>
37 40
38 namespace blink { 41 namespace blink {
39 42
43 namespace {
44
45 // TODO(mkwst): This basically replicates GURL::HostIsIPAddress. If/when
46 // we re-evaluate everything after merging the Blink and Chromium
47 // repositories, perhaps we can just use that directly.
48 bool HostIsIPAddress(const String& host)
49 {
50 if (host.isEmpty())
51 return false;
52
53 String protocol("https://");
54 KURL url(KURL(), protocol + host + "/");
55 if (!url.isValid())
56 return false;
57
58 url::RawCanonOutputT<char, 128> ignoredOutput;
59 url::CanonHostInfo hostInfo;
60 url::Component hostComponent(protocol.length(), host.length());
61 url::CanonicalizeIPAddress(url.string().utf8().data(), hostComponent, &ignor edOutput, &hostInfo);
62 return hostInfo.IsIPAddress();
63 }
64
65 }
66
40 OriginAccessEntry::OriginAccessEntry(const String& protocol, const String& host, SubdomainSetting subdomainSetting, IPAddressSetting ipAddressSetting) 67 OriginAccessEntry::OriginAccessEntry(const String& protocol, const String& host, SubdomainSetting subdomainSetting, IPAddressSetting ipAddressSetting)
41 : m_protocol(protocol.lower()) 68 : m_protocol(protocol.lower())
42 , m_host(host.lower()) 69 , m_host(host.lower())
43 , m_subdomainSettings(subdomainSetting) 70 , m_subdomainSettings(subdomainSetting)
44 , m_ipAddressSettings(ipAddressSetting) 71 , m_ipAddressSettings(ipAddressSetting)
45 , m_hostIsPublicSuffix(false) 72 , m_hostIsPublicSuffix(false)
46 { 73 {
47 ASSERT(subdomainSetting == AllowSubdomains || subdomainSetting == DisallowSu bdomains); 74 ASSERT(subdomainSetting == AllowSubdomains || subdomainSetting == DisallowSu bdomains);
48 75
49 // Assume that any host that ends with a digit is trying to be an IP address . 76 m_hostIsIPAddress = HostIsIPAddress(host);
50 m_hostIsIPAddress = !m_host.isEmpty() && isASCIIDigit(m_host[m_host.length() - 1]);
51 77
52 // Look for top-level domains, either with or without an additional dot. 78 // Look for top-level domains, either with or without an additional dot.
53 if (!m_hostIsIPAddress) { 79 if (!m_hostIsIPAddress) {
54 WebPublicSuffixList* suffixList = Platform::current()->publicSuffixList( ); 80 WebPublicSuffixList* suffixList = Platform::current()->publicSuffixList( );
55 if (suffixList && m_host.length() <= suffixList->getPublicSuffixLength(m _host) + 1) 81 if (suffixList && m_host.length() <= suffixList->getPublicSuffixLength(m _host) + 1)
56 m_hostIsPublicSuffix = true; 82 m_hostIsPublicSuffix = true;
57 } 83 }
58 } 84 }
59 85
60 OriginAccessEntry::MatchResult OriginAccessEntry::matchesOrigin(const SecurityOr igin& origin) const 86 OriginAccessEntry::MatchResult OriginAccessEntry::matchesOrigin(const SecurityOr igin& origin) const
(...skipping 24 matching lines...) Expand all
85 if (origin.host().length() <= m_host.length() || origin.host()[origin.host() .length() - m_host.length() - 1] != '.' || !origin.host().endsWith(m_host)) 111 if (origin.host().length() <= m_host.length() || origin.host()[origin.host() .length() - m_host.length() - 1] != '.' || !origin.host().endsWith(m_host))
86 return DoesNotMatchOrigin; 112 return DoesNotMatchOrigin;
87 113
88 if (m_hostIsPublicSuffix) 114 if (m_hostIsPublicSuffix)
89 return MatchesOriginButIsPublicSuffix; 115 return MatchesOriginButIsPublicSuffix;
90 116
91 return MatchesOrigin; 117 return MatchesOrigin;
92 } 118 }
93 119
94 } // namespace blink 120 } // namespace blink
OLDNEW
« no previous file with comments | « Source/platform/weborigin/OriginAccessEntry.h ('k') | Source/platform/weborigin/OriginAccessEntryTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698