OLD | NEW |
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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 #include "chrome/common/safe_browsing/binary_feature_extractor.h" | 45 #include "chrome/common/safe_browsing/binary_feature_extractor.h" |
46 #include "chrome/common/safe_browsing/csd.pb.h" | 46 #include "chrome/common/safe_browsing/csd.pb.h" |
47 #include "chrome/common/safe_browsing/download_protection_util.h" | 47 #include "chrome/common/safe_browsing/download_protection_util.h" |
48 #include "chrome/common/safe_browsing/file_type_policies.h" | 48 #include "chrome/common/safe_browsing/file_type_policies.h" |
49 #include "chrome/common/safe_browsing/zip_analyzer_results.h" | 49 #include "chrome/common/safe_browsing/zip_analyzer_results.h" |
50 #include "chrome/common/url_constants.h" | 50 #include "chrome/common/url_constants.h" |
51 #include "components/data_use_measurement/core/data_use_user_data.h" | 51 #include "components/data_use_measurement/core/data_use_user_data.h" |
52 #include "components/google/core/browser/google_util.h" | 52 #include "components/google/core/browser/google_util.h" |
53 #include "components/history/core/browser/history_service.h" | 53 #include "components/history/core/browser/history_service.h" |
54 #include "components/prefs/pref_service.h" | 54 #include "components/prefs/pref_service.h" |
| 55 #include "components/safe_browsing_db/safe_browsing_prefs.h" |
55 #include "content/public/browser/browser_thread.h" | 56 #include "content/public/browser/browser_thread.h" |
56 #include "content/public/browser/download_item.h" | 57 #include "content/public/browser/download_item.h" |
57 #include "content/public/browser/page_navigator.h" | 58 #include "content/public/browser/page_navigator.h" |
58 #include "crypto/sha2.h" | 59 #include "crypto/sha2.h" |
59 #include "google_apis/google_api_keys.h" | 60 #include "google_apis/google_api_keys.h" |
60 #include "net/base/escape.h" | 61 #include "net/base/escape.h" |
61 #include "net/base/load_flags.h" | 62 #include "net/base/load_flags.h" |
62 #include "net/base/url_util.h" | 63 #include "net/base/url_util.h" |
63 #include "net/cert/x509_cert_types.h" | 64 #include "net/cert/x509_cert_types.h" |
64 #include "net/cert/x509_certificate.h" | 65 #include "net/cert/x509_certificate.h" |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 SBStatsType dangerous_type) | 170 SBStatsType dangerous_type) |
170 : sha256_hash_(item.GetHash()), | 171 : sha256_hash_(item.GetHash()), |
171 url_chain_(item.GetUrlChain()), | 172 url_chain_(item.GetUrlChain()), |
172 referrer_url_(item.GetReferrerUrl()), | 173 referrer_url_(item.GetReferrerUrl()), |
173 callback_(callback), | 174 callback_(callback), |
174 ui_manager_(ui_manager), | 175 ui_manager_(ui_manager), |
175 start_time_(base::TimeTicks::Now()), | 176 start_time_(base::TimeTicks::Now()), |
176 total_type_(total_type), | 177 total_type_(total_type), |
177 dangerous_type_(dangerous_type) { | 178 dangerous_type_(dangerous_type) { |
178 Profile* profile = Profile::FromBrowserContext(item.GetBrowserContext()); | 179 Profile* profile = Profile::FromBrowserContext(item.GetBrowserContext()); |
179 is_extended_reporting_ = profile && | 180 is_extended_reporting_ = |
180 profile->GetPrefs()->GetBoolean( | 181 profile && IsExtendedReportingEnabled(*profile->GetPrefs()); |
181 prefs::kSafeBrowsingExtendedReportingEnabled); | |
182 } | 182 } |
183 | 183 |
184 virtual void StartCheck() = 0; | 184 virtual void StartCheck() = 0; |
185 virtual bool IsDangerous(SBThreatType threat_type) const = 0; | 185 virtual bool IsDangerous(SBThreatType threat_type) const = 0; |
186 | 186 |
187 protected: | 187 protected: |
188 friend class base::RefCountedThreadSafe<DownloadSBClient>; | 188 friend class base::RefCountedThreadSafe<DownloadSBClient>; |
189 ~DownloadSBClient() override {} | 189 ~DownloadSBClient() override {} |
190 | 190 |
191 void CheckDone(SBThreatType threat_type) { | 191 void CheckDone(SBThreatType threat_type) { |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 DownloadFileType::SAMPLED_PING; | 346 DownloadFileType::SAMPLED_PING; |
347 } | 347 } |
348 | 348 |
349 void Start() { | 349 void Start() { |
350 DVLOG(2) << "Starting SafeBrowsing download check for: " | 350 DVLOG(2) << "Starting SafeBrowsing download check for: " |
351 << item_->DebugString(true); | 351 << item_->DebugString(true); |
352 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 352 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
353 if (item_->GetBrowserContext()) { | 353 if (item_->GetBrowserContext()) { |
354 Profile* profile = | 354 Profile* profile = |
355 Profile::FromBrowserContext(item_->GetBrowserContext()); | 355 Profile::FromBrowserContext(item_->GetBrowserContext()); |
356 is_extended_reporting_ = profile && | 356 is_extended_reporting_ = |
357 profile->GetPrefs()->GetBoolean( | 357 profile && IsExtendedReportingEnabled(*profile->GetPrefs()); |
358 prefs::kSafeBrowsingExtendedReportingEnabled); | |
359 is_incognito_ = item_->GetBrowserContext()->IsOffTheRecord(); | 358 is_incognito_ = item_->GetBrowserContext()->IsOffTheRecord(); |
360 } | 359 } |
361 | 360 |
362 DownloadCheckResultReason reason = REASON_MAX; | 361 DownloadCheckResultReason reason = REASON_MAX; |
363 if (!IsSupportedDownload( | 362 if (!IsSupportedDownload( |
364 *item_, item_->GetTargetFilePath(), &reason, &type_)) { | 363 *item_, item_->GetTargetFilePath(), &reason, &type_)) { |
365 switch (reason) { | 364 switch (reason) { |
366 case REASON_EMPTY_URL_CHAIN: | 365 case REASON_EMPTY_URL_CHAIN: |
367 case REASON_INVALID_URL: | 366 case REASON_INVALID_URL: |
368 case REASON_LOCAL_FILE: | 367 case REASON_LOCAL_FILE: |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 613 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
615 DCHECK(item_ == NULL); | 614 DCHECK(item_ == NULL); |
616 } | 615 } |
617 | 616 |
618 // .zip files that look invalid to Chrome can often be successfully unpacked | 617 // .zip files that look invalid to Chrome can often be successfully unpacked |
619 // by other archive tools, so they may be a real threat. For that reason, | 618 // by other archive tools, so they may be a real threat. For that reason, |
620 // we send pings for them if !in_incognito && is_extended_reporting. | 619 // we send pings for them if !in_incognito && is_extended_reporting. |
621 bool CanReportInvalidArchives() { | 620 bool CanReportInvalidArchives() { |
622 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 621 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
623 Profile* profile = Profile::FromBrowserContext(item_->GetBrowserContext()); | 622 Profile* profile = Profile::FromBrowserContext(item_->GetBrowserContext()); |
624 if (!profile || | 623 if (!profile || !IsExtendedReportingEnabled(*profile->GetPrefs())) |
625 !profile->GetPrefs()->GetBoolean( | |
626 prefs::kSafeBrowsingExtendedReportingEnabled)) | |
627 return false; | 624 return false; |
628 | 625 |
629 return !item_->GetBrowserContext()->IsOffTheRecord(); | 626 return !item_->GetBrowserContext()->IsOffTheRecord(); |
630 } | 627 } |
631 | 628 |
632 void OnFileFeatureExtractionDone() { | 629 void OnFileFeatureExtractionDone() { |
633 // This can run in any thread, since it just posts more messages. | 630 // This can run in any thread, since it just posts more messages. |
634 | 631 |
635 // TODO(noelutz): DownloadInfo should also contain the IP address of | 632 // TODO(noelutz): DownloadInfo should also contain the IP address of |
636 // every URL in the redirect chain. We also should check whether the | 633 // every URL in the redirect chain. We also should check whether the |
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1243 default_file_path_(default_file_path), | 1240 default_file_path_(default_file_path), |
1244 alternate_extensions_(alternate_extensions), | 1241 alternate_extensions_(alternate_extensions), |
1245 callback_(callback), | 1242 callback_(callback), |
1246 service_(service), | 1243 service_(service), |
1247 database_manager_(database_manager), | 1244 database_manager_(database_manager), |
1248 start_time_(base::TimeTicks::Now()), | 1245 start_time_(base::TimeTicks::Now()), |
1249 supported_path_( | 1246 supported_path_( |
1250 GetSupportedFilePath(default_file_path, alternate_extensions)), | 1247 GetSupportedFilePath(default_file_path, alternate_extensions)), |
1251 weakptr_factory_(this) { | 1248 weakptr_factory_(this) { |
1252 DCHECK(profile); | 1249 DCHECK(profile); |
1253 is_extended_reporting_ = profile->GetPrefs()->GetBoolean( | 1250 is_extended_reporting_ = IsExtendedReportingEnabled(*profile->GetPrefs()); |
1254 prefs::kSafeBrowsingExtendedReportingEnabled); | |
1255 } | 1251 } |
1256 | 1252 |
1257 ~PPAPIDownloadRequest() override { | 1253 ~PPAPIDownloadRequest() override { |
1258 if (fetcher_ && !callback_.is_null()) | 1254 if (fetcher_ && !callback_.is_null()) |
1259 Finish(RequestOutcome::REQUEST_DESTROYED, UNKNOWN); | 1255 Finish(RequestOutcome::REQUEST_DESTROYED, UNKNOWN); |
1260 } | 1256 } |
1261 | 1257 |
1262 // Start the process of checking the download request. The callback passed as | 1258 // Start the process of checking the download request. The callback passed as |
1263 // the |callback| parameter to the constructor will be invoked with the result | 1259 // the |callback| parameter to the constructor will be invoked with the result |
1264 // of the check at some point in the future. | 1260 // of the check at some point in the future. |
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1785 GURL DownloadProtectionService::GetDownloadRequestUrl() { | 1781 GURL DownloadProtectionService::GetDownloadRequestUrl() { |
1786 GURL url(kDownloadRequestUrl); | 1782 GURL url(kDownloadRequestUrl); |
1787 std::string api_key = google_apis::GetAPIKey(); | 1783 std::string api_key = google_apis::GetAPIKey(); |
1788 if (!api_key.empty()) | 1784 if (!api_key.empty()) |
1789 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true)); | 1785 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true)); |
1790 | 1786 |
1791 return url; | 1787 return url; |
1792 } | 1788 } |
1793 | 1789 |
1794 } // namespace safe_browsing | 1790 } // namespace safe_browsing |
OLD | NEW |