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

Unified Diff: chrome/browser/safe_browsing/browser_feature_extractor.cc

Issue 42553002: Mostly integrate new malware IP blacklist with the csd client. When (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/safe_browsing/browser_feature_extractor.cc
diff --git a/chrome/browser/safe_browsing/browser_feature_extractor.cc b/chrome/browser/safe_browsing/browser_feature_extractor.cc
index 29e70336f998fb1e83251d79f797594e49c23d47..53ab8eb7224f781261369ee1388581dd9811c58b 100644
--- a/chrome/browser/safe_browsing/browser_feature_extractor.cc
+++ b/chrome/browser/safe_browsing/browser_feature_extractor.cc
@@ -19,7 +19,7 @@
#include "chrome/browser/history/history_types.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/safe_browsing/browser_features.h"
-#include "chrome/browser/safe_browsing/client_side_detection_service.h"
+#include "chrome/browser/safe_browsing/client_side_detection_host.h"
#include "chrome/common/safe_browsing/csd.pb.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/navigation_controller.h"
@@ -132,9 +132,9 @@ static void AddNavigationFeatures(
BrowserFeatureExtractor::BrowserFeatureExtractor(
WebContents* tab,
- ClientSideDetectionService* service)
+ ClientSideDetectionHost* host)
: tab_(tab),
- service_(service),
+ host_(host),
weak_factory_(this) {
DCHECK(tab);
}
@@ -230,42 +230,71 @@ void BrowserFeatureExtractor::ExtractFeatures(const BrowseInfo* info,
}
void BrowserFeatureExtractor::ExtractMalwareFeatures(
- const BrowseInfo* info,
- ClientMalwareRequest* request) {
+ const BrowseInfo& info,
+ ClientMalwareRequest* request,
+ const MalwareDoneCallback& callback) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK(request);
- DCHECK(info);
DCHECK_EQ(0U, request->url().find("http:"));
+ DCHECK(!callback.is_null());
+ if (callback.is_null()) {
+ DLOG(ERROR) << "ExtractMalwareFeatures called without a callback object";
+ return;
mattm 2013/10/25 06:28:12 I think remove this, the DCHECK should be fine. Ch
noé 2013/10/28 23:39:26 Done.
mattm 2013/10/29 01:11:47 It looks like you removed the one from the other m
noé 2013/10/31 02:41:12 Removed it in both cases now :).
+ }
+ // Copy the IPs because they might go away before we're done
+ // checking them against the IP blacklist on the IO thread.
+ scoped_ptr<IPUrlMap> ips(new IPUrlMap(info.ips.begin(),
+ info.ips.end()));
mattm 2013/10/25 06:28:12 If the ips map isn't used by any other functions,
noé 2013/10/28 23:39:26 Done.
+
+ // IP blacklist lookups have to happen on the IO thread.
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&BrowserFeatureExtractor::StartExtractMalwareFeatures,
+ weak_factory_.GetWeakPtr(),
mattm 2013/10/25 06:28:12 weakptrs shouldn't be de-referenced on a different
noé 2013/10/28 23:39:26 Thank you very much for providing that example. T
+ base::Passed(&ips), request, callback));
+}
+
+static void CallMalwareCallback(
mattm 2013/10/25 06:28:12 Chromium style is to use anonymous namespaces rath
noé 2013/10/28 23:39:26 Done.
+ const BrowserFeatureExtractor::MalwareDoneCallback& callback,
+ bool success,
+ ClientMalwareRequest* request) {
+ callback.Run(success, request);
+}
+
+void BrowserFeatureExtractor::StartExtractMalwareFeatures(
mattm 2013/10/25 06:28:12 Maybe name ExtractMalwareFeaturesOnIOThread?
noé 2013/10/28 23:39:26 Done.
+ scoped_ptr<IPUrlMap> ips,
+ ClientMalwareRequest* request,
+ const MalwareDoneCallback& callback) {
// get the IPs and urls that match the malware blacklisted IP list.
- if (service_) {
- int matched_bad_ips = 0;
- for (IPUrlMap::const_iterator it = info->ips.begin();
- it != info->ips.end(); ++it) {
- if (service_->IsBadIpAddress(it->first)) {
- AddMalwareFeature(features::kBadIpFetch + it->first,
- it->second, 1.0, request);
- ++matched_bad_ips;
- // Limit the number of matched bad IPs in one request to control
- // the request's size
- if (matched_bad_ips >= kMaxMalwareIPPerRequest) {
- return;
- }
+ if (!host_) {
+ callback.Run(false, request);
+ return;
+ }
+ int matched_bad_ips = 0;
+ for (IPUrlMap::const_iterator it = ips->begin();
+ it != ips->end(); ++it) {
+ if (host_->IsBadIpAddress(it->first)) {
+ AddMalwareFeature(features::kBadIpFetch + it->first,
+ it->second, 1.0, request);
mattm 2013/10/25 06:28:12 I don't think AddMalwareFeature is threadsafe?
noé 2013/10/28 23:39:26 Can you elaborate why you think it is not thread s
mattm 2013/10/29 01:11:47 Oh, you're right. I missed that the request object
noé 2013/10/31 02:41:12 Done.
+ ++matched_bad_ips;
+ // Limit the number of matched bad IPs in one request to control
+ // the request's size
+ if (matched_bad_ips >= kMaxMalwareIPPerRequest) {
+ break;
}
}
}
+ // We guanteed to the client of this API that the callback was going to
+ // be called on the UI thread.
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&CallMalwareCallback, callback, true, request));
mattm 2013/10/25 06:28:12 You can just do base::Bind(callback, true, request
noé 2013/10/28 23:39:26 Neat!
}
void BrowserFeatureExtractor::ExtractBrowseInfoFeatures(
const BrowseInfo& info,
ClientPhishingRequest* request) {
- if (service_) {
- for (IPUrlMap::const_iterator it = info.ips.begin();
- it != info.ips.end(); ++it) {
- if (service_->IsBadIpAddress(it->first)) {
- AddFeature(features::kBadIpFetch + it->first, 1.0, request);
mattm 2013/10/25 06:28:12 This doesn't exist in the new version, intentional
noé 2013/10/28 23:39:26 Good catch :-). Yes, this is intentional. We don
- }
- }
- }
if (info.unsafe_resource.get()) {
// A SafeBrowsing interstitial was shown for the current URL.
AddFeature(features::kSafeBrowsingMaliciousUrl +

Powered by Google App Engine
This is Rietveld 408576698