summaryrefslogtreecommitdiff
path: root/chromium/services/preferences/tracked/pref_hash_store_transaction.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/services/preferences/tracked/pref_hash_store_transaction.h')
-rw-r--r--chromium/services/preferences/tracked/pref_hash_store_transaction.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/chromium/services/preferences/tracked/pref_hash_store_transaction.h b/chromium/services/preferences/tracked/pref_hash_store_transaction.h
new file mode 100644
index 00000000000..2e888859ee8
--- /dev/null
+++ b/chromium/services/preferences/tracked/pref_hash_store_transaction.h
@@ -0,0 +1,80 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_PREFERENCES_TRACKED_PREF_HASH_STORE_TRANSACTION_H_
+#define SERVICES_PREFERENCES_TRACKED_PREF_HASH_STORE_TRANSACTION_H_
+
+#include <string>
+#include <vector>
+
+#include "base/strings/string_piece.h"
+#include "services/preferences/public/interfaces/tracked_preference_validation_delegate.mojom.h"
+
+namespace base {
+class DictionaryValue;
+class Value;
+} // namespace base
+
+// Used to perform a series of checks/transformations on a PrefHashStore.
+class PrefHashStoreTransaction {
+ public:
+ // Finalizes any remaining work after the transaction has been performed.
+ virtual ~PrefHashStoreTransaction() {}
+
+ // Returns the suffix to be appended to UMA histograms for the store contained
+ // in this transaction.
+ virtual base::StringPiece GetStoreUMASuffix() const = 0;
+
+ // Checks |initial_value| against the existing stored value hash.
+ virtual prefs::mojom::TrackedPreferenceValidationDelegate::ValueState
+ CheckValue(const std::string& path,
+ const base::Value* initial_value) const = 0;
+
+ // Stores a hash of the current |value| of the preference at |path|.
+ virtual void StoreHash(const std::string& path, const base::Value* value) = 0;
+
+ // Checks |initial_value| against the existing stored hashes for the split
+ // preference at |path|. |initial_split_value| being an empty dictionary or
+ // NULL is equivalent. |invalid_keys| must initially be empty. |invalid_keys|
+ // will not be modified unless the return value is CHANGED, in which case it
+ // will be filled with the keys that are considered invalid (unknown or
+ // changed).
+ virtual prefs::mojom::TrackedPreferenceValidationDelegate::ValueState
+ CheckSplitValue(const std::string& path,
+ const base::DictionaryValue* initial_split_value,
+ std::vector<std::string>* invalid_keys) const = 0;
+
+ // Stores hashes for the |value| of the split preference at |path|.
+ // |split_value| being an empty dictionary or NULL is equivalent.
+ virtual void StoreSplitHash(const std::string& path,
+ const base::DictionaryValue* split_value) = 0;
+
+ // Indicates whether the store contains a hash for the preference at |path|.
+ virtual bool HasHash(const std::string& path) const = 0;
+
+ // Sets the hash for the preference at |path|.
+ // If |path| is a split preference |hash| must be a DictionaryValue whose
+ // keys are keys in the split preference and whose values are MACs of the
+ // corresponding values in the split preference.
+ // If |path| is an atomic preference |hash| must be a StringValue
+ // containing a MAC of the preference value.
+ // |hash| should originate from a PrefHashStore sharing the same MAC
+ // parameters as this transaction's store.
+ // The (in)validity of the super MAC will be maintained by this call.
+ virtual void ImportHash(const std::string& path, const base::Value* hash) = 0;
+
+ // Removes the hash stored at |path|. The (in)validity of the super MAC will
+ // be maintained by this call.
+ virtual void ClearHash(const std::string& path) = 0;
+
+ // Indicates whether the super MAC was successfully verified at the beginning
+ // of this transaction.
+ virtual bool IsSuperMACValid() const = 0;
+
+ // Forces a valid super MAC to be stored when this transaction terminates.
+ // Returns true if this results in a change to the store contents.
+ virtual bool StampSuperMac() = 0;
+};
+
+#endif // SERVICES_PREFERENCES_TRACKED_PREF_HASH_STORE_TRANSACTION_H_