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

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

Issue 1414343007: Collect threat details for phishing and UwS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit Created 5 years, 1 month 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/threat_details.cc
diff --git a/chrome/browser/safe_browsing/threat_details.cc b/chrome/browser/safe_browsing/threat_details.cc
index 50d956d93ebb5392b07ea616c6d2b29c56ae7b2d..f72f6d5ddfd6c2229b8e2700415db70b4222a3a8 100644
--- a/chrome/browser/safe_browsing/threat_details.cc
+++ b/chrome/browser/safe_browsing/threat_details.cc
@@ -2,14 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
-// Implementation of the MalwareDetails class.
+// Implementation of the ThreatDetails class.
#include "chrome/browser/safe_browsing/threat_details.h"
#include "base/bind.h"
#include "base/lazy_instance.h"
#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/safe_browsing/report.pb.h"
#include "chrome/browser/safe_browsing/threat_details_cache.h"
#include "chrome/browser/safe_browsing/threat_details_history.h"
#include "chrome/common/safe_browsing/safebrowsing_messages.h"
@@ -23,14 +22,40 @@
using content::BrowserThread;
using content::NavigationEntry;
using content::WebContents;
-using safe_browsing::ClientMalwareReportRequest;
+using safe_browsing::ClientSafeBrowsingReportRequest;
-// Keep in sync with KMaxNodes in renderer/safe_browsing/malware_dom_details
+// Keep in sync with KMaxNodes in renderer/safe_browsing/threat_dom_details
static const uint32 kMaxDomNodes = 500;
// static
ThreatDetailsFactory* ThreatDetails::factory_ = NULL;
+namespace {
+
+// Helper function that converts SBThreatType to
+// ClientSafeBrowsingReportRequest::ReportType.
+ClientSafeBrowsingReportRequest::ReportType GetReportTypeFromSBThreatType(
+ SBThreatType threat_type) {
+ switch (threat_type) {
+ case SB_THREAT_TYPE_URL_PHISHING:
+ return ClientSafeBrowsingReportRequest::URL_PHISHING;
+ case SB_THREAT_TYPE_URL_MALWARE:
+ return ClientSafeBrowsingReportRequest::URL_MALWARE;
+ case SB_THREAT_TYPE_URL_UNWANTED:
+ return ClientSafeBrowsingReportRequest::URL_UNWANTED;
+ case SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL:
+ return ClientSafeBrowsingReportRequest::CLIENT_SIDE_PHISHING_URL;
+ case SB_THREAT_TYPE_CLIENT_SIDE_MALWARE_URL:
+ return ClientSafeBrowsingReportRequest::CLIENT_SIDE_MALWARE_URL;
+ default: // Gated by SafeBrowsingBlockingPage::ShouldReportThreatDetails.
+ NOTREACHED() << "We should not send report for threat type "
+ << threat_type;
+ return ClientSafeBrowsingReportRequest::UNKNOWN;
+ }
+}
+
+} // namespace
+
// The default ThreatDetailsFactory. Global, made a singleton so we
// don't leak it.
class ThreatDetailsFactoryImpl : public ThreatDetailsFactory {
@@ -51,7 +76,7 @@ class ThreatDetailsFactoryImpl : public ThreatDetailsFactory {
};
static base::LazyInstance<ThreatDetailsFactoryImpl>
- g_malware_details_factory_impl = LAZY_INSTANCE_INITIALIZER;
+ g_threat_details_factory_impl = LAZY_INSTANCE_INITIALIZER;
// Create a ThreatDetails for the given tab.
/* static */
@@ -62,7 +87,7 @@ ThreatDetails* ThreatDetails::NewThreatDetails(
// Set up the factory if this has not been done already (tests do that
// before this method is called).
if (!factory_)
- factory_ = g_malware_details_factory_impl.Pointer();
+ factory_ = g_threat_details_factory_impl.Pointer();
return factory_->CreateThreatDetails(ui_manager, web_contents, resource);
}
@@ -86,7 +111,7 @@ ThreatDetails::~ThreatDetails() {}
bool ThreatDetails::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(ThreatDetails, message)
- IPC_MESSAGE_HANDLER(SafeBrowsingHostMsg_MalwareDOMDetails,
+ IPC_MESSAGE_HANDLER(SafeBrowsingHostMsg_ThreatDOMDetails,
OnReceivedThreatDOMDetails)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -102,7 +127,7 @@ bool ThreatDetails::IsReportableUrl(const GURL& url) const {
// updates |resource|. Otherwise, it creates a new message, adds it to
// resources_ and updates |resource| to point to it.
//
-ClientMalwareReportRequest::Resource* ThreatDetails::FindOrCreateResource(
+ClientSafeBrowsingReportRequest::Resource* ThreatDetails::FindOrCreateResource(
const GURL& url) {
safe_browsing::ResourceMap::iterator it = resources_.find(url.spec());
if (it != resources_.end())
@@ -110,8 +135,8 @@ ClientMalwareReportRequest::Resource* ThreatDetails::FindOrCreateResource(
// Create the resource for |url|.
int id = resources_.size();
- linked_ptr<ClientMalwareReportRequest::Resource> new_resource(
- new ClientMalwareReportRequest::Resource());
+ linked_ptr<ClientSafeBrowsingReportRequest::Resource> new_resource(
+ new ClientSafeBrowsingReportRequest::Resource());
new_resource->set_url(url.spec());
new_resource->set_id(id);
resources_[url.spec()] = new_resource;
@@ -126,13 +151,13 @@ void ThreatDetails::AddUrl(const GURL& url,
return;
// Find (or create) the resource for the url.
- ClientMalwareReportRequest::Resource* url_resource =
+ ClientSafeBrowsingReportRequest::Resource* url_resource =
FindOrCreateResource(url);
if (!tagname.empty())
url_resource->set_tag_name(tagname);
if (!parent.is_empty() && IsReportableUrl(parent)) {
// Add the resource for the parent.
- ClientMalwareReportRequest::Resource* parent_resource =
+ ClientSafeBrowsingReportRequest::Resource* parent_resource =
FindOrCreateResource(parent);
// Update the parent-child relation
url_resource->set_parent_id(parent_resource->id());
@@ -140,7 +165,7 @@ void ThreatDetails::AddUrl(const GURL& url,
if (children) {
for (std::vector<GURL>::const_iterator it = children->begin();
it != children->end(); ++it) {
- ClientMalwareReportRequest::Resource* child_resource =
+ ClientSafeBrowsingReportRequest::Resource* child_resource =
FindOrCreateResource(*it);
url_resource->add_child_ids(child_resource->id());
}
@@ -148,11 +173,13 @@ void ThreatDetails::AddUrl(const GURL& url,
}
void ThreatDetails::StartCollection() {
- DVLOG(1) << "Starting to compute malware details.";
- report_.reset(new ClientMalwareReportRequest());
+ DVLOG(1) << "Starting to compute threat details.";
+ report_.reset(new ClientSafeBrowsingReportRequest());
- if (IsReportableUrl(resource_.url))
- report_->set_malware_url(resource_.url.spec());
+ if (IsReportableUrl(resource_.url)) {
+ report_->set_url(resource_.url.spec());
+ report_->set_type(GetReportTypeFromSBThreatType(resource_.threat_type));
+ }
GURL page_url = web_contents()->GetURL();
if (IsReportableUrl(page_url))
@@ -202,12 +229,12 @@ void ThreatDetails::StartCollection() {
// Get URLs of frames, scripts etc from the DOM.
// OnReceivedThreatDOMDetails will be called when the renderer replies.
content::RenderViewHost* view = web_contents()->GetRenderViewHost();
- view->Send(new SafeBrowsingMsg_GetMalwareDOMDetails(view->GetRoutingID()));
+ view->Send(new SafeBrowsingMsg_GetThreatDOMDetails(view->GetRoutingID()));
}
// When the renderer is done, this is called.
void ThreatDetails::OnReceivedThreatDOMDetails(
- const std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node>& params) {
+ const std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node>& params) {
// Schedule this in IO thread, so it doesn't conflict with future users
// of our data structures (eg GetSerializedReport).
BrowserThread::PostTask(
@@ -216,7 +243,7 @@ void ThreatDetails::OnReceivedThreatDOMDetails(
}
void ThreatDetails::AddDOMDetails(
- const std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node>& params) {
+ const std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node>& params) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DVLOG(1) << "Nodes from the DOM: " << params.size();
@@ -233,7 +260,7 @@ void ThreatDetails::AddDOMDetails(
// Add the urls from the DOM to |resources_|. The renderer could be
// sending bogus messages, so limit the number of nodes we accept.
for (size_t i = 0; i < params.size() && i < kMaxDomNodes; ++i) {
- SafeBrowsingHostMsg_MalwareDOMDetails_Node node = params[i];
+ SafeBrowsingHostMsg_ThreatDOMDetails_Node node = params[i];
DVLOG(1) << node.url << ", " << node.tag_name << ", " << node.parent;
AddUrl(node.url, node.parent, node.tag_name, &(node.children));
}
@@ -284,7 +311,7 @@ void ThreatDetails::OnCacheCollectionReady() {
// Add all the urls in our |resources_| maps to the |report_| protocol buffer.
for (safe_browsing::ResourceMap::const_iterator it = resources_.begin();
it != resources_.end(); ++it) {
- ClientMalwareReportRequest::Resource* pb_resource =
+ ClientSafeBrowsingReportRequest::Resource* pb_resource =
report_->add_resources();
pb_resource->CopyFrom(*(it->second));
const GURL url(pb_resource->url());
@@ -307,9 +334,8 @@ void ThreatDetails::OnCacheCollectionReady() {
// Send the report, using the SafeBrowsingService.
std::string serialized;
if (!report_->SerializeToString(&serialized)) {
- DLOG(ERROR) << "Unable to serialize the malware report.";
+ DLOG(ERROR) << "Unable to serialize the threat report.";
return;
}
-
ui_manager_->SendSerializedThreatDetails(serialized);
}

Powered by Google App Engine
This is Rietveld 408576698