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

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

Issue 586793003: Safebrowsing: Honor the metadata from malware fullhash results in SB API 3.0. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: changes for sky Created 6 years, 3 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/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 "chrome/browser/browser_process.h" 8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/prerender/prerender_contents.h" 9 #include "chrome/browser/prerender/prerender_contents.h"
10 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 10 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
11 #include "content/public/browser/browser_thread.h" 11 #include "content/public/browser/browser_thread.h"
12 #include "content/public/browser/render_view_host.h" 12 #include "content/public/browser/render_view_host.h"
13 #include "content/public/browser/resource_controller.h" 13 #include "content/public/browser/resource_controller.h"
14 #include "content/public/browser/resource_request_info.h" 14 #include "content/public/browser/resource_request_info.h"
15 #include "content/public/browser/web_contents.h" 15 #include "content/public/browser/web_contents.h"
16 #include "net/base/load_flags.h" 16 #include "net/base/load_flags.h"
17 #include "net/url_request/url_request.h" 17 #include "net/url_request/url_request.h"
18 18
19 // Maximum time in milliseconds to wait for the safe browsing service to 19 // Maximum time in milliseconds to wait for the safe browsing service to
20 // verify a URL. After this amount of time the outstanding check will be 20 // verify a URL. After this amount of time the outstanding check will be
21 // aborted, and the URL will be treated as if it were safe. 21 // aborted, and the URL will be treated as if it were safe.
22 static const int kCheckUrlTimeoutMs = 5000; 22 static const int kCheckUrlTimeoutMs = 5000;
23 23
24 // TODO(eroman): Downgrade these CHECK()s to DCHECKs once there is more 24 // TODO(eroman): Downgrade these CHECK()s to DCHECKs once there is more
25 // unit test coverage. 25 // unit test coverage.
26 26
27 SafeBrowsingResourceThrottle::SafeBrowsingResourceThrottle( 27 SafeBrowsingResourceThrottle::SafeBrowsingResourceThrottle(
28 const net::URLRequest* request, 28 const net::URLRequest* request,
29 bool is_subresource, 29 content::ResourceType resource_type,
30 SafeBrowsingService* safe_browsing) 30 SafeBrowsingService* safe_browsing)
31 : state_(STATE_NONE), 31 : state_(STATE_NONE),
32 defer_state_(DEFERRED_NONE), 32 defer_state_(DEFERRED_NONE),
33 threat_type_(SB_THREAT_TYPE_SAFE), 33 threat_type_(SB_THREAT_TYPE_SAFE),
34 database_manager_(safe_browsing->database_manager()), 34 database_manager_(safe_browsing->database_manager()),
35 ui_manager_(safe_browsing->ui_manager()), 35 ui_manager_(safe_browsing->ui_manager()),
36 request_(request), 36 request_(request),
37 is_subresource_(is_subresource) { 37 is_subresource_(resource_type != content::RESOURCE_TYPE_MAIN_FRAME),
38 is_subframe_(resource_type == content::RESOURCE_TYPE_SUB_FRAME) {
38 } 39 }
39 40
40 SafeBrowsingResourceThrottle::~SafeBrowsingResourceThrottle() { 41 SafeBrowsingResourceThrottle::~SafeBrowsingResourceThrottle() {
41 if (state_ == STATE_CHECKING_URL) 42 if (state_ == STATE_CHECKING_URL)
42 database_manager_->CancelCheck(this); 43 database_manager_->CancelCheck(this);
43 } 44 }
44 45
45 void SafeBrowsingResourceThrottle::WillStartRequest(bool* defer) { 46 void SafeBrowsingResourceThrottle::WillStartRequest(bool* defer) {
46 // We need to check the new URL before starting the request. 47 // We need to check the new URL before starting the request.
47 if (CheckUrl(request_->url())) 48 if (CheckUrl(request_->url()))
(...skipping 25 matching lines...) Expand all
73 *defer = true; 74 *defer = true;
74 } 75 }
75 76
76 const char* SafeBrowsingResourceThrottle::GetNameForLogging() const { 77 const char* SafeBrowsingResourceThrottle::GetNameForLogging() const {
77 return "SafeBrowsingResourceThrottle"; 78 return "SafeBrowsingResourceThrottle";
78 } 79 }
79 80
80 // SafeBrowsingService::Client implementation, called on the IO thread once 81 // SafeBrowsingService::Client implementation, called on the IO thread once
81 // the URL has been classified. 82 // the URL has been classified.
82 void SafeBrowsingResourceThrottle::OnCheckBrowseUrlResult( 83 void SafeBrowsingResourceThrottle::OnCheckBrowseUrlResult(
83 const GURL& url, SBThreatType threat_type) { 84 const GURL& url,
85 SBThreatType threat_type,
86 const std::string& metadata) {
84 CHECK(state_ == STATE_CHECKING_URL); 87 CHECK(state_ == STATE_CHECKING_URL);
85 CHECK(defer_state_ != DEFERRED_NONE); 88 CHECK(defer_state_ != DEFERRED_NONE);
86 CHECK(url == url_being_checked_) << "Was expecting: " << url_being_checked_ 89 CHECK(url == url_being_checked_) << "Was expecting: " << url_being_checked_
87 << " but got: " << url; 90 << " but got: " << url;
88 91
89 #if defined(OS_ANDROID) 92 #if defined(OS_ANDROID)
90 // Temporarily disable SB interstitial during Finch experiment. 93 // Temporarily disable SB interstitial during Finch experiment.
91 // The database check is still exercised, but the interstitial never shown. 94 // The database check is still exercised, but the interstitial never shown.
92 threat_type = SB_THREAT_TYPE_SAFE; 95 threat_type = SB_THREAT_TYPE_SAFE;
93 #endif 96 #endif
(...skipping 19 matching lines...) Expand all
113 } 116 }
114 117
115 const content::ResourceRequestInfo* info = 118 const content::ResourceRequestInfo* info =
116 content::ResourceRequestInfo::ForRequest(request_); 119 content::ResourceRequestInfo::ForRequest(request_);
117 120
118 SafeBrowsingUIManager::UnsafeResource resource; 121 SafeBrowsingUIManager::UnsafeResource resource;
119 resource.url = url; 122 resource.url = url;
120 resource.original_url = request_->original_url(); 123 resource.original_url = request_->original_url();
121 resource.redirect_urls = redirect_urls_; 124 resource.redirect_urls = redirect_urls_;
122 resource.is_subresource = is_subresource_; 125 resource.is_subresource = is_subresource_;
126 resource.is_subframe = is_subframe_;
123 resource.threat_type = threat_type; 127 resource.threat_type = threat_type;
128 resource.threat_metadata = metadata;
124 resource.callback = base::Bind( 129 resource.callback = base::Bind(
125 &SafeBrowsingResourceThrottle::OnBlockingPageComplete, AsWeakPtr()); 130 &SafeBrowsingResourceThrottle::OnBlockingPageComplete, AsWeakPtr());
126 resource.render_process_host_id = info->GetChildID(); 131 resource.render_process_host_id = info->GetChildID();
127 resource.render_view_id = info->GetRouteID(); 132 resource.render_view_id = info->GetRouteID();
128 133
129 state_ = STATE_DISPLAYING_BLOCKING_PAGE; 134 state_ = STATE_DISPLAYING_BLOCKING_PAGE;
130 135
131 content::BrowserThread::PostTask( 136 content::BrowserThread::PostTask(
132 content::BrowserThread::UI, 137 content::BrowserThread::UI,
133 FROM_HERE, 138 FROM_HERE,
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 this, &SafeBrowsingResourceThrottle::OnCheckUrlTimeout); 211 this, &SafeBrowsingResourceThrottle::OnCheckUrlTimeout);
207 212
208 return false; 213 return false;
209 } 214 }
210 215
211 void SafeBrowsingResourceThrottle::OnCheckUrlTimeout() { 216 void SafeBrowsingResourceThrottle::OnCheckUrlTimeout() {
212 CHECK(state_ == STATE_CHECKING_URL); 217 CHECK(state_ == STATE_CHECKING_URL);
213 CHECK(defer_state_ != DEFERRED_NONE); 218 CHECK(defer_state_ != DEFERRED_NONE);
214 219
215 database_manager_->CancelCheck(this); 220 database_manager_->CancelCheck(this);
216 OnCheckBrowseUrlResult(url_being_checked_, SB_THREAT_TYPE_SAFE); 221 OnCheckBrowseUrlResult(
222 url_being_checked_, SB_THREAT_TYPE_SAFE, std::string());
217 } 223 }
218 224
219 void SafeBrowsingResourceThrottle::ResumeRequest() { 225 void SafeBrowsingResourceThrottle::ResumeRequest() {
220 CHECK(state_ == STATE_NONE); 226 CHECK(state_ == STATE_NONE);
221 CHECK(defer_state_ != DEFERRED_NONE); 227 CHECK(defer_state_ != DEFERRED_NONE);
222 228
223 defer_state_ = DEFERRED_NONE; 229 defer_state_ = DEFERRED_NONE;
224 controller()->Resume(); 230 controller()->Resume();
225 } 231 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698