Index: components/user_prefs/tracked/pref_hash_filter.cc |
diff --git a/components/user_prefs/tracked/pref_hash_filter.cc b/components/user_prefs/tracked/pref_hash_filter.cc |
index 1101080cd76db95717be6db8ce0a73c33afe465e..d72a5c6b9e99062e5f305d80208d7144770fbe70 100644 |
--- a/components/user_prefs/tracked/pref_hash_filter.cc |
+++ b/components/user_prefs/tracked/pref_hash_filter.cc |
@@ -8,10 +8,8 @@ |
#include <algorithm> |
#include <utility> |
-#include "base/bind.h" |
#include "base/logging.h" |
#include "base/macros.h" |
-#include "base/memory/ptr_util.h" |
#include "base/metrics/histogram_macros.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/time/time.h" |
@@ -53,27 +51,16 @@ |
PrefHashFilter::PrefHashFilter( |
std::unique_ptr<PrefHashStore> pref_hash_store, |
- StoreContentsPair external_validation_hash_store_pair, |
const std::vector<TrackedPreferenceMetadata>& tracked_preferences, |
const base::Closure& on_reset_on_load, |
TrackedPreferenceValidationDelegate* delegate, |
size_t reporting_ids_count, |
bool report_super_mac_validity) |
: pref_hash_store_(std::move(pref_hash_store)), |
- external_validation_hash_store_pair_( |
- external_validation_hash_store_pair.first |
- ? base::make_optional( |
- std::move(external_validation_hash_store_pair)) |
- : base::nullopt), |
on_reset_on_load_(on_reset_on_load), |
report_super_mac_validity_(report_super_mac_validity) { |
DCHECK(pref_hash_store_); |
DCHECK_GE(reporting_ids_count, tracked_preferences.size()); |
- // Verify that, if |external_validation_hash_store_pair_| is present, both its |
- // items are non-null. |
- DCHECK(!external_validation_hash_store_pair_.has_value() || |
- (external_validation_hash_store_pair_->first && |
- external_validation_hash_store_pair_->second)); |
for (size_t i = 0; i < tracked_preferences.size(); ++i) { |
const TrackedPreferenceMetadata& metadata = tracked_preferences[i]; |
@@ -152,7 +139,7 @@ |
it != tracked_paths_.end(); ++it) { |
const std::string& initialized_path = it->first; |
const TrackedPreference* initialized_preference = it->second; |
- const base::Value* value = nullptr; |
+ const base::Value* value = NULL; |
pref_store_contents->Get(initialized_path, &value); |
initialized_preference->OnNewValue(value, hash_store_transaction.get()); |
} |
@@ -171,40 +158,31 @@ |
// is too expensive (see perf regression @ http://crbug.com/331273). |
PrefFilter::OnWriteCallbackPair PrefHashFilter::FilterSerializeData( |
base::DictionaryValue* pref_store_contents) { |
- // Generate the callback pair before clearing |changed_paths_|. |
- PrefFilter::OnWriteCallbackPair callback_pair = |
- GetOnWriteSynchronousCallbacks(pref_store_contents); |
- |
if (!changed_paths_.empty()) { |
base::TimeTicks checkpoint = base::TimeTicks::Now(); |
{ |
DictionaryHashStoreContents dictionary_contents(pref_store_contents); |
std::unique_ptr<PrefHashStoreTransaction> hash_store_transaction( |
pref_hash_store_->BeginTransaction(&dictionary_contents)); |
- |
- std::unique_ptr<PrefHashStoreTransaction> |
- external_validation_hash_store_transaction; |
- if (external_validation_hash_store_pair_) { |
- external_validation_hash_store_transaction = |
- external_validation_hash_store_pair_->first->BeginTransaction( |
- external_validation_hash_store_pair_->second.get()); |
- } |
- |
for (ChangedPathsMap::const_iterator it = changed_paths_.begin(); |
it != changed_paths_.end(); ++it) { |
const std::string& changed_path = it->first; |
const TrackedPreference* changed_preference = it->second; |
- const base::Value* value = nullptr; |
+ const base::Value* value = NULL; |
pref_store_contents->Get(changed_path, &value); |
changed_preference->OnNewValue(value, hash_store_transaction.get()); |
} |
changed_paths_.clear(); |
} |
+ // TODO(gab): Remove this histogram by Feb 21 2014; after sufficient timing |
+ // data has been gathered from the wild to be confident this doesn't |
+ // significantly affect performance on the UI thread. |
UMA_HISTOGRAM_TIMES("Settings.FilterSerializeDataTime", |
base::TimeTicks::Now() - checkpoint); |
} |
- return callback_pair; |
+ // TODO(proberge): return callbacks if external validation is enabled. |
+ return std::make_pair(base::Closure(), base::Callback<void(bool success)>()); |
} |
void PrefHashFilter::FinalizeFilterOnLoad( |
@@ -220,14 +198,6 @@ |
std::unique_ptr<PrefHashStoreTransaction> hash_store_transaction( |
pref_hash_store_->BeginTransaction(&dictionary_contents)); |
- std::unique_ptr<PrefHashStoreTransaction> |
- external_validation_hash_store_transaction; |
- if (external_validation_hash_store_pair_) { |
- external_validation_hash_store_transaction = |
- external_validation_hash_store_pair_->first->BeginTransaction( |
- external_validation_hash_store_pair_->second.get()); |
- } |
- |
CleanupDeprecatedTrackedPreferences( |
pref_store_contents.get(), hash_store_transaction.get()); |
@@ -238,9 +208,8 @@ |
for (TrackedPreferencesMap::const_iterator it = tracked_paths_.begin(); |
it != tracked_paths_.end(); ++it) { |
- if (it->second->EnforceAndReport( |
- pref_store_contents.get(), hash_store_transaction.get(), |
- external_validation_hash_store_transaction.get())) { |
+ if (it->second->EnforceAndReport(pref_store_contents.get(), |
+ hash_store_transaction.get())) { |
did_reset = true; |
prefs_altered = true; |
} |
@@ -259,114 +228,12 @@ |
on_reset_on_load_.Run(); |
} |
+ // TODO(gab): Remove this histogram by Feb 21 2014; after sufficient timing |
+ // data has been gathered from the wild to be confident this doesn't |
+ // significantly affect startup. |
UMA_HISTOGRAM_TIMES("Settings.FilterOnLoadTime", |
base::TimeTicks::Now() - checkpoint); |
post_filter_on_load_callback.Run(std::move(pref_store_contents), |
prefs_altered); |
} |
- |
-// static |
-void PrefHashFilter::ClearFromExternalStore( |
- HashStoreContents* external_validation_hash_store_contents, |
- const base::DictionaryValue* changed_paths_and_macs) { |
- DCHECK(!changed_paths_and_macs->empty()); |
- |
- for (base::DictionaryValue::Iterator it(*changed_paths_and_macs); |
- !it.IsAtEnd(); it.Advance()) { |
- external_validation_hash_store_contents->RemoveEntry(it.key()); |
- } |
-} |
- |
-// static |
-void PrefHashFilter::FlushToExternalStore( |
- std::unique_ptr<HashStoreContents> external_validation_hash_store_contents, |
- std::unique_ptr<base::DictionaryValue> changed_paths_and_macs, |
- bool write_success) { |
- DCHECK(!changed_paths_and_macs->empty()); |
- DCHECK(external_validation_hash_store_contents); |
- if (!write_success) |
- return; |
- |
- for (base::DictionaryValue::Iterator it(*changed_paths_and_macs); |
- !it.IsAtEnd(); it.Advance()) { |
- const std::string& changed_path = it.key(); |
- |
- const base::DictionaryValue* split_values = nullptr; |
- if (it.value().GetAsDictionary(&split_values)) { |
- for (base::DictionaryValue::Iterator inner_it(*split_values); |
- !inner_it.IsAtEnd(); inner_it.Advance()) { |
- std::string mac; |
- bool is_string = inner_it.value().GetAsString(&mac); |
- DCHECK(is_string); |
- |
- external_validation_hash_store_contents->SetSplitMac( |
- changed_path, inner_it.key(), mac); |
- } |
- } else { |
- const base::StringValue* value_as_string; |
- bool is_string = it.value().GetAsString(&value_as_string); |
- DCHECK(is_string); |
- |
- external_validation_hash_store_contents->SetMac( |
- changed_path, value_as_string->GetString()); |
- } |
- } |
-} |
- |
-PrefFilter::OnWriteCallbackPair PrefHashFilter::GetOnWriteSynchronousCallbacks( |
- base::DictionaryValue* pref_store_contents) { |
- if (changed_paths_.empty() || !external_validation_hash_store_pair_) { |
- return std::make_pair(base::Closure(), |
- base::Callback<void(bool success)>()); |
- } |
- |
- std::unique_ptr<base::DictionaryValue> changed_paths_macs = |
- base::MakeUnique<base::DictionaryValue>(); |
- |
- for (ChangedPathsMap::const_iterator it = changed_paths_.begin(); |
- it != changed_paths_.end(); ++it) { |
- const std::string& changed_path = it->first; |
- const TrackedPreference* changed_preference = it->second; |
- |
- switch (changed_preference->GetType()) { |
- case TrackedPreferenceType::ATOMIC: { |
- const base::Value* new_value = nullptr; |
- pref_store_contents->Get(changed_path, &new_value); |
- changed_paths_macs->SetStringWithoutPathExpansion( |
- changed_path, |
- external_validation_hash_store_pair_->first->ComputeMac( |
- changed_path, new_value)); |
- break; |
- } |
- case TrackedPreferenceType::SPLIT: { |
- const base::DictionaryValue* dict_value = nullptr; |
- pref_store_contents->GetDictionary(changed_path, &dict_value); |
- changed_paths_macs->SetWithoutPathExpansion( |
- changed_path, |
- external_validation_hash_store_pair_->first->ComputeSplitMacs( |
- changed_path, dict_value)); |
- break; |
- } |
- } |
- } |
- |
- DCHECK(external_validation_hash_store_pair_->second->IsCopyable()) |
- << "External HashStoreContents must be copyable as it needs to be used " |
- "off-thread"; |
- |
- std::unique_ptr<HashStoreContents> hash_store_contents_copy = |
- external_validation_hash_store_pair_->second->MakeCopy(); |
- |
- // We can use raw pointers for the first callback instead of making more |
- // copies as it will be executed in sequence before the second callback, |
- // which owns the pointers. |
- HashStoreContents* raw_contents = hash_store_contents_copy.get(); |
- base::DictionaryValue* raw_changed_paths_macs = changed_paths_macs.get(); |
- |
- return std::make_pair( |
- base::Bind(&ClearFromExternalStore, base::Unretained(raw_contents), |
- base::Unretained(raw_changed_paths_macs)), |
- base::Bind(&FlushToExternalStore, base::Passed(&hash_store_contents_copy), |
- base::Passed(&changed_paths_macs))); |
-} |