| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/renderer_host/safe_browsing_resource_throttle.h" | 5 #include "chrome/browser/renderer_host/safe_browsing_resource_throttle.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/metrics/histogram_macros.h" | 8 #include "base/metrics/histogram_macros.h" |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 using safe_browsing::SafeBrowsingUIManager; | 24 using safe_browsing::SafeBrowsingUIManager; |
| 25 | 25 |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 // Maximum time in milliseconds to wait for the safe browsing service to | 28 // Maximum time in milliseconds to wait for the safe browsing service to |
| 29 // verify a URL. After this amount of time the outstanding check will be | 29 // verify a URL. After this amount of time the outstanding check will be |
| 30 // aborted, and the URL will be treated as if it were safe. | 30 // aborted, and the URL will be treated as if it were safe. |
| 31 const int kCheckUrlTimeoutMs = 5000; | 31 const int kCheckUrlTimeoutMs = 5000; |
| 32 | 32 |
| 33 void RecordHistogramResourceTypeSafe(content::ResourceType resource_type) { | 33 void RecordHistogramResourceTypeSafe(content::ResourceType resource_type) { |
| 34 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes.Safe", resource_type, | 34 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes2.Safe", resource_type, |
| 35 content::RESOURCE_TYPE_LAST_TYPE); | 35 content::RESOURCE_TYPE_LAST_TYPE); |
| 36 } | 36 } |
| 37 | 37 |
| 38 // Return a dictionary with "url"=|url-spec| and optionally | 38 // Return a dictionary with "url"=|url-spec| and optionally |
| 39 // |name|=|value| (if not null), for netlogging. | 39 // |name|=|value| (if not null), for netlogging. |
| 40 // This will also add a reference to the original request's net_log ID. | 40 // This will also add a reference to the original request's net_log ID. |
| 41 scoped_ptr<base::Value> NetLogUrlCallback( | 41 scoped_ptr<base::Value> NetLogUrlCallback( |
| 42 const net::URLRequest* request, | 42 const net::URLRequest* request, |
| 43 const GURL& url, | 43 const GURL& url, |
| 44 const char* name, | 44 const char* name, |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 ResumeRequest(); | 226 ResumeRequest(); |
| 227 } else { | 227 } else { |
| 228 ui_manager_->LogPauseDelay(base::TimeDelta()); | 228 ui_manager_->LogPauseDelay(base::TimeDelta()); |
| 229 } | 229 } |
| 230 return; | 230 return; |
| 231 } | 231 } |
| 232 | 232 |
| 233 if (request_->load_flags() & net::LOAD_PREFETCH) { | 233 if (request_->load_flags() & net::LOAD_PREFETCH) { |
| 234 // Don't prefetch resources that fail safe browsing, disallow them. | 234 // Don't prefetch resources that fail safe browsing, disallow them. |
| 235 controller()->Cancel(); | 235 controller()->Cancel(); |
| 236 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes.UnsafePrefetchCanceled", | 236 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes2.UnsafePrefetchCanceled", |
| 237 resource_type_, content::RESOURCE_TYPE_LAST_TYPE); | 237 resource_type_, content::RESOURCE_TYPE_LAST_TYPE); |
| 238 return; | 238 return; |
| 239 } | 239 } |
| 240 | 240 |
| 241 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes.Unsafe", resource_type_, | 241 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes2.Unsafe", resource_type_, |
| 242 content::RESOURCE_TYPE_LAST_TYPE); | 242 content::RESOURCE_TYPE_LAST_TYPE); |
| 243 | 243 |
| 244 const content::ResourceRequestInfo* info = | 244 const content::ResourceRequestInfo* info = |
| 245 content::ResourceRequestInfo::ForRequest(request_); | 245 content::ResourceRequestInfo::ForRequest(request_); |
| 246 | 246 |
| 247 SafeBrowsingUIManager::UnsafeResource resource; | 247 SafeBrowsingUIManager::UnsafeResource resource; |
| 248 resource.url = url; | 248 resource.url = url; |
| 249 resource.original_url = request_->original_url(); | 249 resource.original_url = request_->original_url(); |
| 250 resource.redirect_urls = redirect_urls_; | 250 resource.redirect_urls = redirect_urls_; |
| 251 resource.is_subresource = resource_type_ != content::RESOURCE_TYPE_MAIN_FRAME; | 251 resource.is_subresource = resource_type_ != content::RESOURCE_TYPE_MAIN_FRAME; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 } else { | 316 } else { |
| 317 controller()->Cancel(); | 317 controller()->Cancel(); |
| 318 } | 318 } |
| 319 } | 319 } |
| 320 | 320 |
| 321 bool SafeBrowsingResourceThrottle::CheckUrl(const GURL& url) { | 321 bool SafeBrowsingResourceThrottle::CheckUrl(const GURL& url) { |
| 322 CHECK_EQ(state_, STATE_NONE); | 322 CHECK_EQ(state_, STATE_NONE); |
| 323 // To reduce aggregate latency on mobile, check only the most dangerous | 323 // To reduce aggregate latency on mobile, check only the most dangerous |
| 324 // resource types. | 324 // resource types. |
| 325 if (!database_manager_->CanCheckResourceType(resource_type_)) { | 325 if (!database_manager_->CanCheckResourceType(resource_type_)) { |
| 326 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes.Skipped", resource_type_, | 326 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes2.Skipped", resource_type_, |
| 327 content::RESOURCE_TYPE_LAST_TYPE); | 327 content::RESOURCE_TYPE_LAST_TYPE); |
| 328 return true; | 328 return true; |
| 329 } | 329 } |
| 330 | 330 |
| 331 bool succeeded_synchronously = database_manager_->CheckBrowseUrl(url, this); | 331 bool succeeded_synchronously = database_manager_->CheckBrowseUrl(url, this); |
| 332 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes.Checked", resource_type_, | 332 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes2.Checked", resource_type_, |
| 333 content::RESOURCE_TYPE_LAST_TYPE); | 333 content::RESOURCE_TYPE_LAST_TYPE); |
| 334 | 334 |
| 335 if (succeeded_synchronously) { | 335 if (succeeded_synchronously) { |
| 336 RecordHistogramResourceTypeSafe(resource_type_); | 336 RecordHistogramResourceTypeSafe(resource_type_); |
| 337 threat_type_ = safe_browsing::SB_THREAT_TYPE_SAFE; | 337 threat_type_ = safe_browsing::SB_THREAT_TYPE_SAFE; |
| 338 ui_manager_->LogPauseDelay(base::TimeDelta()); // No delay. | 338 ui_manager_->LogPauseDelay(base::TimeDelta()); // No delay. |
| 339 return true; | 339 return true; |
| 340 } | 340 } |
| 341 | 341 |
| 342 state_ = STATE_CHECKING_URL; | 342 state_ = STATE_CHECKING_URL; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 unchecked_redirect_url_, "defer_reason", | 378 unchecked_redirect_url_, "defer_reason", |
| 379 "resumed_redirect"); | 379 "resumed_redirect"); |
| 380 } | 380 } |
| 381 } | 381 } |
| 382 | 382 |
| 383 if (resume) { | 383 if (resume) { |
| 384 defer_state_ = DEFERRED_NONE; | 384 defer_state_ = DEFERRED_NONE; |
| 385 controller()->Resume(); | 385 controller()->Resume(); |
| 386 } | 386 } |
| 387 } | 387 } |
| OLD | NEW |