| Index: chrome/browser/download/download_danger_prompt.cc
|
| diff --git a/chrome/browser/download/download_danger_prompt.cc b/chrome/browser/download/download_danger_prompt.cc
|
| index f581e42b6408ba8d18ccab4cf71b672b937b6a56..b6f0a099bc9d04ba8c18e7026af4298a4a67d544 100644
|
| --- a/chrome/browser/download/download_danger_prompt.cc
|
| +++ b/chrome/browser/download/download_danger_prompt.cc
|
| @@ -6,19 +6,24 @@
|
|
|
| #include "base/bind.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/chrome_notification_types.h"
|
| #include "chrome/browser/download/chrome_download_manager_delegate.h"
|
| #include "chrome/browser/download/download_stats.h"
|
| #include "chrome/browser/extensions/api/experience_sampling_private/experience_sampling.h"
|
| +#include "chrome/browser/safe_browsing/safe_browsing_service.h"
|
| #include "chrome/browser/ui/tab_modal_confirm_dialog.h"
|
| #include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h"
|
| +#include "chrome/common/safe_browsing/csd.pb.h"
|
| #include "chrome/grit/chromium_strings.h"
|
| #include "chrome/grit/generated_resources.h"
|
| +#include "content/public/browser/browser_context.h"
|
| #include "content/public/browser/download_danger_type.h"
|
| #include "content/public/browser/download_item.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
|
|
| using extensions::ExperienceSamplingEvent;
|
| +using safe_browsing::ClientSafeBrowsingReportRequest;
|
|
|
| namespace {
|
|
|
| @@ -80,10 +85,8 @@ DownloadDangerPromptImpl::DownloadDangerPromptImpl(
|
| // ExperienceSampling: A malicious download warning is being shown to the
|
| // user, so we start a new SamplingEvent and track it.
|
| sampling_event_.reset(new ExperienceSamplingEvent(
|
| - ExperienceSamplingEvent::kDownloadDangerPrompt,
|
| - download->GetURL(),
|
| - download->GetReferrerUrl(),
|
| - download->GetBrowserContext()));
|
| + ExperienceSamplingEvent::kDownloadDangerPrompt, download->GetURL(),
|
| + download->GetReferrerUrl(), download->GetBrowserContext()));
|
| }
|
|
|
| DownloadDangerPromptImpl::~DownloadDangerPromptImpl() {
|
| @@ -94,8 +97,12 @@ DownloadDangerPromptImpl::~DownloadDangerPromptImpl() {
|
|
|
| void DownloadDangerPromptImpl::InvokeActionForTesting(Action action) {
|
| switch (action) {
|
| - case ACCEPT: Accept(); break;
|
| - case CANCEL: Cancel(); break;
|
| + case ACCEPT:
|
| + Accept();
|
| + break;
|
| + case CANCEL:
|
| + Cancel();
|
| + break;
|
| case DISMISS:
|
| RunDone(DISMISS);
|
| Cancel();
|
| @@ -140,7 +147,7 @@ base::string16 DownloadDangerPromptImpl::GetDialogMessage() {
|
| IDS_PROMPT_DANGEROUS_DOWNLOAD,
|
| download_->GetFileNameToReportUser().LossyDisplayName());
|
| }
|
| - case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL: // Fall through
|
| + case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL: // Fall through
|
| case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT:
|
| case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST: {
|
| return l10n_util::GetStringFUTF16(
|
| @@ -170,10 +177,10 @@ base::string16 DownloadDangerPromptImpl::GetDialogMessage() {
|
| case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT:
|
| case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST: {
|
| return l10n_util::GetStringUTF16(
|
| - IDS_PROMPT_CONFIRM_KEEP_MALICIOUS_DOWNLOAD_LEAD) +
|
| - base::ASCIIToUTF16("\n\n") +
|
| - l10n_util::GetStringUTF16(
|
| - IDS_PROMPT_CONFIRM_KEEP_MALICIOUS_DOWNLOAD_BODY);
|
| + IDS_PROMPT_CONFIRM_KEEP_MALICIOUS_DOWNLOAD_LEAD) +
|
| + base::ASCIIToUTF16("\n\n") +
|
| + l10n_util::GetStringUTF16(
|
| + IDS_PROMPT_CONFIRM_KEEP_MALICIOUS_DOWNLOAD_BODY);
|
| }
|
| default: {
|
| return l10n_util::GetStringUTF16(
|
| @@ -240,6 +247,11 @@ void DownloadDangerPromptImpl::RunDone(Action action) {
|
| OnDone done = done_;
|
| done_.Reset();
|
| if (download_ != NULL) {
|
| + if (!download_->GetURL().is_empty() &&
|
| + !download_->GetBrowserContext()->IsOffTheRecord()) {
|
| + SendSafeBrowsingDownloadRecoveryReport(
|
| + action == DownloadDangerPrompt::ACCEPT, download_->GetURL());
|
| + }
|
| download_->RemoveObserver(this);
|
| download_ = NULL;
|
| }
|
| @@ -256,10 +268,27 @@ DownloadDangerPrompt* DownloadDangerPrompt::Create(
|
| content::WebContents* web_contents,
|
| bool show_context,
|
| const OnDone& done) {
|
| - DownloadDangerPromptImpl* prompt = new DownloadDangerPromptImpl(
|
| - item, web_contents, show_context, done);
|
| + DownloadDangerPromptImpl* prompt =
|
| + new DownloadDangerPromptImpl(item, web_contents, show_context, done);
|
| // |prompt| will be deleted when the dialog is done.
|
| TabModalConfirmDialog::Create(prompt, web_contents);
|
| return prompt;
|
| }
|
| #endif
|
| +
|
| +void DownloadDangerPrompt::SendSafeBrowsingDownloadRecoveryReport(
|
| + bool did_proceed,
|
| + const GURL& url) {
|
| + safe_browsing::SafeBrowsingService* sb_service =
|
| + g_browser_process->safe_browsing_service();
|
| + ClientSafeBrowsingReportRequest report;
|
| + report.set_type(ClientSafeBrowsingReportRequest::MALICIOUS_DOWNLOAD_RECOVERY);
|
| + report.set_url(url.spec());
|
| + report.set_did_proceed(did_proceed);
|
| +
|
| + std::string serialized_report;
|
| + if (report.SerializeToString(&serialized_report))
|
| + sb_service->SendDownloadRecoveryReport(serialized_report);
|
| + else
|
| + DLOG(ERROR) << "Unable to serialize the threat report.";
|
| +}
|
|
|