Chromium Code Reviews| Index: chrome/browser/supervised_user/experimental/supervised_user_async_url_checker.cc |
| diff --git a/chrome/browser/supervised_user/experimental/supervised_user_async_url_checker.cc b/chrome/browser/supervised_user/experimental/supervised_user_async_url_checker.cc |
| index f2501b4516f99bb1c4e6be807ab02f3baf76f5df..2c379c2a1d7add3c88285a331d13ff5e51b27dcb 100644 |
| --- a/chrome/browser/supervised_user/experimental/supervised_user_async_url_checker.cc |
| +++ b/chrome/browser/supervised_user/experimental/supervised_user_async_url_checker.cc |
| @@ -35,6 +35,7 @@ const char kDataContentType[] = "application/x-www-form-urlencoded"; |
| const char kDataFormat[] = "key=%s&urls=%s"; |
| const size_t kDefaultCacheSize = 1000; |
| +const size_t kDefaultCacheTimeoutSeconds = 3600; |
| // Builds the POST data for SafeSearch API requests. |
| std::string BuildRequestData(const std::string& api_key, const GURL& url) { |
| @@ -94,7 +95,7 @@ struct SupervisedUserAsyncURLChecker::Check { |
| GURL url; |
| scoped_ptr<net::URLFetcher> fetcher; |
| std::vector<CheckCallback> callbacks; |
| - base::Time start_time; |
| + base::TimeTicks start_time; |
|
Marc Treib
2015/10/15 15:28:24
Unrelated
|
| }; |
| SupervisedUserAsyncURLChecker::Check::Check( |
| @@ -104,33 +105,36 @@ SupervisedUserAsyncURLChecker::Check::Check( |
| : url(url), |
| fetcher(fetcher.Pass()), |
| callbacks(1, callback), |
| - start_time(base::Time::Now()) { |
| + start_time(base::TimeTicks::Now()) { |
| } |
| SupervisedUserAsyncURLChecker::Check::~Check() {} |
| SupervisedUserAsyncURLChecker::CheckResult::CheckResult( |
| - SupervisedUserURLFilter::FilteringBehavior behavior, bool uncertain) |
| - : behavior(behavior), uncertain(uncertain) { |
| -} |
| + SupervisedUserURLFilter::FilteringBehavior behavior, |
| + bool uncertain) |
| + : behavior(behavior), |
| + uncertain(uncertain), |
| + timestamp(base::TimeTicks::Now()) {} |
| SupervisedUserAsyncURLChecker::SupervisedUserAsyncURLChecker( |
| URLRequestContextGetter* context) |
| - : context_(context), cache_(kDefaultCacheSize) { |
| -} |
| + : SupervisedUserAsyncURLChecker(context, kDefaultCacheSize) {} |
| SupervisedUserAsyncURLChecker::SupervisedUserAsyncURLChecker( |
| URLRequestContextGetter* context, |
| size_t cache_size) |
| - : context_(context), cache_(cache_size) { |
| -} |
| + : context_(context), |
| + cache_(cache_size), |
| + cache_timeout_( |
| + base::TimeDelta::FromSeconds(kDefaultCacheTimeoutSeconds)) {} |
| SupervisedUserAsyncURLChecker::~SupervisedUserAsyncURLChecker() {} |
| bool SupervisedUserAsyncURLChecker::CheckURL(const GURL& url, |
| const CheckCallback& callback) { |
| - // TODO(treib): Hack: For now, allow all Google URLs to save search QPS. If we |
| - // ever remove this, we should find a way to allow at least the NTP. |
| + // TODO(treib): Hack: For now, allow all Google URLs to save QPS. If we ever |
| + // remove this, we should find a way to allow at least the NTP. |
| if (google_util::IsGoogleDomainUrl(url, |
| google_util::ALLOW_SUBDOMAIN, |
| google_util::ALLOW_NON_STANDARD_PORTS)) { |
| @@ -149,11 +153,17 @@ bool SupervisedUserAsyncURLChecker::CheckURL(const GURL& url, |
| auto cache_it = cache_.Get(url); |
| if (cache_it != cache_.end()) { |
| const CheckResult& result = cache_it->second; |
| - DVLOG(1) << "Cache hit! " << url.spec() << " is " |
| - << (result.behavior == SupervisedUserURLFilter::BLOCK ? "NOT" : "") |
| - << " safe; certain: " << !result.uncertain; |
| - callback.Run(url, result.behavior, result.uncertain); |
| - return true; |
| + base::TimeDelta age = base::TimeTicks::Now() - result.timestamp; |
| + if (age < cache_timeout_) { |
| + DVLOG(1) << "Cache hit! " << url.spec() << " is " |
| + << (result.behavior == SupervisedUserURLFilter::BLOCK ? "NOT" |
| + : "") |
| + << " safe; certain: " << !result.uncertain; |
| + callback.Run(url, result.behavior, result.uncertain); |
| + return true; |
| + } |
| + DVLOG(1) << "Outdated cache entry for " << url.spec() << ", purging"; |
| + cache_.Erase(cache_it); |
|
Bernhard Bauer
2015/10/20 08:10:03
Hm... just as a small possible optimization: We ev
Marc Treib
2015/10/20 08:53:55
I thought about it, and decided it's probably not
Bernhard Bauer
2015/10/20 10:37:15
Yes, I was thinking something like on every n-th c
Marc Treib
2015/10/20 11:53:50
No, we don't have any stats on the cache in partic
|
| } |
| // See if we already have a check in progress for this URL. |
| @@ -201,7 +211,7 @@ void SupervisedUserAsyncURLChecker::OnURLFetchComplete( |
| is_porn ? SupervisedUserURLFilter::BLOCK : SupervisedUserURLFilter::ALLOW; |
| UMA_HISTOGRAM_TIMES("ManagedUsers.SafeSitesDelay", |
| - base::Time::Now() - check->start_time); |
| + base::TimeTicks::Now() - check->start_time); |
| cache_.Put(check->url, CheckResult(behavior, uncertain)); |