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

Unified Diff: chrome/browser/prefs/pref_hash_filter.cc

Issue 324493002: Move preference MACs to the protected preference stores. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comment typo. Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/prefs/pref_hash_filter.h ('k') | chrome/browser/prefs/pref_hash_filter_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prefs/pref_hash_filter.cc
diff --git a/chrome/browser/prefs/pref_hash_filter.cc b/chrome/browser/prefs/pref_hash_filter.cc
index 044fe18cd572365c59886cf16ba0d4275bfe2085..8bdf99444065a662e03baf3479fdd0c8c586ea5b 100644
--- a/chrome/browser/prefs/pref_hash_filter.cc
+++ b/chrome/browser/prefs/pref_hash_filter.cc
@@ -13,7 +13,9 @@
#include "base/strings/string_number_conversions.h"
#include "base/time/time.h"
#include "base/values.h"
+#include "chrome/browser/prefs/pref_hash_store.h"
#include "chrome/browser/prefs/pref_hash_store_transaction.h"
+#include "chrome/browser/prefs/tracked/dictionary_hash_store_contents.h"
#include "chrome/browser/prefs/tracked/tracked_atomic_preference.h"
#include "chrome/browser/prefs/tracked/tracked_split_preference.h"
#include "chrome/common/pref_names.h"
@@ -23,8 +25,10 @@ PrefHashFilter::PrefHashFilter(
scoped_ptr<PrefHashStore> pref_hash_store,
const std::vector<TrackedPreferenceMetadata>& tracked_preferences,
TrackedPreferenceValidationDelegate* delegate,
- size_t reporting_ids_count)
- : pref_hash_store_(pref_hash_store.Pass()) {
+ size_t reporting_ids_count,
+ bool report_super_mac_validity)
+ : pref_hash_store_(pref_hash_store.Pass()),
+ report_super_mac_validity_(report_super_mac_validity) {
DCHECK(pref_hash_store_);
DCHECK_GE(reporting_ids_count, tracked_preferences.size());
@@ -96,15 +100,16 @@ void PrefHashFilter::ClearResetTime(PrefService* user_prefs) {
user_prefs->ClearPref(prefs::kPreferenceResetTime);
}
-void PrefHashFilter::Initialize(const PrefStore& pref_store) {
+void PrefHashFilter::Initialize(base::DictionaryValue* pref_store_contents) {
scoped_ptr<PrefHashStoreTransaction> hash_store_transaction(
- pref_hash_store_->BeginTransaction());
+ pref_hash_store_->BeginTransaction(scoped_ptr<HashStoreContents>(
+ new DictionaryHashStoreContents(pref_store_contents))));
for (TrackedPreferencesMap::const_iterator it = tracked_paths_.begin();
it != tracked_paths_.end(); ++it) {
const std::string& initialized_path = it->first;
const TrackedPreference* initialized_preference = it->second;
const base::Value* value = NULL;
- pref_store.GetValue(initialized_path, &value);
+ pref_store_contents->Get(initialized_path, &value);
initialized_preference->OnNewValue(value, hash_store_transaction.get());
}
}
@@ -121,12 +126,13 @@ void PrefHashFilter::FilterUpdate(const std::string& path) {
// disk. This is required as storing the hash everytime a pref's value changes
// is too expensive (see perf regression @ http://crbug.com/331273).
void PrefHashFilter::FilterSerializeData(
- const base::DictionaryValue* pref_store_contents) {
+ base::DictionaryValue* pref_store_contents) {
if (!changed_paths_.empty()) {
base::TimeTicks checkpoint = base::TimeTicks::Now();
{
scoped_ptr<PrefHashStoreTransaction> hash_store_transaction(
- pref_hash_store_->BeginTransaction());
+ pref_hash_store_->BeginTransaction(scoped_ptr<HashStoreContents>(
+ new DictionaryHashStoreContents(pref_store_contents))));
for (ChangedPathsMap::const_iterator it = changed_paths_.begin();
it != changed_paths_.end(); ++it) {
const std::string& changed_path = it->first;
@@ -143,21 +149,6 @@ void PrefHashFilter::FilterSerializeData(
UMA_HISTOGRAM_TIMES("Settings.FilterSerializeDataTime",
base::TimeTicks::Now() - checkpoint);
}
-
- // Flush the |pref_hash_store_| to disk if it has pending writes. This is done
- // here in an effort to flush the hash store to disk as close as possible to
- // its matching value store (currently being flushed) to reduce the likelihood
- // of MAC corruption in race condition scenarios where a crash occurs in the
- // 10 seconds window where it would typically be possible that only one
- // of the two stores has been flushed to disk (this now explicitly makes this
- // race window as small as possible).
- // Note that, if the |pref_hash_store_| has pending writes, this call will
- // force serialization of its store to disk. As FilterSerializeData is already
- // intercepting the serialization of its value store this would result in an
- // infinite loop should the hash store also be the value store -- thus this
- // should be removed when we move to such a model (where it will no longer be
- // necessary anyways).
- pref_hash_store_->CommitPendingWrite();
}
void PrefHashFilter::FinalizeFilterOnLoad(
@@ -170,7 +161,13 @@ void PrefHashFilter::FinalizeFilterOnLoad(
bool did_reset = false;
{
scoped_ptr<PrefHashStoreTransaction> hash_store_transaction(
- pref_hash_store_->BeginTransaction());
+ pref_hash_store_->BeginTransaction(scoped_ptr<HashStoreContents>(
+ new DictionaryHashStoreContents(pref_store_contents.get()))));
+ if (report_super_mac_validity_) {
+ UMA_HISTOGRAM_BOOLEAN("Settings.HashesDictionaryTrusted",
+ hash_store_transaction->IsSuperMACValid());
+ }
+
for (TrackedPreferencesMap::const_iterator it = tracked_paths_.begin();
it != tracked_paths_.end(); ++it) {
if (it->second->EnforceAndReport(pref_store_contents.get(),
@@ -179,6 +176,8 @@ void PrefHashFilter::FinalizeFilterOnLoad(
prefs_altered = true;
}
}
+ if (hash_store_transaction->StampSuperMac())
+ prefs_altered = true;
}
if (did_reset) {
« no previous file with comments | « chrome/browser/prefs/pref_hash_filter.h ('k') | chrome/browser/prefs/pref_hash_filter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698