OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/supervised_user/experimental/supervised_user_async_url_
checker.h" | 5 #include "chrome/browser/supervised_user/experimental/supervised_user_async_url_
checker.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 | 174 |
175 SupervisedUserAsyncURLChecker::Check::~Check() {} | 175 SupervisedUserAsyncURLChecker::Check::~Check() {} |
176 | 176 |
177 SupervisedUserAsyncURLChecker::CheckResult::CheckResult( | 177 SupervisedUserAsyncURLChecker::CheckResult::CheckResult( |
178 SupervisedUserURLFilter::FilteringBehavior behavior, bool uncertain) | 178 SupervisedUserURLFilter::FilteringBehavior behavior, bool uncertain) |
179 : behavior(behavior), uncertain(uncertain) { | 179 : behavior(behavior), uncertain(uncertain) { |
180 } | 180 } |
181 | 181 |
182 SupervisedUserAsyncURLChecker::SupervisedUserAsyncURLChecker( | 182 SupervisedUserAsyncURLChecker::SupervisedUserAsyncURLChecker( |
183 URLRequestContextGetter* context, | 183 URLRequestContextGetter* context, |
184 const std::string& cx, | 184 const std::string& cx) |
185 const std::string& api_key) | |
186 : context_(context), cx_(cx), cache_(kDefaultCacheSize) { | 185 : context_(context), cx_(cx), cache_(kDefaultCacheSize) { |
187 SetApiKey(api_key); | |
188 } | 186 } |
189 | 187 |
190 SupervisedUserAsyncURLChecker::SupervisedUserAsyncURLChecker( | 188 SupervisedUserAsyncURLChecker::SupervisedUserAsyncURLChecker( |
191 URLRequestContextGetter* context, | 189 URLRequestContextGetter* context, |
192 const std::string& cx, | 190 const std::string& cx, |
193 const std::string& api_key, | |
194 size_t cache_size) | 191 size_t cache_size) |
195 : context_(context), cx_(cx), cache_(cache_size) { | 192 : context_(context), cx_(cx), cache_(cache_size) { |
196 SetApiKey(api_key); | |
197 } | 193 } |
198 | 194 |
199 SupervisedUserAsyncURLChecker::~SupervisedUserAsyncURLChecker() {} | 195 SupervisedUserAsyncURLChecker::~SupervisedUserAsyncURLChecker() {} |
200 | 196 |
201 bool SupervisedUserAsyncURLChecker::CheckURL(const GURL& url, | 197 bool SupervisedUserAsyncURLChecker::CheckURL(const GURL& url, |
202 const CheckCallback& callback) { | 198 const CheckCallback& callback) { |
203 // TODO(treib): Hack: For now, allow all Google URLs to save search QPS. If we | 199 // TODO(treib): Hack: For now, allow all Google URLs to save search QPS. If we |
204 // ever remove this, we should find a way to allow at least the NTP. | 200 // ever remove this, we should find a way to allow at least the NTP. |
205 if (google_util::IsGoogleDomainUrl(url, | 201 if (google_util::IsGoogleDomainUrl(url, |
206 google_util::ALLOW_SUBDOMAIN, | 202 google_util::ALLOW_SUBDOMAIN, |
(...skipping 23 matching lines...) Expand all Loading... |
230 // See if we already have a check in progress for this URL. | 226 // See if we already have a check in progress for this URL. |
231 for (Check* check : checks_in_progress_) { | 227 for (Check* check : checks_in_progress_) { |
232 if (check->url == url) { | 228 if (check->url == url) { |
233 DVLOG(1) << "Adding to pending check for " << url.spec(); | 229 DVLOG(1) << "Adding to pending check for " << url.spec(); |
234 check->callbacks.push_back(callback); | 230 check->callbacks.push_back(callback); |
235 return false; | 231 return false; |
236 } | 232 } |
237 } | 233 } |
238 | 234 |
239 DVLOG(1) << "Checking URL " << url; | 235 DVLOG(1) << "Checking URL " << url; |
| 236 std::string api_key = google_apis::GetSafeSitesAPIKey(); |
240 scoped_ptr<URLFetcher> fetcher_safe( | 237 scoped_ptr<URLFetcher> fetcher_safe( |
241 CreateFetcher(this, context_, cx_, api_key_, url, true)); | 238 CreateFetcher(this, context_, cx_, api_key, url, true)); |
242 scoped_ptr<URLFetcher> fetcher_unsafe( | 239 scoped_ptr<URLFetcher> fetcher_unsafe( |
243 CreateFetcher(this, context_, cx_, api_key_, url, false)); | 240 CreateFetcher(this, context_, cx_, api_key, url, false)); |
244 fetcher_safe->Start(); | 241 fetcher_safe->Start(); |
245 fetcher_unsafe->Start(); | 242 fetcher_unsafe->Start(); |
246 checks_in_progress_.push_back( | 243 checks_in_progress_.push_back( |
247 new Check(url, fetcher_safe.Pass(), fetcher_unsafe.Pass(), callback)); | 244 new Check(url, fetcher_safe.Pass(), fetcher_unsafe.Pass(), callback)); |
248 return false; | 245 return false; |
249 } | 246 } |
250 | 247 |
251 void SupervisedUserAsyncURLChecker::SetApiKey(const std::string& api_key) { | |
252 api_key_ = api_key.empty() ? google_apis::GetAPIKey() : api_key; | |
253 } | |
254 | |
255 void SupervisedUserAsyncURLChecker::OnURLFetchComplete( | 248 void SupervisedUserAsyncURLChecker::OnURLFetchComplete( |
256 const net::URLFetcher* source) { | 249 const net::URLFetcher* source) { |
257 ScopedVector<Check>::iterator it = checks_in_progress_.begin(); | 250 ScopedVector<Check>::iterator it = checks_in_progress_.begin(); |
258 bool is_safe_search_request = false; | 251 bool is_safe_search_request = false; |
259 while (it != checks_in_progress_.end()) { | 252 while (it != checks_in_progress_.end()) { |
260 if (source == (*it)->fetcher_safe.get()) { | 253 if (source == (*it)->fetcher_safe.get()) { |
261 is_safe_search_request = true; | 254 is_safe_search_request = true; |
262 (*it)->safe_done = true; | 255 (*it)->safe_done = true; |
263 break; | 256 break; |
264 } else if (source == (*it)->fetcher_unsafe.get()) { | 257 } else if (source == (*it)->fetcher_unsafe.get()) { |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 | 316 |
324 UMA_HISTOGRAM_TIMES("ManagedUsers.SafeSitesDelay", | 317 UMA_HISTOGRAM_TIMES("ManagedUsers.SafeSitesDelay", |
325 base::Time::Now() - check->start_time); | 318 base::Time::Now() - check->start_time); |
326 | 319 |
327 cache_.Put(check->url, CheckResult(behavior, uncertain)); | 320 cache_.Put(check->url, CheckResult(behavior, uncertain)); |
328 | 321 |
329 for (size_t i = 0; i < check->callbacks.size(); i++) | 322 for (size_t i = 0; i < check->callbacks.size(); i++) |
330 check->callbacks[i].Run(check->url, behavior, uncertain); | 323 check->callbacks[i].Run(check->url, behavior, uncertain); |
331 checks_in_progress_.erase(it); | 324 checks_in_progress_.erase(it); |
332 } | 325 } |
OLD | NEW |