| Index: components/user_prefs/tracked/pref_hash_filter.h
|
| diff --git a/components/user_prefs/tracked/pref_hash_filter.h b/components/user_prefs/tracked/pref_hash_filter.h
|
| index 8652a7f817c545a5b48e1154c60af1427eadbbbb..14ee9c69cdc099ac62012f0c1f4b8e4f88a0b050 100644
|
| --- a/components/user_prefs/tracked/pref_hash_filter.h
|
| +++ b/components/user_prefs/tracked/pref_hash_filter.h
|
| @@ -15,10 +15,13 @@
|
| #include "base/callback.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/containers/scoped_ptr_hash_map.h"
|
| +#include "base/files/file_path.h"
|
| #include "base/macros.h"
|
| +#include "base/optional.h"
|
| #include "components/user_prefs/tracked/interceptable_pref_filter.h"
|
| #include "components/user_prefs/tracked/tracked_preference.h"
|
|
|
| +class HashStoreContents;
|
| class PrefHashStore;
|
| class PrefService;
|
| class PrefStore;
|
| @@ -64,6 +67,9 @@ class PrefHashFilter : public InterceptablePrefFilter {
|
| ValueType value_type;
|
| };
|
|
|
| + using StoreContentsPair = std::pair<std::unique_ptr<PrefHashStore>,
|
| + std::unique_ptr<HashStoreContents>>;
|
| +
|
| // Constructs a PrefHashFilter tracking the specified |tracked_preferences|
|
| // using |pref_hash_store| to check/store hashes. An optional |delegate| is
|
| // notified of the status of each preference as it is checked.
|
| @@ -73,8 +79,11 @@ class PrefHashFilter : public InterceptablePrefFilter {
|
| // than |tracked_preferences.size()|). If |report_super_mac_validity| is true,
|
| // the state of the super MAC will be reported via UMA during
|
| // FinalizeFilterOnLoad.
|
| + // |external_validation_hash_store_pair_| will be used (if non-null) to
|
| + // perform extra validations without triggering resets.
|
| 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,
|
| @@ -101,7 +110,8 @@ class PrefHashFilter : public InterceptablePrefFilter {
|
|
|
| // PrefFilter remaining implementation.
|
| void FilterUpdate(const std::string& path) override;
|
| - void FilterSerializeData(base::DictionaryValue* pref_store_contents) override;
|
| + base::Callback<void(bool)> FilterSerializeData(
|
| + base::DictionaryValue* pref_store_contents) override;
|
|
|
| private:
|
| // InterceptablePrefFilter implementation.
|
| @@ -110,6 +120,19 @@ class PrefHashFilter : public InterceptablePrefFilter {
|
| std::unique_ptr<base::DictionaryValue> pref_store_contents,
|
| bool prefs_altered) override;
|
|
|
| + // Helper function to generate the callback returned by |FilterSerializeData|.
|
| + // The returned callback is thread-safe.
|
| + base::Callback<void(bool)> GetOnWriteSynchronousCallback(
|
| + base::DictionaryValue* pref_store_contents);
|
| +
|
| + // Flushes the MACs contained in |changed_paths_and_mac| to
|
| + // external_hash_store_contents if |write_success|, otherwise discards the
|
| + // changes.
|
| + static void PrefHashFilter::FlushToExternalStore(
|
| + std::unique_ptr<HashStoreContents> external_hash_store_contents,
|
| + std::unique_ptr<base::DictionaryValue> changed_paths_and_macs,
|
| + bool write_success);
|
| +
|
| // Callback to be invoked only once (and subsequently reset) on the next
|
| // FilterOnLoad event. It will be allowed to modify the |prefs| handed to
|
| // FilterOnLoad before handing them back to this PrefHashFilter.
|
| @@ -120,12 +143,18 @@ class PrefHashFilter : public InterceptablePrefFilter {
|
| typedef base::ScopedPtrHashMap<std::string,
|
| std::unique_ptr<TrackedPreference>>
|
| TrackedPreferencesMap;
|
| +
|
| // A map from changed paths to their corresponding TrackedPreferences (which
|
| // aren't owned by this map).
|
| typedef std::map<std::string, const TrackedPreference*> ChangedPathsMap;
|
|
|
| std::unique_ptr<PrefHashStore> pref_hash_store_;
|
|
|
| + // A store and contents on which to perform extra validations without
|
| + // triggering resets.
|
| + // Will be null if the platform does not support external validation.
|
| + const base::Optional<StoreContentsPair> external_validation_hash_store_pair_;
|
| +
|
| // Invoked if a reset occurs in a call to FilterOnLoad.
|
| const base::Closure on_reset_on_load_;
|
|
|
|
|