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

Side by Side Diff: chrome/browser/loader/safe_browsing_resource_throttle.cc

Issue 2377273004: Reland: Start checking URLs using PVer4. Verdict not returned to client yet. (Closed)
Patch Set: Remove #DEBUG -- it enables these features on Android :-( Created 4 years, 2 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
OLDNEW
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/loader/safe_browsing_resource_throttle.h" 5 #include "chrome/browser/loader/safe_browsing_resource_throttle.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/metrics/histogram_macros.h" 11 #include "base/metrics/histogram_macros.h"
12 #include "base/trace_event/trace_event.h" 12 #include "base/trace_event/trace_event.h"
13 #include "base/values.h" 13 #include "base/values.h"
14 #include "chrome/browser/browser_process.h" 14 #include "chrome/browser/browser_process.h"
15 #include "chrome/browser/prerender/prerender_contents.h" 15 #include "chrome/browser/prerender/prerender_contents.h"
16 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 16 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
17 #include "components/safe_browsing_db/util.h" 17 #include "components/safe_browsing_db/util.h"
18 #include "components/safe_browsing_db/v4_feature_list.h"
19 #include "components/safe_browsing_db/v4_local_database_manager.h"
18 #include "components/subresource_filter/content/browser/content_subresource_filt er_driver_factory.h" 20 #include "components/subresource_filter/content/browser/content_subresource_filt er_driver_factory.h"
19 #include "content/public/browser/browser_thread.h" 21 #include "content/public/browser/browser_thread.h"
20 #include "content/public/browser/render_frame_host.h" 22 #include "content/public/browser/render_frame_host.h"
21 #include "content/public/browser/resource_controller.h" 23 #include "content/public/browser/resource_controller.h"
22 #include "content/public/browser/resource_request_info.h" 24 #include "content/public/browser/resource_request_info.h"
23 #include "content/public/browser/web_contents.h" 25 #include "content/public/browser/web_contents.h"
24 #include "net/base/load_flags.h" 26 #include "net/base/load_flags.h"
25 #include "net/log/net_log.h" 27 #include "net/log/net_log.h"
26 #include "net/log/net_log_source_type.h" 28 #include "net/log/net_log_source_type.h"
27 #include "net/url_request/redirect_info.h" 29 #include "net/url_request/redirect_info.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 safe_browsing::SafeBrowsingService* sb_service) 91 safe_browsing::SafeBrowsingService* sb_service)
90 : state_(STATE_NONE), 92 : state_(STATE_NONE),
91 defer_state_(DEFERRED_NONE), 93 defer_state_(DEFERRED_NONE),
92 threat_type_(safe_browsing::SB_THREAT_TYPE_SAFE), 94 threat_type_(safe_browsing::SB_THREAT_TYPE_SAFE),
93 database_manager_(sb_service->database_manager()), 95 database_manager_(sb_service->database_manager()),
94 ui_manager_(sb_service->ui_manager()), 96 ui_manager_(sb_service->ui_manager()),
95 request_(request), 97 request_(request),
96 resource_type_(resource_type), 98 resource_type_(resource_type),
97 net_log_with_source_( 99 net_log_with_source_(
98 net::NetLogWithSource::Make(request->net_log().net_log(), 100 net::NetLogWithSource::Make(request->net_log().net_log(),
99 NetLogSourceType::SAFE_BROWSING)) {} 101 NetLogSourceType::SAFE_BROWSING)),
102 v4_local_database_manager_(sb_service->v4_local_database_manager()) {}
100 103
101 SafeBrowsingResourceThrottle::~SafeBrowsingResourceThrottle() { 104 SafeBrowsingResourceThrottle::~SafeBrowsingResourceThrottle() {
102 if (defer_state_ != DEFERRED_NONE) { 105 if (defer_state_ != DEFERRED_NONE) {
103 EndNetLogEvent(NetLogEventType::SAFE_BROWSING_DEFERRED, nullptr, nullptr); 106 EndNetLogEvent(NetLogEventType::SAFE_BROWSING_DEFERRED, nullptr, nullptr);
104 } 107 }
105 108
106 if (state_ == STATE_CHECKING_URL) { 109 if (state_ == STATE_CHECKING_URL) {
107 database_manager_->CancelCheck(this); 110 database_manager_->CancelCheck(this);
111 if (safe_browsing::V4FeatureList::IsParallelCheckEnabled()) {
112 v4_local_database_manager_->CancelCheck(this);
113 }
114
108 EndNetLogEvent(NetLogEventType::SAFE_BROWSING_CHECKING_URL, "result", 115 EndNetLogEvent(NetLogEventType::SAFE_BROWSING_CHECKING_URL, "result",
109 "request_canceled"); 116 "request_canceled");
110 } 117 }
111 } 118 }
112 119
113 // Note on net_log calls: SAFE_BROWSING_DEFERRED events must be wholly 120 // Note on net_log calls: SAFE_BROWSING_DEFERRED events must be wholly
114 // nested within SAFE_BROWSING_CHECKING_URL events. Synchronous checks 121 // nested within SAFE_BROWSING_CHECKING_URL events. Synchronous checks
115 // are not logged at all. 122 // are not logged at all.
116 void SafeBrowsingResourceThrottle::BeginNetLogEvent(NetLogEventType type, 123 void SafeBrowsingResourceThrottle::BeginNetLogEvent(NetLogEventType type,
117 const GURL& url, 124 const GURL& url,
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 if (!database_manager_->CanCheckResourceType(resource_type_)) { 373 if (!database_manager_->CanCheckResourceType(resource_type_)) {
367 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes2.Skipped", resource_type_, 374 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes2.Skipped", resource_type_,
368 content::RESOURCE_TYPE_LAST_TYPE); 375 content::RESOURCE_TYPE_LAST_TYPE);
369 return true; 376 return true;
370 } 377 }
371 378
372 bool succeeded_synchronously = database_manager_->CheckBrowseUrl(url, this); 379 bool succeeded_synchronously = database_manager_->CheckBrowseUrl(url, this);
373 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes2.Checked", resource_type_, 380 UMA_HISTOGRAM_ENUMERATION("SB2.ResourceTypes2.Checked", resource_type_,
374 content::RESOURCE_TYPE_LAST_TYPE); 381 content::RESOURCE_TYPE_LAST_TYPE);
375 382
383 if (safe_browsing::V4FeatureList::IsParallelCheckEnabled() &&
384 v4_local_database_manager_->CanCheckResourceType(resource_type_)) {
385 v4_local_database_manager_->CheckBrowseUrl(url, this);
386 }
387
376 if (succeeded_synchronously) { 388 if (succeeded_synchronously) {
377 threat_type_ = safe_browsing::SB_THREAT_TYPE_SAFE; 389 threat_type_ = safe_browsing::SB_THREAT_TYPE_SAFE;
378 ui_manager_->LogPauseDelay(base::TimeDelta()); // No delay. 390 ui_manager_->LogPauseDelay(base::TimeDelta()); // No delay.
379 return true; 391 return true;
380 } 392 }
381 393
382 state_ = STATE_CHECKING_URL; 394 state_ = STATE_CHECKING_URL;
383 url_being_checked_ = url; 395 url_being_checked_ = url;
384 BeginNetLogEvent(NetLogEventType::SAFE_BROWSING_CHECKING_URL, url, nullptr, 396 BeginNetLogEvent(NetLogEventType::SAFE_BROWSING_CHECKING_URL, url, nullptr,
385 nullptr); 397 nullptr);
386 398
387 // Start a timer to abort the check if it takes too long. 399 // Start a timer to abort the check if it takes too long.
388 // TODO(nparker): Set this only when we defer, based on remaining time, 400 // TODO(nparker): Set this only when we defer, based on remaining time,
389 // so we don't cancel earlier than necessary. 401 // so we don't cancel earlier than necessary.
390 timer_.Start(FROM_HERE, 402 timer_.Start(FROM_HERE,
391 base::TimeDelta::FromMilliseconds(kCheckUrlTimeoutMs), 403 base::TimeDelta::FromMilliseconds(kCheckUrlTimeoutMs),
392 this, &SafeBrowsingResourceThrottle::OnCheckUrlTimeout); 404 this, &SafeBrowsingResourceThrottle::OnCheckUrlTimeout);
393 405
394 return false; 406 return false;
395 } 407 }
396 408
397 void SafeBrowsingResourceThrottle::OnCheckUrlTimeout() { 409 void SafeBrowsingResourceThrottle::OnCheckUrlTimeout() {
398 CHECK_EQ(state_, STATE_CHECKING_URL); 410 CHECK_EQ(state_, STATE_CHECKING_URL);
399 411
400 database_manager_->CancelCheck(this); 412 database_manager_->CancelCheck(this);
413 if (safe_browsing::V4FeatureList::IsParallelCheckEnabled()) {
414 v4_local_database_manager_->CancelCheck(this);
415 }
401 OnCheckBrowseUrlResult(url_being_checked_, safe_browsing::SB_THREAT_TYPE_SAFE, 416 OnCheckBrowseUrlResult(url_being_checked_, safe_browsing::SB_THREAT_TYPE_SAFE,
402 safe_browsing::ThreatMetadata()); 417 safe_browsing::ThreatMetadata());
403 } 418 }
404 419
405 void SafeBrowsingResourceThrottle::ResumeRequest() { 420 void SafeBrowsingResourceThrottle::ResumeRequest() {
406 CHECK_EQ(state_, STATE_NONE); 421 CHECK_EQ(state_, STATE_NONE);
407 CHECK_NE(defer_state_, DEFERRED_NONE); 422 CHECK_NE(defer_state_, DEFERRED_NONE);
408 423
409 bool resume = true; 424 bool resume = true;
410 if (defer_state_ == DEFERRED_UNCHECKED_REDIRECT) { 425 if (defer_state_ == DEFERRED_UNCHECKED_REDIRECT) {
411 // Save the redirect urls for possible malware detail reporting later. 426 // Save the redirect urls for possible malware detail reporting later.
412 redirect_urls_.push_back(unchecked_redirect_url_); 427 redirect_urls_.push_back(unchecked_redirect_url_);
413 if (!CheckUrl(unchecked_redirect_url_)) { 428 if (!CheckUrl(unchecked_redirect_url_)) {
414 // We're now waiting for the unchecked_redirect_url_. 429 // We're now waiting for the unchecked_redirect_url_.
415 defer_state_ = DEFERRED_REDIRECT; 430 defer_state_ = DEFERRED_REDIRECT;
416 resume = false; 431 resume = false;
417 BeginNetLogEvent(NetLogEventType::SAFE_BROWSING_DEFERRED, 432 BeginNetLogEvent(NetLogEventType::SAFE_BROWSING_DEFERRED,
418 unchecked_redirect_url_, "defer_reason", 433 unchecked_redirect_url_, "defer_reason",
419 "resumed_redirect"); 434 "resumed_redirect");
420 } 435 }
421 } 436 }
422 437
423 if (resume) { 438 if (resume) {
424 defer_state_ = DEFERRED_NONE; 439 defer_state_ = DEFERRED_NONE;
425 controller()->Resume(); 440 controller()->Resume();
426 } 441 }
427 } 442 }
OLDNEW
« no previous file with comments | « chrome/browser/loader/safe_browsing_resource_throttle.h ('k') | chrome/browser/safe_browsing/safe_browsing_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698