| Index: chrome/browser/download/download_safe_browsing_client.cc
|
| diff --git a/chrome/browser/download/download_safe_browsing_client.cc b/chrome/browser/download/download_safe_browsing_client.cc
|
| deleted file mode 100644
|
| index 027d0057817227a4480405c8ffe0f1af0e0132d0..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/download/download_safe_browsing_client.cc
|
| +++ /dev/null
|
| @@ -1,180 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -//
|
| -
|
| -#include "chrome/browser/download/download_safe_browsing_client.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/command_line.h"
|
| -#include "base/logging.h"
|
| -#include "base/metrics/histogram.h"
|
| -#include "base/metrics/stats_counters.h"
|
| -#include "base/string_number_conversions.h"
|
| -#include "chrome/browser/browser_process.h"
|
| -#include "chrome/browser/safe_browsing/safe_browsing_util.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "content/browser/download/download_create_info.h"
|
| -#include "content/browser/download/download_manager.h"
|
| -#include "content/browser/renderer_host/resource_dispatcher_host.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -
|
| -using content::BrowserThread;
|
| -
|
| -// TODO(lzheng): Get rid of the AddRef and Release after
|
| -// SafeBrowsingService::Client is changed to RefCountedThreadSafe<>.
|
| -
|
| -DownloadSBClient::DownloadSBClient(int32 download_id,
|
| - const std::vector<GURL>& url_chain,
|
| - const GURL& referrer_url,
|
| - bool safe_browsing_enabled)
|
| - : download_id_(download_id),
|
| - url_chain_(url_chain),
|
| - referrer_url_(referrer_url),
|
| - safe_browsing_enabled_(safe_browsing_enabled) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - DCHECK(!url_chain.empty());
|
| - ResourceDispatcherHost* rdh = g_browser_process->resource_dispatcher_host();
|
| - if (rdh)
|
| - sb_service_ = g_browser_process->safe_browsing_service();
|
| -}
|
| -
|
| -DownloadSBClient::~DownloadSBClient() {}
|
| -
|
| -void DownloadSBClient::CheckDownloadUrl(const UrlDoneCallback& callback) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - // It is not allowed to call this method twice.
|
| - CHECK(url_done_callback_.is_null() && hash_done_callback_.is_null());
|
| -
|
| - start_time_ = base::TimeTicks::Now();
|
| - url_done_callback_ = callback;
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO, FROM_HERE,
|
| - base::Bind(&DownloadSBClient::CheckDownloadUrlOnIOThread, this,
|
| - url_chain_));
|
| -}
|
| -
|
| -void DownloadSBClient::CheckDownloadHash(const std::string& hash,
|
| - const HashDoneCallback& callback) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - // It is not allowed to call this method twice.
|
| - CHECK(url_done_callback_.is_null() && hash_done_callback_.is_null());
|
| -
|
| - start_time_ = base::TimeTicks::Now();
|
| - hash_done_callback_ = callback;
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO, FROM_HERE,
|
| - base::Bind(&DownloadSBClient::CheckDownloadHashOnIOThread, this, hash));
|
| -}
|
| -
|
| -void DownloadSBClient::CheckDownloadUrlOnIOThread(
|
| - const std::vector<GURL>& url_chain) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| -
|
| - // Will be released in OnDownloadUrlCheckResult.
|
| - AddRef();
|
| - if (safe_browsing_enabled_ && sb_service_.get() &&
|
| - !sb_service_->CheckDownloadUrl(url_chain, this)) {
|
| - // Wait for SafeBrowsingService to call back OnDownloadUrlCheckResult.
|
| - return;
|
| - }
|
| - OnDownloadUrlCheckResult(url_chain, SafeBrowsingService::SAFE);
|
| -}
|
| -
|
| -// The callback interface for SafeBrowsingService::Client.
|
| -// Called when the result of checking a download URL is known.
|
| -void DownloadSBClient::OnDownloadUrlCheckResult(
|
| - const std::vector<GURL>& url_chain,
|
| - SafeBrowsingService::UrlCheckResult result) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&DownloadSBClient::SafeBrowsingCheckUrlDone, this, result));
|
| - Release();
|
| -}
|
| -
|
| -void DownloadSBClient::CheckDownloadHashOnIOThread(const std::string& hash) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - // Will be released in OnDownloadUrlCheckResult.
|
| - AddRef();
|
| - if (safe_browsing_enabled_ && sb_service_.get() &&
|
| - !sb_service_->CheckDownloadHash(hash, this)) {
|
| - // Wait for SafeBrowsingService to call back OnDownloadUrlCheckResult.
|
| - return;
|
| - }
|
| - OnDownloadHashCheckResult(hash, SafeBrowsingService::SAFE);
|
| -}
|
| -
|
| -// The callback interface for SafeBrowsingService::Client.
|
| -// Called when the result of checking a download URL is known.
|
| -void DownloadSBClient::OnDownloadHashCheckResult(
|
| - const std::string& hash, SafeBrowsingService::UrlCheckResult result) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&DownloadSBClient::SafeBrowsingCheckHashDone, this, result,
|
| - hash));
|
| - Release();
|
| -}
|
| -
|
| -void DownloadSBClient::SafeBrowsingCheckUrlDone(
|
| - SafeBrowsingService::UrlCheckResult result) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - DVLOG(1) << "SafeBrowsingCheckUrlDone with result: " << result;
|
| -
|
| - bool is_dangerous = result != SafeBrowsingService::SAFE;
|
| - url_done_callback_.Run(download_id_, is_dangerous);
|
| -
|
| - if (sb_service_.get() && sb_service_->download_protection_enabled()) {
|
| - UMA_HISTOGRAM_TIMES("SB2.DownloadUrlCheckDuration",
|
| - base::TimeTicks::Now() - start_time_);
|
| - UpdateDownloadCheckStats(DOWNLOAD_URL_CHECKS_TOTAL);
|
| - if (is_dangerous) {
|
| - UpdateDownloadCheckStats(DOWNLOAD_URL_CHECKS_MALWARE);
|
| - ReportMalware(result, std::string());
|
| - }
|
| - }
|
| -}
|
| -
|
| -void DownloadSBClient::SafeBrowsingCheckHashDone(
|
| - SafeBrowsingService::UrlCheckResult result,
|
| - const std::string& hash) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - DVLOG(1) << "SafeBrowsingCheckHashDone with result: " << result;
|
| -
|
| - bool is_dangerous = result != SafeBrowsingService::SAFE;
|
| - hash_done_callback_.Run(download_id_, is_dangerous);
|
| -
|
| - if (sb_service_.get() && sb_service_->download_protection_enabled()) {
|
| - UMA_HISTOGRAM_TIMES("SB2.DownloadHashCheckDuration",
|
| - base::TimeTicks::Now() - start_time_);
|
| - UpdateDownloadCheckStats(DOWNLOAD_HASH_CHECKS_TOTAL);
|
| - if (is_dangerous) {
|
| - UpdateDownloadCheckStats(DOWNLOAD_HASH_CHECKS_MALWARE);
|
| - ReportMalware(result, hash);
|
| - }
|
| - }
|
| -}
|
| -
|
| -void DownloadSBClient::ReportMalware(
|
| - SafeBrowsingService::UrlCheckResult result,
|
| - const std::string& hash) {
|
| - std::string post_data;
|
| - if (!hash.empty())
|
| - post_data += base::HexEncode(hash.data(), hash.size()) + "\n";
|
| - for (size_t i = 0; i < url_chain_.size(); ++i)
|
| - post_data += url_chain_[i].spec() + "\n";
|
| -
|
| - sb_service_->ReportSafeBrowsingHit(url_chain_.back(), // malicious_url
|
| - url_chain_.front(), // page_url
|
| - referrer_url_,
|
| - true, // is_subresource
|
| - result,
|
| - post_data);
|
| -}
|
| -
|
| -void DownloadSBClient::UpdateDownloadCheckStats(SBStatsType stat_type) {
|
| - UMA_HISTOGRAM_ENUMERATION("SB2.DownloadChecks",
|
| - stat_type,
|
| - DOWNLOAD_CHECKS_MAX);
|
| -}
|
|
|