Chromium Code Reviews| 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..a19935a875a941668661223752e38f3e01b95eeb 100644 |
| --- a/chrome/browser/safe_browsing/threat_details.cc |
| +++ b/chrome/browser/safe_browsing/threat_details.cc |
| @@ -2,7 +2,7 @@ |
| // 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" |
| @@ -23,14 +23,42 @@ |
| 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_BINARY_MALWARE_URL: |
| + return ClientSafeBrowsingReportRequest::BINARY_MALWARE_URL; |
| + 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 +79,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 +90,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 +114,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 +130,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 +138,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 +154,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 +168,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 +176,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)) |
| @@ -199,15 +229,16 @@ void ThreatDetails::StartCollection() { |
| if (nav_entry && !referrer_url.is_empty()) |
| AddUrl(referrer_url, GURL(), std::string(), NULL); |
| + // TODO(jialiul): figure out if we want to distinguish different threat types. |
|
Nathan Parker
2015/11/03 20:51:57
Which threat types are you referring to here? Som
Jialiu Lin
2015/11/04 21:32:25
Oops, forgot to remove this TODO statement. The cu
|
| // 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 +247,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 +264,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 +315,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 +338,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); |
| } |