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

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

Issue 2821163002: Clean up DownloadAttribution Finch experiments (Closed)
Patch Set: revert partial change is InEnabledAndReady() Created 3 years, 7 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
« no previous file with comments | « no previous file | chrome/browser/safe_browsing/safe_browsing_navigation_observer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 database_manager_(database_manager), 194 database_manager_(database_manager),
195 download_item_observer_(this) { 195 download_item_observer_(this) {
196 DCHECK_CURRENTLY_ON(BrowserThread::UI); 196 DCHECK_CURRENTLY_ON(BrowserThread::UI);
197 DCHECK(item_); 197 DCHECK(item_);
198 DCHECK(service_); 198 DCHECK(service_);
199 download_item_observer_.Add(item_); 199 download_item_observer_.Add(item_);
200 Profile* profile = Profile::FromBrowserContext(item_->GetBrowserContext()); 200 Profile* profile = Profile::FromBrowserContext(item_->GetBrowserContext());
201 extended_reporting_level_ = 201 extended_reporting_level_ =
202 profile ? GetExtendedReportingLevel(*profile->GetPrefs()) 202 profile ? GetExtendedReportingLevel(*profile->GetPrefs())
203 : SBER_LEVEL_OFF; 203 : SBER_LEVEL_OFF;
204 download_attribution_enabled_ = service_->navigation_observer_manager() &&
205 base::FeatureList::IsEnabled(
206 SafeBrowsingNavigationObserverManager::kDownloadAttribution);
207 } 204 }
208 205
209 // Implements DownloadItem::Observer. 206 // Implements DownloadItem::Observer.
210 void OnDownloadDestroyed(content::DownloadItem* download) override { 207 void OnDownloadDestroyed(content::DownloadItem* download) override {
211 download_item_observer_.Remove(item_); 208 download_item_observer_.Remove(item_);
212 item_ = nullptr; 209 item_ = nullptr;
213 } 210 }
214 211
215 void StartCheck() { 212 void StartCheck() {
216 DCHECK_CURRENTLY_ON(BrowserThread::IO); 213 DCHECK_CURRENTLY_ON(BrowserThread::IO);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 void CheckDone(SBThreatType threat_type) { 246 void CheckDone(SBThreatType threat_type) {
250 DownloadProtectionService::DownloadCheckResult result = 247 DownloadProtectionService::DownloadCheckResult result =
251 IsDangerous(threat_type) ? 248 IsDangerous(threat_type) ?
252 DownloadProtectionService::DANGEROUS : 249 DownloadProtectionService::DANGEROUS :
253 DownloadProtectionService::SAFE; 250 DownloadProtectionService::SAFE;
254 UpdateDownloadCheckStats(total_type_); 251 UpdateDownloadCheckStats(total_type_);
255 if (threat_type != SB_THREAT_TYPE_SAFE) { 252 if (threat_type != SB_THREAT_TYPE_SAFE) {
256 UpdateDownloadCheckStats(dangerous_type_); 253 UpdateDownloadCheckStats(dangerous_type_);
257 BrowserThread::PostTask( 254 BrowserThread::PostTask(
258 BrowserThread::UI, FROM_HERE, 255 BrowserThread::UI, FROM_HERE,
259 base::BindOnce(&DownloadUrlSBClient::ReportMalware, this, 256 base::Bind(&DownloadUrlSBClient::ReportMalware, this, threat_type));
260 threat_type)); 257 } else {
261 } else if (download_attribution_enabled_) { 258 // Identify download referrer chain, which will be used in
262 // Identify download referrer chain, which will be used in 259 // ClientDownloadRequest.
263 // ClientDownloadRequest. 260 BrowserThread::PostTask(
264 BrowserThread::PostTask( 261 BrowserThread::UI, FROM_HERE,
265 BrowserThread::UI, FROM_HERE, 262 base::Bind(&DownloadUrlSBClient::IdentifyReferrerChain, this));
266 base::BindOnce(&DownloadUrlSBClient::IdentifyReferrerChain, this));
267 } 263 }
268 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 264 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
269 base::BindOnce(callback_, result)); 265 base::BindOnce(callback_, result));
270 } 266 }
271 267
272 void ReportMalware(SBThreatType threat_type) { 268 void ReportMalware(SBThreatType threat_type) {
273 std::string post_data; 269 std::string post_data;
274 if (!sha256_hash_.empty()) { 270 if (!sha256_hash_.empty()) {
275 post_data += base::HexEncode(sha256_hash_.data(), 271 post_data += base::HexEncode(sha256_hash_.data(),
276 sha256_hash_.size()) + "\n"; 272 sha256_hash_.size()) + "\n";
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 // The DownloadItem we are checking. Must be accessed only on UI thread. 312 // The DownloadItem we are checking. Must be accessed only on UI thread.
317 content::DownloadItem* item_; 313 content::DownloadItem* item_;
318 // Copies of data from |item_| for access on other threads. 314 // Copies of data from |item_| for access on other threads.
319 std::string sha256_hash_; 315 std::string sha256_hash_;
320 std::vector<GURL> url_chain_; 316 std::vector<GURL> url_chain_;
321 GURL referrer_url_; 317 GURL referrer_url_;
322 DownloadProtectionService* service_; 318 DownloadProtectionService* service_;
323 DownloadProtectionService::CheckDownloadCallback callback_; 319 DownloadProtectionService::CheckDownloadCallback callback_;
324 scoped_refptr<SafeBrowsingUIManager> ui_manager_; 320 scoped_refptr<SafeBrowsingUIManager> ui_manager_;
325 base::TimeTicks start_time_; 321 base::TimeTicks start_time_;
326 bool download_attribution_enabled_;
327 const SBStatsType total_type_; 322 const SBStatsType total_type_;
328 const SBStatsType dangerous_type_; 323 const SBStatsType dangerous_type_;
329 ExtendedReportingLevel extended_reporting_level_; 324 ExtendedReportingLevel extended_reporting_level_;
330 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; 325 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_;
331 ScopedObserver<content::DownloadItem, 326 ScopedObserver<content::DownloadItem,
332 content::DownloadItem::Observer> download_item_observer_; 327 content::DownloadItem::Observer> download_item_observer_;
333 328
334 DISALLOW_COPY_AND_ASSIGN(DownloadUrlSBClient); 329 DISALLOW_COPY_AND_ASSIGN(DownloadUrlSBClient);
335 }; 330 };
336 331
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 .AsUTF8Unsafe()); 1031 .AsUTF8Unsafe());
1037 } else { 1032 } else {
1038 request.set_file_basename( 1033 request.set_file_basename(
1039 item_->GetTargetFilePath().BaseName().AsUTF8Unsafe()); 1034 item_->GetTargetFilePath().BaseName().AsUTF8Unsafe());
1040 } 1035 }
1041 request.set_download_type(type_); 1036 request.set_download_type(type_);
1042 1037
1043 ReferrerChainData* referrer_chain_data = 1038 ReferrerChainData* referrer_chain_data =
1044 static_cast<ReferrerChainData*>( 1039 static_cast<ReferrerChainData*>(
1045 item_->GetUserData(kDownloadReferrerChainDataKey)); 1040 item_->GetUserData(kDownloadReferrerChainDataKey));
1046 if (referrer_chain_data) { 1041 if (referrer_chain_data &&
1047 request.set_download_attribution_finch_enabled(true); 1042 !referrer_chain_data->GetReferrerChain()->empty()) {
1048 if (!referrer_chain_data->GetReferrerChain()->empty()) { 1043 request.mutable_referrer_chain()->Swap(
1049 request.mutable_referrer_chain()->Swap( 1044 referrer_chain_data->GetReferrerChain());
1050 referrer_chain_data->GetReferrerChain());
1051 }
1052 } 1045 }
1053 1046
1054 if (archive_is_valid_ != ArchiveValid::UNSET) 1047 if (archive_is_valid_ != ArchiveValid::UNSET)
1055 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); 1048 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID);
1056 request.mutable_signature()->CopyFrom(signature_info_); 1049 request.mutable_signature()->CopyFrom(signature_info_);
1057 if (image_headers_) 1050 if (image_headers_)
1058 request.set_allocated_image_headers(image_headers_.release()); 1051 request.set_allocated_image_headers(image_headers_.release());
1059 if (archived_executable_) 1052 if (archived_executable_)
1060 request.mutable_archived_binary()->Swap(&archived_binary_); 1053 request.mutable_archived_binary()->Swap(&archived_binary_);
1061 if (!request.SerializeToString(&client_download_request_data_)) { 1054 if (!request.SerializeToString(&client_download_request_data_)) {
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after
1659 1652
1660 bool is_extended_reporting_; 1653 bool is_extended_reporting_;
1661 1654
1662 base::WeakPtrFactory<PPAPIDownloadRequest> weakptr_factory_; 1655 base::WeakPtrFactory<PPAPIDownloadRequest> weakptr_factory_;
1663 1656
1664 DISALLOW_COPY_AND_ASSIGN(PPAPIDownloadRequest); 1657 DISALLOW_COPY_AND_ASSIGN(PPAPIDownloadRequest);
1665 }; 1658 };
1666 1659
1667 DownloadProtectionService::DownloadProtectionService( 1660 DownloadProtectionService::DownloadProtectionService(
1668 SafeBrowsingService* sb_service) 1661 SafeBrowsingService* sb_service)
1669 : request_context_getter_(sb_service ? sb_service->url_request_context() 1662 : navigation_observer_manager_(nullptr),
1663 request_context_getter_(sb_service ? sb_service->url_request_context()
1670 : nullptr), 1664 : nullptr),
1671 enabled_(false), 1665 enabled_(false),
1672 binary_feature_extractor_(new BinaryFeatureExtractor()), 1666 binary_feature_extractor_(new BinaryFeatureExtractor()),
1673 download_request_timeout_ms_(kDownloadRequestTimeoutMs), 1667 download_request_timeout_ms_(kDownloadRequestTimeoutMs),
1674 feedback_service_( 1668 feedback_service_(
1675 new DownloadFeedbackService(request_context_getter_.get(), 1669 new DownloadFeedbackService(request_context_getter_.get(),
1676 BrowserThread::GetBlockingPool())), 1670 BrowserThread::GetBlockingPool())),
1677 whitelist_sample_rate_(kWhitelistDownloadSampleRate) { 1671 whitelist_sample_rate_(kWhitelistDownloadSampleRate) {
1678 if (sb_service) { 1672 if (sb_service) {
1679 ui_manager_ = sb_service->ui_manager(); 1673 ui_manager_ = sb_service->ui_manager();
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
1942 std::string api_key = google_apis::GetAPIKey(); 1936 std::string api_key = google_apis::GetAPIKey();
1943 if (!api_key.empty()) 1937 if (!api_key.empty())
1944 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true)); 1938 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true));
1945 1939
1946 return url; 1940 return url;
1947 } 1941 }
1948 1942
1949 std::unique_ptr<ReferrerChain> DownloadProtectionService::IdentifyReferrerChain( 1943 std::unique_ptr<ReferrerChain> DownloadProtectionService::IdentifyReferrerChain(
1950 const GURL& download_url, 1944 const GURL& download_url,
1951 content::WebContents* web_contents) { 1945 content::WebContents* web_contents) {
1946 // If navigation_observer_manager_ is null, return immediately. This could
1947 // happen in tests.
1948 if (!navigation_observer_manager_)
1949 return nullptr;
1950
1952 std::unique_ptr<ReferrerChain> referrer_chain = 1951 std::unique_ptr<ReferrerChain> referrer_chain =
1953 base::MakeUnique<ReferrerChain>(); 1952 base::MakeUnique<ReferrerChain>();
1954 int download_tab_id = SessionTabHelper::IdForTab(web_contents); 1953 int download_tab_id = SessionTabHelper::IdForTab(web_contents);
1955 UMA_HISTOGRAM_BOOLEAN( 1954 UMA_HISTOGRAM_BOOLEAN(
1956 "SafeBrowsing.ReferrerHasInvalidTabID.DownloadAttribution", 1955 "SafeBrowsing.ReferrerHasInvalidTabID.DownloadAttribution",
1957 download_tab_id == -1); 1956 download_tab_id == -1);
1958 // We look for the referrer chain that leads to the download url first. 1957 // We look for the referrer chain that leads to the download url first.
1959 SafeBrowsingNavigationObserverManager::AttributionResult result = 1958 SafeBrowsingNavigationObserverManager::AttributionResult result =
1960 navigation_observer_manager_->IdentifyReferrerChainByEventURL( 1959 navigation_observer_manager_->IdentifyReferrerChainByEventURL(
1961 download_url, download_tab_id, kDownloadAttributionUserGestureLimit, 1960 download_url, download_tab_id, kDownloadAttributionUserGestureLimit,
(...skipping 18 matching lines...) Expand all
1980 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); 1979 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX);
1981 return referrer_chain; 1980 return referrer_chain;
1982 } 1981 }
1983 1982
1984 void DownloadProtectionService::AddReferrerChainToPPAPIClientDownloadRequest( 1983 void DownloadProtectionService::AddReferrerChainToPPAPIClientDownloadRequest(
1985 const GURL& initiating_frame_url, 1984 const GURL& initiating_frame_url,
1986 const GURL& initiating_main_frame_url, 1985 const GURL& initiating_main_frame_url,
1987 int tab_id, 1986 int tab_id,
1988 bool has_user_gesture, 1987 bool has_user_gesture,
1989 ClientDownloadRequest* out_request) { 1988 ClientDownloadRequest* out_request) {
1990 if (!base::FeatureList::IsEnabled( 1989 if (!navigation_observer_manager_)
1991 SafeBrowsingNavigationObserverManager::kDownloadAttribution) ||
1992 !navigation_observer_manager_) {
1993 return; 1990 return;
1994 }
1995 1991
1996 UMA_HISTOGRAM_BOOLEAN( 1992 UMA_HISTOGRAM_BOOLEAN(
1997 "SafeBrowsing.ReferrerHasInvalidTabID.DownloadAttribution", 1993 "SafeBrowsing.ReferrerHasInvalidTabID.DownloadAttribution",
1998 tab_id == -1); 1994 tab_id == -1);
1999 SafeBrowsingNavigationObserverManager::AttributionResult result = 1995 SafeBrowsingNavigationObserverManager::AttributionResult result =
2000 navigation_observer_manager_->IdentifyReferrerChainByHostingPage( 1996 navigation_observer_manager_->IdentifyReferrerChainByHostingPage(
2001 initiating_frame_url, initiating_main_frame_url, tab_id, 1997 initiating_frame_url, initiating_main_frame_url, tab_id,
2002 has_user_gesture, kDownloadAttributionUserGestureLimit, 1998 has_user_gesture, kDownloadAttributionUserGestureLimit,
2003 out_request->mutable_referrer_chain()); 1999 out_request->mutable_referrer_chain());
2004 UMA_HISTOGRAM_COUNTS_100( 2000 UMA_HISTOGRAM_COUNTS_100(
2005 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", 2001 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution",
2006 out_request->referrer_chain_size()); 2002 out_request->referrer_chain_size());
2007 UMA_HISTOGRAM_ENUMERATION( 2003 UMA_HISTOGRAM_ENUMERATION(
2008 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, 2004 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result,
2009 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); 2005 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX);
2010 out_request->set_download_attribution_finch_enabled(true);
2011 } 2006 }
2012 2007
2013 } // namespace safe_browsing 2008 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/safe_browsing/safe_browsing_navigation_observer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698