Log download ClientSafeBrowsingReportRequest in chrome://safe-browsing
Not all ClientSafeBrowsingReportRequest report types are displayed on
chrome://safe-browsing/#tab-csbrr. Add the following report types in
this CL:
DANGEROUS_DOWNLOAD_RECOVERY
DANGEROUS_DOWNLOAD_WARNING
DANGEROUS_DOWNLOAD_BY_API
DANGEROUS_DOWNLOAD_OPENED
Bug: 1206074
Change-Id: I708bf5cbd7bdac04941dc7fd774a3583bdf926f3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2877860
Reviewed-by: Min Qin <[email protected]>
Reviewed-by: Daniel Rubery <[email protected]>
Commit-Queue: Xinghui Lu <[email protected]>
Cr-Commit-Position: refs/heads/master@{#881638}
diff --git a/chrome/browser/download/download_danger_prompt.cc b/chrome/browser/download/download_danger_prompt.cc
index 3643ca21..1d10ed7 100644
--- a/chrome/browser/download/download_danger_prompt.cc
+++ b/chrome/browser/download/download_danger_prompt.cc
@@ -12,7 +12,10 @@
#include "chrome/browser/safe_browsing/safe_browsing_service.h"
#include "components/download/public/common/download_danger_type.h"
#include "components/download/public/common/download_item.h"
+#include "components/safe_browsing/content/web_ui/safe_browsing_ui.h"
#include "components/safe_browsing/core/file_type_policies.h"
+#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/download_item_utils.h"
using safe_browsing::ClientDownloadResponse;
@@ -77,37 +80,48 @@
g_browser_process->safe_browsing_service();
Profile* profile = Profile::FromBrowserContext(
content::DownloadItemUtils::GetBrowserContext(&download));
- ClientSafeBrowsingReportRequest report;
- report.set_type(report_type);
+ auto report = std::make_unique<ClientSafeBrowsingReportRequest>();
+ report->set_type(report_type);
switch (download.GetDangerType()) {
case download::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL:
case download::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT:
- report.set_download_verdict(ClientDownloadResponse::DANGEROUS);
+ report->set_download_verdict(ClientDownloadResponse::DANGEROUS);
break;
case download::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT:
- report.set_download_verdict(ClientDownloadResponse::UNCOMMON);
+ report->set_download_verdict(ClientDownloadResponse::UNCOMMON);
break;
case download::DOWNLOAD_DANGER_TYPE_POTENTIALLY_UNWANTED:
- report.set_download_verdict(ClientDownloadResponse::POTENTIALLY_UNWANTED);
+ report->set_download_verdict(
+ ClientDownloadResponse::POTENTIALLY_UNWANTED);
break;
case download::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST:
- report.set_download_verdict(ClientDownloadResponse::DANGEROUS_HOST);
+ report->set_download_verdict(ClientDownloadResponse::DANGEROUS_HOST);
break;
default: // Don't send report for any other danger types.
return;
}
- report.set_url(download.GetURL().spec());
- report.set_did_proceed(did_proceed);
+ report->set_url(download.GetURL().spec());
+ report->set_did_proceed(did_proceed);
std::string token =
safe_browsing::DownloadProtectionService::GetDownloadPingToken(
&download);
if (!token.empty())
- report.set_token(token);
+ report->set_token(token);
std::string serialized_report;
- if (report.SerializeToString(&serialized_report))
+ if (report->SerializeToString(&serialized_report)) {
sb_service->SendSerializedDownloadReport(profile, serialized_report);
- else
+
+ // The following is to log this ClientSafeBrowsingReportRequest on any open
+ // chrome://safe-browsing pages.
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
+ base::BindOnce(
+ &safe_browsing::WebUIInfoSingleton::AddToCSBRRsSent,
+ base::Unretained(safe_browsing::WebUIInfoSingleton::GetInstance()),
+ std::move(report)));
+ } else {
DLOG(ERROR) << "Unable to serialize the threat report.";
+ }
}
void DownloadDangerPrompt::RecordDownloadDangerPrompt(