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

Side by Side Diff: net/base/registry_controlled_domain.cc

Issue 8395025: Make RegistryControlledDomainService a static-function container class, rather than a Singleton (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update licenses Created 9 years, 1 month 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 //* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // NB: Modelled after Mozilla's code (originally written by Pamela Greene,
6 // later modified by others), but almost entirely rewritten for Chrome.
7 // (netwerk/dns/src/nsEffectiveTLDService.cpp)
2 /* ***** BEGIN LICENSE BLOCK ***** 8 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 9 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 * 10 *
5 * The contents of this file are subject to the Mozilla Public License Version 11 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with 12 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at 13 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/ 14 * http://www.mozilla.org/MPL/
9 * 15 *
10 * Software distributed under the License is distributed on an "AS IS" basis, 16 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 17 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 56
51 #include "effective_tld_names.cc" 57 #include "effective_tld_names.cc"
52 58
53 namespace net { 59 namespace net {
54 60
55 namespace { 61 namespace {
56 62
57 const int kExceptionRule = 1; 63 const int kExceptionRule = 1;
58 const int kWildcardRule = 2; 64 const int kWildcardRule = 2;
59 65
60 RegistryControlledDomainService* test_instance_; 66 } // namespace
wtc 2011/10/27 22:44:09 Is test_instance_ not used?
Ryan Sleevi 2011/10/27 22:48:04 Not in the refactor, no. Previously it was used by
61 67
62 } // namespace 68 RegistryControlledDomainService::FindDomainPtr
69 RegistryControlledDomainService::find_domain_function_ =
70 Perfect_Hash::FindDomain;
63 71
64 // static 72 // static
65 std::string RegistryControlledDomainService::GetDomainAndRegistry( 73 std::string RegistryControlledDomainService::GetDomainAndRegistry(
66 const GURL& gurl) { 74 const GURL& gurl) {
67 const url_parse::Component host = 75 const url_parse::Component host =
68 gurl.parsed_for_possibly_invalid_spec().host; 76 gurl.parsed_for_possibly_invalid_spec().host;
69 if ((host.len <= 0) || gurl.HostIsIPAddress()) 77 if ((host.len <= 0) || gurl.HostIsIPAddress())
70 return std::string(); 78 return std::string();
71 return GetDomainAndRegistryImpl(std::string( 79 return GetDomainAndRegistryImpl(std::string(
72 gurl.possibly_invalid_spec().data() + host.begin, host.len)); 80 gurl.possibly_invalid_spec().data() + host.begin, host.len));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 // static 115 // static
108 size_t RegistryControlledDomainService::GetRegistryLength( 116 size_t RegistryControlledDomainService::GetRegistryLength(
109 const GURL& gurl, 117 const GURL& gurl,
110 bool allow_unknown_registries) { 118 bool allow_unknown_registries) {
111 const url_parse::Component host = 119 const url_parse::Component host =
112 gurl.parsed_for_possibly_invalid_spec().host; 120 gurl.parsed_for_possibly_invalid_spec().host;
113 if (host.len <= 0) 121 if (host.len <= 0)
114 return std::string::npos; 122 return std::string::npos;
115 if (gurl.HostIsIPAddress()) 123 if (gurl.HostIsIPAddress())
116 return 0; 124 return 0;
117 return GetInstance()->GetRegistryLengthImpl( 125 return GetRegistryLengthImpl(
118 std::string(gurl.possibly_invalid_spec().data() + host.begin, host.len), 126 std::string(gurl.possibly_invalid_spec().data() + host.begin, host.len),
119 allow_unknown_registries); 127 allow_unknown_registries);
120 } 128 }
121 129
122 // static 130 // static
123 size_t RegistryControlledDomainService::GetRegistryLength( 131 size_t RegistryControlledDomainService::GetRegistryLength(
124 const std::string& host, 132 const std::string& host,
125 bool allow_unknown_registries) { 133 bool allow_unknown_registries) {
126 url_canon::CanonHostInfo host_info; 134 url_canon::CanonHostInfo host_info;
127 const std::string canon_host(CanonicalizeHost(host, &host_info)); 135 const std::string canon_host(CanonicalizeHost(host, &host_info));
128 if (canon_host.empty()) 136 if (canon_host.empty())
129 return std::string::npos; 137 return std::string::npos;
130 if (host_info.IsIPAddress()) 138 if (host_info.IsIPAddress())
131 return 0; 139 return 0;
132 return GetInstance()->GetRegistryLengthImpl(canon_host, 140 return GetRegistryLengthImpl(canon_host, allow_unknown_registries);
133 allow_unknown_registries);
134 }
135
136 // static
137 RegistryControlledDomainService* RegistryControlledDomainService::GetInstance()
138 {
139 if (test_instance_)
140 return test_instance_;
141
142 return Singleton<RegistryControlledDomainService>::get();
143 }
144
145 RegistryControlledDomainService::RegistryControlledDomainService()
146 : find_domain_function_(Perfect_Hash::FindDomain) {
147 }
148
149 // static
150 RegistryControlledDomainService* RegistryControlledDomainService::SetInstance(
151 RegistryControlledDomainService* instance) {
152 RegistryControlledDomainService* old_instance = test_instance_;
153 test_instance_ = instance;
154 return old_instance;
155 } 141 }
156 142
157 // static 143 // static
158 void RegistryControlledDomainService::UseFindDomainFunction( 144 void RegistryControlledDomainService::UseFindDomainFunction(
159 FindDomainPtr function) { 145 FindDomainPtr function) {
160 RegistryControlledDomainService* instance = GetInstance(); 146 if (function) {
161 instance->find_domain_function_ = function; 147 find_domain_function_ = function;
148 } else {
149 find_domain_function_ = Perfect_Hash::FindDomain;
150 }
162 } 151 }
163 152
164 // static 153 // static
165 std::string RegistryControlledDomainService::GetDomainAndRegistryImpl( 154 std::string RegistryControlledDomainService::GetDomainAndRegistryImpl(
166 const std::string& host) { 155 const std::string& host) {
167 DCHECK(!host.empty()); 156 DCHECK(!host.empty());
168 157
169 // Find the length of the registry for this host. 158 // Find the length of the registry for this host.
170 const size_t registry_length = 159 const size_t registry_length = GetRegistryLengthImpl(host, true);
171 GetInstance()->GetRegistryLengthImpl(host, true);
172 if ((registry_length == std::string::npos) || (registry_length == 0)) 160 if ((registry_length == std::string::npos) || (registry_length == 0))
173 return std::string(); // No registry. 161 return std::string(); // No registry.
174 // The "2" in this next line is 1 for the dot, plus a 1-char minimum preceding 162 // The "2" in this next line is 1 for the dot, plus a 1-char minimum preceding
175 // subcomponent length. 163 // subcomponent length.
176 DCHECK(host.length() >= 2); 164 DCHECK(host.length() >= 2);
177 if (registry_length > (host.length() - 2)) { 165 if (registry_length > (host.length() - 2)) {
178 NOTREACHED() << 166 NOTREACHED() <<
179 "Host does not have at least one subcomponent before registry!"; 167 "Host does not have at least one subcomponent before registry!";
180 return std::string(); 168 return std::string();
181 } 169 }
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 next_dot = host.find('.', curr_start); 250 next_dot = host.find('.', curr_start);
263 } 251 }
264 252
265 // No rule found in the registry. curr_start now points to the first 253 // No rule found in the registry. curr_start now points to the first
266 // character of the last subcomponent of the host, so if we allow unknown 254 // character of the last subcomponent of the host, so if we allow unknown
267 // registries, return the length of this subcomponent. 255 // registries, return the length of this subcomponent.
268 return allow_unknown_registries ? (host.length() - curr_start) : 0; 256 return allow_unknown_registries ? (host.length() - curr_start) : 0;
269 } 257 }
270 258
271 } // namespace net 259 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698