OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/incident_reporting/incident_reporting_ser
vice.h" | 5 #include "chrome/browser/safe_browsing/incident_reporting/incident_reporting_ser
vice.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 21 matching lines...) Expand all Loading... |
32 #include "chrome/browser/safe_browsing/incident_reporting/incident_receiver.h" | 32 #include "chrome/browser/safe_browsing/incident_reporting/incident_receiver.h" |
33 #include "chrome/browser/safe_browsing/incident_reporting/incident_report_upload
er_impl.h" | 33 #include "chrome/browser/safe_browsing/incident_reporting/incident_report_upload
er_impl.h" |
34 #include "chrome/browser/safe_browsing/incident_reporting/preference_validation_
delegate.h" | 34 #include "chrome/browser/safe_browsing/incident_reporting/preference_validation_
delegate.h" |
35 #include "chrome/browser/safe_browsing/incident_reporting/state_store.h" | 35 #include "chrome/browser/safe_browsing/incident_reporting/state_store.h" |
36 #include "chrome/browser/safe_browsing/safe_browsing_service.h" | 36 #include "chrome/browser/safe_browsing/safe_browsing_service.h" |
37 #include "chrome/common/chrome_features.h" | 37 #include "chrome/common/chrome_features.h" |
38 #include "chrome/common/pref_names.h" | 38 #include "chrome/common/pref_names.h" |
39 #include "chrome/common/safe_browsing/csd.pb.h" | 39 #include "chrome/common/safe_browsing/csd.pb.h" |
40 #include "components/prefs/pref_service.h" | 40 #include "components/prefs/pref_service.h" |
41 #include "components/safe_browsing_db/database_manager.h" | 41 #include "components/safe_browsing_db/database_manager.h" |
| 42 #include "components/safe_browsing_db/safe_browsing_prefs.h" |
42 #include "components/user_prefs/tracked/tracked_preference_validation_delegate.h
" | 43 #include "components/user_prefs/tracked/tracked_preference_validation_delegate.h
" |
43 #include "content/public/browser/browser_thread.h" | 44 #include "content/public/browser/browser_thread.h" |
44 #include "content/public/browser/notification_service.h" | 45 #include "content/public/browser/notification_service.h" |
45 #include "net/url_request/url_request_context_getter.h" | 46 #include "net/url_request/url_request_context_getter.h" |
46 | 47 |
47 namespace safe_browsing { | 48 namespace safe_browsing { |
48 | 49 |
49 #if !defined(GOOGLE_CHROME_BUILD) | 50 #if !defined(GOOGLE_CHROME_BUILD) |
50 // Chromium-only flag to disable incident uploads. | 51 // Chromium-only flag to disable incident uploads. |
51 extern const base::Feature kIncidentReportingDisableUpload{ | 52 extern const base::Feature kIncidentReportingDisableUpload{ |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 | 129 |
129 bool ProfileCanAcceptIncident(Profile* profile, const Incident& incident) { | 130 bool ProfileCanAcceptIncident(Profile* profile, const Incident& incident) { |
130 if (profile->IsOffTheRecord()) | 131 if (profile->IsOffTheRecord()) |
131 return false; | 132 return false; |
132 if (!profile->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled)) | 133 if (!profile->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled)) |
133 return false; | 134 return false; |
134 switch (incident.GetMinimumProfileConsent()) { | 135 switch (incident.GetMinimumProfileConsent()) { |
135 case MinimumProfileConsent::SAFE_BROWSING_ENABLED: | 136 case MinimumProfileConsent::SAFE_BROWSING_ENABLED: |
136 return true; | 137 return true; |
137 case MinimumProfileConsent::SAFE_BROWSING_EXTENDED_REPORTING_ENABLED: | 138 case MinimumProfileConsent::SAFE_BROWSING_EXTENDED_REPORTING_ENABLED: |
138 return profile->GetPrefs()->GetBoolean( | 139 return IsExtendedReportingEnabled(*profile->GetPrefs()); |
139 prefs::kSafeBrowsingExtendedReportingEnabled); | |
140 } | 140 } |
141 NOTREACHED(); | 141 NOTREACHED(); |
142 return false; | 142 return false; |
143 } | 143 } |
144 | 144 |
145 // Returns the shutdown behavior for the task runners of the incident reporting | 145 // Returns the shutdown behavior for the task runners of the incident reporting |
146 // service. Current metrics suggest that CONTINUE_ON_SHUTDOWN will reduce the | 146 // service. Current metrics suggest that CONTINUE_ON_SHUTDOWN will reduce the |
147 // number of browser hangs on shutdown. | 147 // number of browser hangs on shutdown. |
148 base::SequencedWorkerPool::WorkerShutdown GetShutdownBehavior() { | 148 base::SequencedWorkerPool::WorkerShutdown GetShutdownBehavior() { |
149 return base::FeatureList::IsEnabled(features::kBrowserHangFixesExperiment) | 149 return base::FeatureList::IsEnabled(features::kBrowserHangFixesExperiment) |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 } | 321 } |
322 | 322 |
323 // static | 323 // static |
324 bool IncidentReportingService::IsEnabledForProfile(Profile* profile) { | 324 bool IncidentReportingService::IsEnabledForProfile(Profile* profile) { |
325 if (profile->IsOffTheRecord()) | 325 if (profile->IsOffTheRecord()) |
326 return false; | 326 return false; |
327 if (!profile->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled)) | 327 if (!profile->GetPrefs()->GetBoolean(prefs::kSafeBrowsingEnabled)) |
328 return false; | 328 return false; |
329 if (IsFieldTrialEnabled()) | 329 if (IsFieldTrialEnabled()) |
330 return true; | 330 return true; |
331 return profile->GetPrefs()->GetBoolean( | 331 return IsExtendedReportingEnabled(*profile->GetPrefs()); |
332 prefs::kSafeBrowsingExtendedReportingEnabled); | |
333 } | 332 } |
334 | 333 |
335 IncidentReportingService::IncidentReportingService( | 334 IncidentReportingService::IncidentReportingService( |
336 SafeBrowsingService* safe_browsing_service) | 335 SafeBrowsingService* safe_browsing_service) |
337 : database_manager_(safe_browsing_service | 336 : database_manager_(safe_browsing_service |
338 ? safe_browsing_service->database_manager() | 337 ? safe_browsing_service->database_manager() |
339 : nullptr), | 338 : nullptr), |
340 url_request_context_getter_( | 339 url_request_context_getter_( |
341 safe_browsing_service ? safe_browsing_service->url_request_context() | 340 safe_browsing_service ? safe_browsing_service->url_request_context() |
342 : nullptr), | 341 : nullptr), |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 | 433 |
435 // |callback| will be run on the blocking pool. The receiver will bounce back | 434 // |callback| will be run on the blocking pool. The receiver will bounce back |
436 // to the origin thread if needed. | 435 // to the origin thread if needed. |
437 extended_reporting_only_delayed_analysis_callbacks_.RegisterCallback( | 436 extended_reporting_only_delayed_analysis_callbacks_.RegisterCallback( |
438 base::Bind(callback, base::Passed(GetIncidentReceiver()))); | 437 base::Bind(callback, base::Passed(GetIncidentReceiver()))); |
439 | 438 |
440 // Start running the callbacks if any profiles have opted into Safebrowsing | 439 // Start running the callbacks if any profiles have opted into Safebrowsing |
441 // extended reporting. If none are now, running will commence if/when such a | 440 // extended reporting. If none are now, running will commence if/when such a |
442 // profile is added. | 441 // profile is added. |
443 Profile* profile = FindEligibleProfile(); | 442 Profile* profile = FindEligibleProfile(); |
444 if (profile && | 443 if (profile && IsExtendedReportingEnabled(*profile->GetPrefs())) { |
445 profile->GetPrefs()->GetBoolean( | |
446 prefs::kSafeBrowsingExtendedReportingEnabled)) { | |
447 extended_reporting_only_delayed_analysis_callbacks_.Start(); | 444 extended_reporting_only_delayed_analysis_callbacks_.Start(); |
448 } | 445 } |
449 } | 446 } |
450 | 447 |
451 void IncidentReportingService::AddDownloadManager( | 448 void IncidentReportingService::AddDownloadManager( |
452 content::DownloadManager* download_manager) { | 449 content::DownloadManager* download_manager) { |
453 download_metadata_manager_.AddDownloadManager(download_manager); | 450 download_metadata_manager_.AddDownloadManager(download_manager); |
454 } | 451 } |
455 | 452 |
456 IncidentReportingService::IncidentReportingService( | 453 IncidentReportingService::IncidentReportingService( |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 LogIncidentDataType(DROPPED, *incident); | 523 LogIncidentDataType(DROPPED, *incident); |
527 context->incidents.clear(); | 524 context->incidents.clear(); |
528 } | 525 } |
529 | 526 |
530 if (enabled_for_profile) { | 527 if (enabled_for_profile) { |
531 // Start processing delayed analysis callbacks if incident reporting is | 528 // Start processing delayed analysis callbacks if incident reporting is |
532 // enabled for this new profile. Start is idempotent, so this is safe even | 529 // enabled for this new profile. Start is idempotent, so this is safe even |
533 // if they're already running. | 530 // if they're already running. |
534 delayed_analysis_callbacks_.Start(); | 531 delayed_analysis_callbacks_.Start(); |
535 | 532 |
536 if (profile->GetPrefs()->GetBoolean( | 533 if (IsExtendedReportingEnabled(*profile->GetPrefs())) { |
537 prefs::kSafeBrowsingExtendedReportingEnabled)) { | |
538 extended_reporting_only_delayed_analysis_callbacks_.Start(); | 534 extended_reporting_only_delayed_analysis_callbacks_.Start(); |
539 } | 535 } |
540 | 536 |
541 // Start a new report if there are process-wide incidents, or incidents for | 537 // Start a new report if there are process-wide incidents, or incidents for |
542 // this profile. | 538 // this profile. |
543 if ((GetProfileContext(nullptr) && | 539 if ((GetProfileContext(nullptr) && |
544 GetProfileContext(nullptr)->HasIncidents()) || | 540 GetProfileContext(nullptr)->HasIncidents()) || |
545 context->HasIncidents()) { | 541 context->HasIncidents()) { |
546 BeginReportProcessing(); | 542 BeginReportProcessing(); |
547 } | 543 } |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
633 // Skip over profiles that have yet to be added to the profile manager. | 629 // Skip over profiles that have yet to be added to the profile manager. |
634 // This will also skip over the NULL-profile context used to hold | 630 // This will also skip over the NULL-profile context used to hold |
635 // process-wide incidents. | 631 // process-wide incidents. |
636 if (!scan->second->added) | 632 if (!scan->second->added) |
637 continue; | 633 continue; |
638 // Also skip over profiles for which IncidentReporting is not enabled. | 634 // Also skip over profiles for which IncidentReporting is not enabled. |
639 if (!IsEnabledForProfile(scan->first)) | 635 if (!IsEnabledForProfile(scan->first)) |
640 continue; | 636 continue; |
641 // If the current profile has Extended Reporting enabled, stop looking and | 637 // If the current profile has Extended Reporting enabled, stop looking and |
642 // use that one. | 638 // use that one. |
643 if (scan->first->GetPrefs()->GetBoolean( | 639 if (IsExtendedReportingEnabled(*scan->first->GetPrefs())) { |
644 prefs::kSafeBrowsingExtendedReportingEnabled)) { | |
645 return scan->first; | 640 return scan->first; |
646 } | 641 } |
647 // Otherwise, store this one as a candidate and keep looking (in case we | 642 // Otherwise, store this one as a candidate and keep looking (in case we |
648 // find one with Extended Reporting enabled). | 643 // find one with Extended Reporting enabled). |
649 candidate = scan->first; | 644 candidate = scan->first; |
650 } | 645 } |
651 | 646 |
652 return candidate; | 647 return candidate; |
653 } | 648 } |
654 | 649 |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
907 | 902 |
908 ClientIncidentReport_EnvironmentData_Process* process = | 903 ClientIncidentReport_EnvironmentData_Process* process = |
909 report->mutable_environment()->mutable_process(); | 904 report->mutable_environment()->mutable_process(); |
910 | 905 |
911 process->set_metrics_consent( | 906 process->set_metrics_consent( |
912 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled()); | 907 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled()); |
913 | 908 |
914 // Find the profile that benefits from the strongest protections. | 909 // Find the profile that benefits from the strongest protections. |
915 Profile* eligible_profile = FindEligibleProfile(); | 910 Profile* eligible_profile = FindEligibleProfile(); |
916 process->set_extended_consent( | 911 process->set_extended_consent( |
917 eligible_profile ? eligible_profile->GetPrefs()->GetBoolean( | 912 eligible_profile && |
918 prefs::kSafeBrowsingExtendedReportingEnabled) : | 913 IsExtendedReportingEnabled(*eligible_profile->GetPrefs())); |
919 false); | |
920 | 914 |
921 process->set_field_trial_participant(enabled_by_field_trial_); | 915 process->set_field_trial_participant(enabled_by_field_trial_); |
922 | 916 |
923 // Associate process-wide incidents with the profile that benefits from the | 917 // Associate process-wide incidents with the profile that benefits from the |
924 // strongest safe browsing protections. If there is no such profile, drop the | 918 // strongest safe browsing protections. If there is no such profile, drop the |
925 // incidents. | 919 // incidents. |
926 ProfileContext* null_context = GetProfileContext(nullptr); | 920 ProfileContext* null_context = GetProfileContext(nullptr); |
927 if (null_context && null_context->HasIncidents()) { | 921 if (null_context && null_context->HasIncidents()) { |
928 if (eligible_profile) { | 922 if (eligible_profile) { |
929 ProfileContext* eligible_context = GetProfileContext(eligible_profile); | 923 ProfileContext* eligible_context = GetProfileContext(eligible_profile); |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1141 if (!profile->IsOffTheRecord()) | 1135 if (!profile->IsOffTheRecord()) |
1142 OnProfileDestroyed(profile); | 1136 OnProfileDestroyed(profile); |
1143 break; | 1137 break; |
1144 } | 1138 } |
1145 default: | 1139 default: |
1146 break; | 1140 break; |
1147 } | 1141 } |
1148 } | 1142 } |
1149 | 1143 |
1150 } // namespace safe_browsing | 1144 } // namespace safe_browsing |
OLD | NEW |