Chromium Code Reviews| 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 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 125 if (!incidents_sent->GetDictionaryWithoutPathExpansion(data.type, | 125 if (!incidents_sent->GetDictionaryWithoutPathExpansion(data.type, |
| 126 &type_dict)) { | 126 &type_dict)) { |
| 127 type_dict = new base::DictionaryValue(); | 127 type_dict = new base::DictionaryValue(); |
| 128 incidents_sent->SetWithoutPathExpansion(data.type, type_dict); | 128 incidents_sent->SetWithoutPathExpansion(data.type, type_dict); |
| 129 } | 129 } |
| 130 type_dict->SetStringWithoutPathExpansion(data.key, | 130 type_dict->SetStringWithoutPathExpansion(data.key, |
| 131 base::UintToString(data.digest)); | 131 base::UintToString(data.digest)); |
| 132 } | 132 } |
| 133 } | 133 } |
| 134 | 134 |
| 135 // Removes a profile's prune state for legacy incident types. | |
| 136 void CleanLegacyPruneState(Profile* profile) { | |
| 137 static const IncidentType kLegacyTypes[] = { | |
| 138 IncidentType::OMNIBOX_INTERACTION, // TODO(grt): remove in M44. | |
|
robertshield
2015/01/27 14:12:02
Reference bug with milestone?
grt (UTC plus 2)
2015/01/27 18:33:06
Done.
| |
| 139 }; | |
| 140 | |
| 141 // Figure out if there are any values to remove before committing to making | |
| 142 // any changes since notifications are sent for pref dict modifications. | |
|
robertshield
2015/01/27 14:12:02
is this a performance concern or a functional one?
grt (UTC plus 2)
2015/01/27 18:33:06
Done.
| |
| 143 const base::Value* value = | |
| 144 profile->GetPrefs()->GetUserPrefValue(prefs::kSafeBrowsingIncidentsSent); | |
| 145 const base::DictionaryValue* incidents_sent = NULL; | |
| 146 if (!value || !value->GetAsDictionary(&incidents_sent)) | |
| 147 return; | |
| 148 std::vector<std::string> types_to_remove; | |
| 149 for (size_t i = 0; i < arraysize(kLegacyTypes); ++i) { | |
| 150 const std::string incident_type( | |
| 151 base::IntToString(static_cast<int32_t>(kLegacyTypes[i]))); | |
| 152 const base::DictionaryValue* type_dict = NULL; | |
| 153 if (incidents_sent->GetDictionaryWithoutPathExpansion(incident_type, | |
| 154 &type_dict)) { | |
| 155 types_to_remove.push_back(incident_type); | |
| 156 } | |
| 157 } | |
| 158 if (types_to_remove.empty()) | |
| 159 return; | |
| 160 | |
| 161 DictionaryPrefUpdate pref_update(profile->GetPrefs(), | |
| 162 prefs::kSafeBrowsingIncidentsSent); | |
| 163 for (const auto& incident_type : types_to_remove) | |
| 164 pref_update.Get()->RemoveWithoutPathExpansion(incident_type, NULL); | |
| 165 } | |
| 166 | |
| 135 // Runs |callback| on the thread to which |thread_runner| belongs. The callback | 167 // Runs |callback| on the thread to which |thread_runner| belongs. The callback |
| 136 // is run immediately if this function is called on |thread_runner|'s thread. | 168 // is run immediately if this function is called on |thread_runner|'s thread. |
| 137 void AddIncidentOnOriginThread( | 169 void AddIncidentOnOriginThread( |
| 138 const AddIncidentCallback& callback, | 170 const AddIncidentCallback& callback, |
| 139 scoped_refptr<base::SingleThreadTaskRunner> thread_runner, | 171 scoped_refptr<base::SingleThreadTaskRunner> thread_runner, |
| 140 scoped_ptr<Incident> incident) { | 172 scoped_ptr<Incident> incident) { |
| 141 if (thread_runner->BelongsToCurrentThread()) | 173 if (thread_runner->BelongsToCurrentThread()) |
| 142 callback.Run(incident.Pass()); | 174 callback.Run(incident.Pass()); |
| 143 else | 175 else |
| 144 thread_runner->PostTask(FROM_HERE, | 176 thread_runner->PostTask(FROM_HERE, |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 371 if (safe_browsing_enabled) | 403 if (safe_browsing_enabled) |
| 372 delayed_analysis_callbacks_.Start(); | 404 delayed_analysis_callbacks_.Start(); |
| 373 | 405 |
| 374 // Start a new report if this profile participates in safe browsing and there | 406 // Start a new report if this profile participates in safe browsing and there |
| 375 // are process-wide incidents. | 407 // are process-wide incidents. |
| 376 if (safe_browsing_enabled && GetProfileContext(NULL) && | 408 if (safe_browsing_enabled && GetProfileContext(NULL) && |
| 377 GetProfileContext(NULL)->incidents.size()) { | 409 GetProfileContext(NULL)->incidents.size()) { |
| 378 BeginReportProcessing(); | 410 BeginReportProcessing(); |
| 379 } | 411 } |
| 380 | 412 |
| 413 CleanLegacyPruneState(profile); | |
| 414 | |
| 381 // TODO(grt): register for pref change notifications to start delayed analysis | 415 // TODO(grt): register for pref change notifications to start delayed analysis |
| 382 // and/or report processing if sb is currently disabled but subsequently | 416 // and/or report processing if sb is currently disabled but subsequently |
| 383 // enabled. | 417 // enabled. |
| 384 | 418 |
| 385 // Nothing else to do if a report is not being assembled. | 419 // Nothing else to do if a report is not being assembled. |
| 386 if (!report_) | 420 if (!report_) |
| 387 return; | 421 return; |
| 388 | 422 |
| 389 // Drop all incidents associated with this profile that were received prior to | 423 // Drop all incidents associated with this profile that were received prior to |
| 390 // its addition if the profile is not participating in safe browsing. | 424 // its addition if the profile is not participating in safe browsing. |
| (...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 922 if (!profile->IsOffTheRecord()) | 956 if (!profile->IsOffTheRecord()) |
| 923 OnProfileDestroyed(profile); | 957 OnProfileDestroyed(profile); |
| 924 break; | 958 break; |
| 925 } | 959 } |
| 926 default: | 960 default: |
| 927 break; | 961 break; |
| 928 } | 962 } |
| 929 } | 963 } |
| 930 | 964 |
| 931 } // namespace safe_browsing | 965 } // namespace safe_browsing |
| OLD | NEW |