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

Side by Side Diff: chrome/browser/safe_browsing/download_protection_service.cc

Issue 2821163002: Clean up DownloadAttribution Finch experiments (Closed)
Patch Set: nits Created 3 years, 8 months 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/safe_browsing/download_protection_service.h" 5 #include "chrome/browser/safe_browsing/download_protection_service.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 database_manager_(database_manager), 193 database_manager_(database_manager),
194 download_item_observer_(this) { 194 download_item_observer_(this) {
195 DCHECK_CURRENTLY_ON(BrowserThread::UI); 195 DCHECK_CURRENTLY_ON(BrowserThread::UI);
196 DCHECK(item_); 196 DCHECK(item_);
197 DCHECK(service_); 197 DCHECK(service_);
198 download_item_observer_.Add(item_); 198 download_item_observer_.Add(item_);
199 Profile* profile = Profile::FromBrowserContext(item_->GetBrowserContext()); 199 Profile* profile = Profile::FromBrowserContext(item_->GetBrowserContext());
200 extended_reporting_level_ = 200 extended_reporting_level_ =
201 profile ? GetExtendedReportingLevel(*profile->GetPrefs()) 201 profile ? GetExtendedReportingLevel(*profile->GetPrefs())
202 : SBER_LEVEL_OFF; 202 : SBER_LEVEL_OFF;
203 download_attribution_enabled_ = service_->navigation_observer_manager() &&
204 base::FeatureList::IsEnabled(
205 SafeBrowsingNavigationObserverManager::kDownloadAttribution);
206 } 203 }
207 204
208 // Implements DownloadItem::Observer. 205 // Implements DownloadItem::Observer.
209 void OnDownloadDestroyed(content::DownloadItem* download) override { 206 void OnDownloadDestroyed(content::DownloadItem* download) override {
210 download_item_observer_.Remove(item_); 207 download_item_observer_.Remove(item_);
211 item_ = nullptr; 208 item_ = nullptr;
212 } 209 }
213 210
214 void StartCheck() { 211 void StartCheck() {
215 DCHECK_CURRENTLY_ON(BrowserThread::IO); 212 DCHECK_CURRENTLY_ON(BrowserThread::IO);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 DownloadProtectionService::DANGEROUS : 248 DownloadProtectionService::DANGEROUS :
252 DownloadProtectionService::SAFE; 249 DownloadProtectionService::SAFE;
253 UpdateDownloadCheckStats(total_type_); 250 UpdateDownloadCheckStats(total_type_);
254 if (threat_type != SB_THREAT_TYPE_SAFE) { 251 if (threat_type != SB_THREAT_TYPE_SAFE) {
255 UpdateDownloadCheckStats(dangerous_type_); 252 UpdateDownloadCheckStats(dangerous_type_);
256 BrowserThread::PostTask( 253 BrowserThread::PostTask(
257 BrowserThread::UI, 254 BrowserThread::UI,
258 FROM_HERE, 255 FROM_HERE,
259 base::Bind(&DownloadUrlSBClient::ReportMalware, 256 base::Bind(&DownloadUrlSBClient::ReportMalware,
260 this, threat_type)); 257 this, threat_type));
261 } else if (download_attribution_enabled_) { 258 } else {
262 // Identify download referrer chain, which will be used in 259 // Identify download referrer chain, which will be used in
263 // ClientDownloadRequest. 260 // ClientDownloadRequest.
264 BrowserThread::PostTask( 261 BrowserThread::PostTask(
265 BrowserThread::UI, 262 BrowserThread::UI, FROM_HERE,
266 FROM_HERE, 263 base::Bind(&DownloadUrlSBClient::IdentifyReferrerChain, this));
267 base::Bind(&DownloadUrlSBClient::IdentifyReferrerChain,
268 this));
269 } 264 }
270 BrowserThread::PostTask(BrowserThread::UI, 265 BrowserThread::PostTask(BrowserThread::UI,
271 FROM_HERE, 266 FROM_HERE,
272 base::Bind(callback_, result)); 267 base::Bind(callback_, result));
273 } 268 }
274 269
275 void ReportMalware(SBThreatType threat_type) { 270 void ReportMalware(SBThreatType threat_type) {
276 std::string post_data; 271 std::string post_data;
277 if (!sha256_hash_.empty()) { 272 if (!sha256_hash_.empty()) {
278 post_data += base::HexEncode(sha256_hash_.data(), 273 post_data += base::HexEncode(sha256_hash_.data(),
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 // The DownloadItem we are checking. Must be accessed only on UI thread. 314 // The DownloadItem we are checking. Must be accessed only on UI thread.
320 content::DownloadItem* item_; 315 content::DownloadItem* item_;
321 // Copies of data from |item_| for access on other threads. 316 // Copies of data from |item_| for access on other threads.
322 std::string sha256_hash_; 317 std::string sha256_hash_;
323 std::vector<GURL> url_chain_; 318 std::vector<GURL> url_chain_;
324 GURL referrer_url_; 319 GURL referrer_url_;
325 DownloadProtectionService* service_; 320 DownloadProtectionService* service_;
326 DownloadProtectionService::CheckDownloadCallback callback_; 321 DownloadProtectionService::CheckDownloadCallback callback_;
327 scoped_refptr<SafeBrowsingUIManager> ui_manager_; 322 scoped_refptr<SafeBrowsingUIManager> ui_manager_;
328 base::TimeTicks start_time_; 323 base::TimeTicks start_time_;
329 bool download_attribution_enabled_;
330 const SBStatsType total_type_; 324 const SBStatsType total_type_;
331 const SBStatsType dangerous_type_; 325 const SBStatsType dangerous_type_;
332 ExtendedReportingLevel extended_reporting_level_; 326 ExtendedReportingLevel extended_reporting_level_;
333 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; 327 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_;
334 ScopedObserver<content::DownloadItem, 328 ScopedObserver<content::DownloadItem,
335 content::DownloadItem::Observer> download_item_observer_; 329 content::DownloadItem::Observer> download_item_observer_;
336 330
337 DISALLOW_COPY_AND_ASSIGN(DownloadUrlSBClient); 331 DISALLOW_COPY_AND_ASSIGN(DownloadUrlSBClient);
338 }; 332 };
339 333
(...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 .AsUTF8Unsafe()); 1036 .AsUTF8Unsafe());
1043 } else { 1037 } else {
1044 request.set_file_basename( 1038 request.set_file_basename(
1045 item_->GetTargetFilePath().BaseName().AsUTF8Unsafe()); 1039 item_->GetTargetFilePath().BaseName().AsUTF8Unsafe());
1046 } 1040 }
1047 request.set_download_type(type_); 1041 request.set_download_type(type_);
1048 1042
1049 ReferrerChainData* referrer_chain_data = 1043 ReferrerChainData* referrer_chain_data =
1050 static_cast<ReferrerChainData*>( 1044 static_cast<ReferrerChainData*>(
1051 item_->GetUserData(kDownloadReferrerChainDataKey)); 1045 item_->GetUserData(kDownloadReferrerChainDataKey));
1052 if (referrer_chain_data) { 1046 if (referrer_chain_data &&
1053 request.set_download_attribution_finch_enabled(true); 1047 !referrer_chain_data->GetReferrerChain()->empty()) {
1054 if (!referrer_chain_data->GetReferrerChain()->empty()) { 1048 request.mutable_referrer_chain()->Swap(
1055 request.mutable_referrer_chain()->Swap( 1049 referrer_chain_data->GetReferrerChain());
1056 referrer_chain_data->GetReferrerChain());
1057 }
1058 } 1050 }
1059 1051
1060 if (archive_is_valid_ != ArchiveValid::UNSET) 1052 if (archive_is_valid_ != ArchiveValid::UNSET)
1061 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); 1053 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID);
1062 request.mutable_signature()->CopyFrom(signature_info_); 1054 request.mutable_signature()->CopyFrom(signature_info_);
1063 if (image_headers_) 1055 if (image_headers_)
1064 request.set_allocated_image_headers(image_headers_.release()); 1056 request.set_allocated_image_headers(image_headers_.release());
1065 if (archived_executable_) 1057 if (archived_executable_)
1066 request.mutable_archived_binary()->Swap(&archived_binary_); 1058 request.mutable_archived_binary()->Swap(&archived_binary_);
1067 if (!request.SerializeToString(&client_download_request_data_)) { 1059 if (!request.SerializeToString(&client_download_request_data_)) {
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
1666 1658
1667 bool is_extended_reporting_; 1659 bool is_extended_reporting_;
1668 1660
1669 base::WeakPtrFactory<PPAPIDownloadRequest> weakptr_factory_; 1661 base::WeakPtrFactory<PPAPIDownloadRequest> weakptr_factory_;
1670 1662
1671 DISALLOW_COPY_AND_ASSIGN(PPAPIDownloadRequest); 1663 DISALLOW_COPY_AND_ASSIGN(PPAPIDownloadRequest);
1672 }; 1664 };
1673 1665
1674 DownloadProtectionService::DownloadProtectionService( 1666 DownloadProtectionService::DownloadProtectionService(
1675 SafeBrowsingService* sb_service) 1667 SafeBrowsingService* sb_service)
1676 : request_context_getter_(sb_service ? sb_service->url_request_context() 1668 : navigation_observer_manager_(nullptr),
1669 request_context_getter_(sb_service ? sb_service->url_request_context()
1677 : nullptr), 1670 : nullptr),
1678 enabled_(false), 1671 enabled_(false),
1679 binary_feature_extractor_(new BinaryFeatureExtractor()), 1672 binary_feature_extractor_(new BinaryFeatureExtractor()),
1680 download_request_timeout_ms_(kDownloadRequestTimeoutMs), 1673 download_request_timeout_ms_(kDownloadRequestTimeoutMs),
1681 feedback_service_( 1674 feedback_service_(
1682 new DownloadFeedbackService(request_context_getter_.get(), 1675 new DownloadFeedbackService(request_context_getter_.get(),
1683 BrowserThread::GetBlockingPool())), 1676 BrowserThread::GetBlockingPool())),
1684 whitelist_sample_rate_(kWhitelistDownloadSampleRate) { 1677 whitelist_sample_rate_(kWhitelistDownloadSampleRate) {
1685 if (sb_service) { 1678 if (sb_service) {
1686 ui_manager_ = sb_service->ui_manager(); 1679 ui_manager_ = sb_service->ui_manager();
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
1948 std::string api_key = google_apis::GetAPIKey(); 1941 std::string api_key = google_apis::GetAPIKey();
1949 if (!api_key.empty()) 1942 if (!api_key.empty())
1950 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true)); 1943 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true));
1951 1944
1952 return url; 1945 return url;
1953 } 1946 }
1954 1947
1955 std::unique_ptr<ReferrerChain> DownloadProtectionService::IdentifyReferrerChain( 1948 std::unique_ptr<ReferrerChain> DownloadProtectionService::IdentifyReferrerChain(
1956 const GURL& download_url, 1949 const GURL& download_url,
1957 content::WebContents* web_contents) { 1950 content::WebContents* web_contents) {
1951 // If navigation_observer_manager_ is null, return immediately. This could
1952 // happen in tests.
1953 if (!navigation_observer_manager_)
1954 return nullptr;
1955
1958 std::unique_ptr<ReferrerChain> referrer_chain = 1956 std::unique_ptr<ReferrerChain> referrer_chain =
1959 base::MakeUnique<ReferrerChain>(); 1957 base::MakeUnique<ReferrerChain>();
1960 int download_tab_id = SessionTabHelper::IdForTab(web_contents); 1958 int download_tab_id = SessionTabHelper::IdForTab(web_contents);
1961 UMA_HISTOGRAM_BOOLEAN( 1959 UMA_HISTOGRAM_BOOLEAN(
1962 "SafeBrowsing.ReferrerHasInvalidTabID.DownloadAttribution", 1960 "SafeBrowsing.ReferrerHasInvalidTabID.DownloadAttribution",
1963 download_tab_id == -1); 1961 download_tab_id == -1);
1964 // We look for the referrer chain that leads to the download url first. 1962 // We look for the referrer chain that leads to the download url first.
1965 SafeBrowsingNavigationObserverManager::AttributionResult result = 1963 SafeBrowsingNavigationObserverManager::AttributionResult result =
1966 navigation_observer_manager_->IdentifyReferrerChainByEventURL( 1964 navigation_observer_manager_->IdentifyReferrerChainByEventURL(
1967 download_url, download_tab_id, kDownloadAttributionUserGestureLimit, 1965 download_url, download_tab_id, kDownloadAttributionUserGestureLimit,
(...skipping 18 matching lines...) Expand all
1986 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); 1984 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX);
1987 return referrer_chain; 1985 return referrer_chain;
1988 } 1986 }
1989 1987
1990 void DownloadProtectionService::AddReferrerChainToPPAPIClientDownloadRequest( 1988 void DownloadProtectionService::AddReferrerChainToPPAPIClientDownloadRequest(
1991 const GURL& initiating_frame_url, 1989 const GURL& initiating_frame_url,
1992 const GURL& initiating_main_frame_url, 1990 const GURL& initiating_main_frame_url,
1993 int tab_id, 1991 int tab_id,
1994 bool has_user_gesture, 1992 bool has_user_gesture,
1995 ClientDownloadRequest* out_request) { 1993 ClientDownloadRequest* out_request) {
1996 if (!base::FeatureList::IsEnabled( 1994 if (!navigation_observer_manager_)
1997 SafeBrowsingNavigationObserverManager::kDownloadAttribution) ||
1998 !navigation_observer_manager_) {
1999 return; 1995 return;
2000 }
2001 1996
2002 UMA_HISTOGRAM_BOOLEAN( 1997 UMA_HISTOGRAM_BOOLEAN(
2003 "SafeBrowsing.ReferrerHasInvalidTabID.DownloadAttribution", 1998 "SafeBrowsing.ReferrerHasInvalidTabID.DownloadAttribution",
2004 tab_id == -1); 1999 tab_id == -1);
2005 SafeBrowsingNavigationObserverManager::AttributionResult result = 2000 SafeBrowsingNavigationObserverManager::AttributionResult result =
2006 navigation_observer_manager_->IdentifyReferrerChainByHostingPage( 2001 navigation_observer_manager_->IdentifyReferrerChainByHostingPage(
2007 initiating_frame_url, initiating_main_frame_url, tab_id, 2002 initiating_frame_url, initiating_main_frame_url, tab_id,
2008 has_user_gesture, kDownloadAttributionUserGestureLimit, 2003 has_user_gesture, kDownloadAttributionUserGestureLimit,
2009 out_request->mutable_referrer_chain()); 2004 out_request->mutable_referrer_chain());
2010 UMA_HISTOGRAM_COUNTS_100( 2005 UMA_HISTOGRAM_COUNTS_100(
2011 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", 2006 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution",
2012 out_request->referrer_chain_size()); 2007 out_request->referrer_chain_size());
2013 UMA_HISTOGRAM_ENUMERATION( 2008 UMA_HISTOGRAM_ENUMERATION(
2014 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, 2009 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result,
2015 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); 2010 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX);
2016 out_request->set_download_attribution_finch_enabled(true);
2017 } 2011 }
2018 2012
2019 } // namespace safe_browsing 2013 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698