| Index: chrome/browser/metrics/variations/variations_seed_store.h
|
| diff --git a/chrome/browser/metrics/variations/variations_seed_store.h b/chrome/browser/metrics/variations/variations_seed_store.h
|
| index 2de275f7a4fdf141a30bba3315ec251254772310..0598e908066a0c25751507021c1799fe7498b01c 100644
|
| --- a/chrome/browser/metrics/variations/variations_seed_store.h
|
| +++ b/chrome/browser/metrics/variations/variations_seed_store.h
|
| @@ -32,15 +32,20 @@ class VariationsSeedStore {
|
| // successful, |seed| will contain the loaded data and true is returned.
|
| bool LoadSeed(variations::VariationsSeed* seed);
|
|
|
| - // Stores the given seed data (serialized protobuf data) to local state, along
|
| + // Stores the given seed |data| (serialized protobuf) to local state, along
|
| // with a base64-encoded digital signature for seed and the date when it was
|
| - // fetched. The |seed_data| will be base64 encoded for storage. If the string
|
| - // is invalid, the existing prefs are left as is and false is returned. On
|
| - // success and if |parsed_seed| is not NULL, |parsed_seed| will be filled
|
| - // with the de-serialized protobuf decoded from |seed_data|.
|
| - bool StoreSeedData(const std::string& seed_data,
|
| + // fetched. If |is_delta_compressed| is true, treats |data| as being delta
|
| + // compressed and attempts to decode it first using the store's seed data.
|
| + // The actual seed data will be base64 encoded for storage. If the string
|
| + // is invalid, the existing prefs are untouched and false is returned.
|
| + // Additionally, stores the |country_code| that was received with the seed in
|
| + // a separate pref. On success and if |parsed_seed| is not NULL, |parsed_seed|
|
| + // will be filled with the de-serialized decoded protobuf.
|
| + bool StoreSeedData(const std::string& data,
|
| const std::string& base64_seed_signature,
|
| + const std::string& country_code,
|
| const base::Time& date_fetched,
|
| + bool is_delta_compressed,
|
| variations::VariationsSeed* parsed_seed);
|
|
|
| // Updates |kVariationsSeedDate| and logs when previous date was from a
|
| @@ -52,13 +57,18 @@ class VariationsSeedStore {
|
| return variations_serial_number_;
|
| }
|
|
|
| - // Registers Local State prefs used by this class.
|
| - static void RegisterPrefs(PrefRegistrySimple* registry);
|
| + // Returns whether the last loaded or stored seed has the country field set.
|
| + bool seed_has_country_code() const {
|
| + return seed_has_country_code_;
|
| + }
|
|
|
| // Returns the invalid signature in base64 format, or an empty string if the
|
| // signature was valid, missing, or if signature verification is disabled.
|
| std::string GetInvalidSignature() const;
|
|
|
| + // Registers Local State prefs used by this class.
|
| + static void RegisterPrefs(PrefRegistrySimple* registry);
|
| +
|
| protected:
|
| // Note: UMA histogram enum - don't re-order or remove entries.
|
| enum VerifySignatureResult {
|
| @@ -82,6 +92,7 @@ class VariationsSeedStore {
|
|
|
| private:
|
| FRIEND_TEST_ALL_PREFIXES(VariationsSeedStoreTest, VerifySeedSignature);
|
| + FRIEND_TEST_ALL_PREFIXES(VariationsSeedStoreTest, ApplyDeltaPatch);
|
|
|
| // Clears all prefs related to variations seed storage.
|
| void ClearPrefs();
|
| @@ -89,12 +100,31 @@ class VariationsSeedStore {
|
| // Reads the variations seed data from prefs; returns true on success.
|
| bool ReadSeedData(std::string* seed_data);
|
|
|
| + // Internal version of |StoreSeedData()| that assumes |seed_data| is not delta
|
| + // compressed.
|
| + bool StoreSeedDataNoDelta(
|
| + const std::string& seed_data,
|
| + const std::string& base64_seed_signature,
|
| + const std::string& country_code,
|
| + const base::Time& date_fetched,
|
| + variations::VariationsSeed* parsed_seed);
|
| +
|
| + // Applies a delta-compressed |patch| to |existing_data|, producing the result
|
| + // in |output|. Returns whether the operation was successful.
|
| + static bool ApplyDeltaPatch(const std::string& existing_data,
|
| + const std::string& patch,
|
| + std::string* output);
|
| +
|
| // The pref service used to persist the variations seed.
|
| PrefService* local_state_;
|
|
|
| // Cached serial number from the most recently fetched variations seed.
|
| std::string variations_serial_number_;
|
|
|
| + // Whether the most recently fetched variations seed has the country code
|
| + // field set.
|
| + bool seed_has_country_code_;
|
| +
|
| // Keeps track of an invalid signature.
|
| std::string invalid_base64_signature_;
|
|
|
|
|