| 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/safe_browsing/browser_feature_extractor.h" | 5 #include "chrome/browser/safe_browsing/browser_feature_extractor.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 request); | 238 request); |
| 239 } | 239 } |
| 240 | 240 |
| 241 // The API doesn't take a std::unique_ptr because the API gets mocked and we | 241 // The API doesn't take a std::unique_ptr because the API gets mocked and we |
| 242 // cannot mock an API that takes std::unique_ptr as arguments. | 242 // cannot mock an API that takes std::unique_ptr as arguments. |
| 243 std::unique_ptr<ClientPhishingRequest> req(request); | 243 std::unique_ptr<ClientPhishingRequest> req(request); |
| 244 | 244 |
| 245 ExtractBrowseInfoFeatures(*info, request); | 245 ExtractBrowseInfoFeatures(*info, request); |
| 246 base::ThreadTaskRunnerHandle::Get()->PostTask( | 246 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 247 FROM_HERE, | 247 FROM_HERE, |
| 248 base::Bind(&BrowserFeatureExtractor::StartExtractFeatures, | 248 base::BindOnce(&BrowserFeatureExtractor::StartExtractFeatures, |
| 249 weak_factory_.GetWeakPtr(), base::Passed(&req), callback)); | 249 weak_factory_.GetWeakPtr(), base::Passed(&req), callback)); |
| 250 } | 250 } |
| 251 | 251 |
| 252 void BrowserFeatureExtractor::ExtractMalwareFeatures( | 252 void BrowserFeatureExtractor::ExtractMalwareFeatures( |
| 253 BrowseInfo* info, | 253 BrowseInfo* info, |
| 254 ClientMalwareRequest* request, | 254 ClientMalwareRequest* request, |
| 255 const MalwareDoneCallback& callback) { | 255 const MalwareDoneCallback& callback) { |
| 256 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 256 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 257 DCHECK(!callback.is_null()); | 257 DCHECK(!callback.is_null()); |
| 258 | 258 |
| 259 // Grab the IPs because they might go away before we're done | 259 // Grab the IPs because they might go away before we're done |
| 260 // checking them against the IP blacklist on the IO thread. | 260 // checking them against the IP blacklist on the IO thread. |
| 261 std::unique_ptr<IPUrlMap> ips(new IPUrlMap); | 261 std::unique_ptr<IPUrlMap> ips(new IPUrlMap); |
| 262 ips->swap(info->ips); | 262 ips->swap(info->ips); |
| 263 | 263 |
| 264 IPUrlMap* ips_ptr = ips.get(); | 264 IPUrlMap* ips_ptr = ips.get(); |
| 265 | 265 |
| 266 // The API doesn't take a std::unique_ptr because the API gets mocked and we | 266 // The API doesn't take a std::unique_ptr because the API gets mocked and we |
| 267 // cannot mock an API that takes std::unique_ptr as arguments. | 267 // cannot mock an API that takes std::unique_ptr as arguments. |
| 268 std::unique_ptr<ClientMalwareRequest> req(request); | 268 std::unique_ptr<ClientMalwareRequest> req(request); |
| 269 | 269 |
| 270 // IP blacklist lookups have to happen on the IO thread. | 270 // IP blacklist lookups have to happen on the IO thread. |
| 271 BrowserThread::PostTaskAndReply( | 271 BrowserThread::PostTaskAndReply( |
| 272 BrowserThread::IO, | 272 BrowserThread::IO, FROM_HERE, |
| 273 FROM_HERE, | 273 base::BindOnce(&FilterBenignIpsOnIOThread, host_->database_manager(), |
| 274 base::Bind(&FilterBenignIpsOnIOThread, | 274 ips_ptr), |
| 275 host_->database_manager(), | 275 base::BindOnce(&BrowserFeatureExtractor::FinishExtractMalwareFeatures, |
| 276 ips_ptr), | 276 weak_factory_.GetWeakPtr(), base::Passed(&ips), callback, |
| 277 base::Bind(&BrowserFeatureExtractor::FinishExtractMalwareFeatures, | 277 base::Passed(&req))); |
| 278 weak_factory_.GetWeakPtr(), | |
| 279 base::Passed(&ips), callback, base::Passed(&req))); | |
| 280 } | 278 } |
| 281 | 279 |
| 282 void BrowserFeatureExtractor::ExtractBrowseInfoFeatures( | 280 void BrowserFeatureExtractor::ExtractBrowseInfoFeatures( |
| 283 const BrowseInfo& info, | 281 const BrowseInfo& info, |
| 284 ClientPhishingRequest* request) { | 282 ClientPhishingRequest* request) { |
| 285 if (info.unsafe_resource.get()) { | 283 if (info.unsafe_resource.get()) { |
| 286 // A SafeBrowsing interstitial was shown for the current URL. | 284 // A SafeBrowsing interstitial was shown for the current URL. |
| 287 AddFeature(features::kSafeBrowsingMaliciousUrl + | 285 AddFeature(features::kSafeBrowsingMaliciousUrl + |
| 288 info.unsafe_resource->url.spec(), | 286 info.unsafe_resource->url.spec(), |
| 289 1.0, | 287 1.0, |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 // Limit the number of matched bad IPs in one request to control | 485 // Limit the number of matched bad IPs in one request to control |
| 488 // the request's size | 486 // the request's size |
| 489 if (matched_bad_ips >= kMaxMalwareIPPerRequest) { | 487 if (matched_bad_ips >= kMaxMalwareIPPerRequest) { |
| 490 break; | 488 break; |
| 491 } | 489 } |
| 492 } | 490 } |
| 493 callback.Run(true, std::move(request)); | 491 callback.Run(true, std::move(request)); |
| 494 } | 492 } |
| 495 | 493 |
| 496 } // namespace safe_browsing | 494 } // namespace safe_browsing |
| OLD | NEW |