| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/safe_browsing_db/remote_database_manager.h" | 5 #include "components/safe_browsing_db/remote_database_manager.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/metrics/histogram_macros.h" | 9 #include "base/metrics/histogram_macros.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 // RemoteSafeBrowsingDatabaseManager::ClientRequest methods | 35 // RemoteSafeBrowsingDatabaseManager::ClientRequest methods |
| 36 // | 36 // |
| 37 class RemoteSafeBrowsingDatabaseManager::ClientRequest { | 37 class RemoteSafeBrowsingDatabaseManager::ClientRequest { |
| 38 public: | 38 public: |
| 39 ClientRequest(Client* client, | 39 ClientRequest(Client* client, |
| 40 RemoteSafeBrowsingDatabaseManager* db_manager, | 40 RemoteSafeBrowsingDatabaseManager* db_manager, |
| 41 const GURL& url); | 41 const GURL& url); |
| 42 | 42 |
| 43 static void OnRequestDoneWeak(const base::WeakPtr<ClientRequest>& req, | 43 static void OnRequestDoneWeak(const base::WeakPtr<ClientRequest>& req, |
| 44 SBThreatType matched_threat_type, | 44 SBThreatType matched_threat_type, |
| 45 const std::string& metadata); | 45 const ThreatMetadata& metadata); |
| 46 void OnRequestDone(SBThreatType matched_threat_type, | 46 void OnRequestDone(SBThreatType matched_threat_type, |
| 47 const std::string& metadata); | 47 const ThreatMetadata& metadata); |
| 48 | 48 |
| 49 // Accessors | 49 // Accessors |
| 50 Client* client() const { return client_; } | 50 Client* client() const { return client_; } |
| 51 const GURL& url() const { return url_; } | 51 const GURL& url() const { return url_; } |
| 52 base::WeakPtr<ClientRequest> GetWeakPtr() { | 52 base::WeakPtr<ClientRequest> GetWeakPtr() { |
| 53 return weak_factory_.GetWeakPtr(); | 53 return weak_factory_.GetWeakPtr(); |
| 54 } | 54 } |
| 55 | 55 |
| 56 private: | 56 private: |
| 57 Client* client_; | 57 Client* client_; |
| 58 RemoteSafeBrowsingDatabaseManager* db_manager_; | 58 RemoteSafeBrowsingDatabaseManager* db_manager_; |
| 59 GURL url_; | 59 GURL url_; |
| 60 base::ElapsedTimer timer_; | 60 base::ElapsedTimer timer_; |
| 61 base::WeakPtrFactory<ClientRequest> weak_factory_; | 61 base::WeakPtrFactory<ClientRequest> weak_factory_; |
| 62 }; | 62 }; |
| 63 | 63 |
| 64 RemoteSafeBrowsingDatabaseManager::ClientRequest::ClientRequest( | 64 RemoteSafeBrowsingDatabaseManager::ClientRequest::ClientRequest( |
| 65 Client* client, | 65 Client* client, |
| 66 RemoteSafeBrowsingDatabaseManager* db_manager, | 66 RemoteSafeBrowsingDatabaseManager* db_manager, |
| 67 const GURL& url) | 67 const GURL& url) |
| 68 : client_(client), | 68 : client_(client), |
| 69 db_manager_(db_manager), | 69 db_manager_(db_manager), |
| 70 url_(url), | 70 url_(url), |
| 71 weak_factory_(this) {} | 71 weak_factory_(this) {} |
| 72 | 72 |
| 73 // Static | 73 // Static |
| 74 void RemoteSafeBrowsingDatabaseManager::ClientRequest::OnRequestDoneWeak( | 74 void RemoteSafeBrowsingDatabaseManager::ClientRequest::OnRequestDoneWeak( |
| 75 const base::WeakPtr<ClientRequest>& req, | 75 const base::WeakPtr<ClientRequest>& req, |
| 76 SBThreatType matched_threat_type, | 76 SBThreatType matched_threat_type, |
| 77 const std::string& metadata) { | 77 const ThreatMetadata& metadata) { |
| 78 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 78 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 79 if (!req) | 79 if (!req) |
| 80 return; // Previously canceled | 80 return; // Previously canceled |
| 81 req->OnRequestDone(matched_threat_type, metadata); | 81 req->OnRequestDone(matched_threat_type, metadata); |
| 82 } | 82 } |
| 83 | 83 |
| 84 void RemoteSafeBrowsingDatabaseManager::ClientRequest::OnRequestDone( | 84 void RemoteSafeBrowsingDatabaseManager::ClientRequest::OnRequestDone( |
| 85 SBThreatType matched_threat_type, | 85 SBThreatType matched_threat_type, |
| 86 const std::string& metadata) { | 86 const ThreatMetadata& metadata) { |
| 87 DVLOG(1) << "OnRequestDone took " << timer_.Elapsed().InMilliseconds() | 87 DVLOG(1) << "OnRequestDone took " << timer_.Elapsed().InMilliseconds() |
| 88 << " ms for client " << client_ << " and URL " << url_; | 88 << " ms for client " << client_ << " and URL " << url_; |
| 89 client_->OnCheckBrowseUrlResult(url_, matched_threat_type, metadata); | 89 client_->OnCheckBrowseUrlResult(url_, matched_threat_type, metadata); |
| 90 UMA_HISTOGRAM_TIMES("SB2.RemoteCall.Elapsed", timer_.Elapsed()); | 90 UMA_HISTOGRAM_TIMES("SB2.RemoteCall.Elapsed", timer_.Elapsed()); |
| 91 // CancelCheck() will delete *this. | 91 // CancelCheck() will delete *this. |
| 92 db_manager_->CancelCheck(client_); | 92 db_manager_->CancelCheck(client_); |
| 93 } | 93 } |
| 94 | 94 |
| 95 // | 95 // |
| 96 // RemoteSafeBrowsingDatabaseManager methods | 96 // RemoteSafeBrowsingDatabaseManager methods |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 UMA_HISTOGRAM_BOOLEAN("SB2.RemoteCall.CanCheckUrl", can_check_url); | 244 UMA_HISTOGRAM_BOOLEAN("SB2.RemoteCall.CanCheckUrl", can_check_url); |
| 245 if (!can_check_url) | 245 if (!can_check_url) |
| 246 return true; // Safe, continue right away. | 246 return true; // Safe, continue right away. |
| 247 | 247 |
| 248 scoped_ptr<ClientRequest> req(new ClientRequest(client, this, url)); | 248 scoped_ptr<ClientRequest> req(new ClientRequest(client, this, url)); |
| 249 std::vector<SBThreatType> threat_types; // Not currently used. | 249 std::vector<SBThreatType> threat_types; // Not currently used. |
| 250 | 250 |
| 251 DVLOG(1) << "Checking for client " << client << " and URL " << url; | 251 DVLOG(1) << "Checking for client " << client << " and URL " << url; |
| 252 SafeBrowsingApiHandler* api_handler = SafeBrowsingApiHandler::GetInstance(); | 252 SafeBrowsingApiHandler* api_handler = SafeBrowsingApiHandler::GetInstance(); |
| 253 // This shouldn't happen since SafeBrowsingResourceThrottle checks | 253 // This shouldn't happen since SafeBrowsingResourceThrottle checks |
| 254 // IsSupported() ealier. | 254 // IsSupported() earlier. |
| 255 DCHECK(api_handler) << "SafeBrowsingApiHandler was never constructed"; | 255 DCHECK(api_handler) << "SafeBrowsingApiHandler was never constructed"; |
| 256 api_handler->StartURLCheck( | 256 api_handler->StartURLCheck( |
| 257 base::Bind(&ClientRequest::OnRequestDoneWeak, req->GetWeakPtr()), url, | 257 base::Bind(&ClientRequest::OnRequestDoneWeak, req->GetWeakPtr()), url, |
| 258 threat_types); | 258 threat_types); |
| 259 | 259 |
| 260 UMA_HISTOGRAM_COUNTS_10000("SB2.RemoteCall.ChecksPending", | 260 UMA_HISTOGRAM_COUNTS_10000("SB2.RemoteCall.ChecksPending", |
| 261 current_requests_.size()); | 261 current_requests_.size()); |
| 262 current_requests_.push_back(req.release()); | 262 current_requests_.push_back(req.release()); |
| 263 | 263 |
| 264 // Defer the resource load. | 264 // Defer the resource load. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 291 void RemoteSafeBrowsingDatabaseManager::StopOnIOThread(bool shutdown) { | 291 void RemoteSafeBrowsingDatabaseManager::StopOnIOThread(bool shutdown) { |
| 292 // |shutdown| is not used. | 292 // |shutdown| is not used. |
| 293 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 293 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 294 DVLOG(1) << "RemoteSafeBrowsingDatabaseManager stopping"; | 294 DVLOG(1) << "RemoteSafeBrowsingDatabaseManager stopping"; |
| 295 | 295 |
| 296 // Call back and delete any remaining clients. OnRequestDone() modifies | 296 // Call back and delete any remaining clients. OnRequestDone() modifies |
| 297 // |current_requests_|, so we make a copy first. | 297 // |current_requests_|, so we make a copy first. |
| 298 std::vector<ClientRequest*> to_callback(current_requests_); | 298 std::vector<ClientRequest*> to_callback(current_requests_); |
| 299 for (auto req : to_callback) { | 299 for (auto req : to_callback) { |
| 300 DVLOG(1) << "Stopping: Invoking unfinished req for URL " << req->url(); | 300 DVLOG(1) << "Stopping: Invoking unfinished req for URL " << req->url(); |
| 301 req->OnRequestDone(SB_THREAT_TYPE_SAFE, std::string()); | 301 req->OnRequestDone(SB_THREAT_TYPE_SAFE, ThreatMetadata()); |
| 302 } | 302 } |
| 303 enabled_ = false; | 303 enabled_ = false; |
| 304 | 304 |
| 305 SafeBrowsingDatabaseManager::StopOnIOThread(shutdown); | 305 SafeBrowsingDatabaseManager::StopOnIOThread(shutdown); |
| 306 } | 306 } |
| 307 | 307 |
| 308 } // namespace safe_browsing | 308 } // namespace safe_browsing |
| OLD | NEW |