15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CHROME_BROWSER_PREFS_TRACKED_TRACKED_ATOMIC_PREFERENCE_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CHROME_BROWSER_PREFS_TRACKED_TRACKED_ATOMIC_PREFERENCE_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string>
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/compiler_specific.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/macros.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/prefs/pref_hash_filter.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/prefs/tracked/tracked_preference.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/prefs/tracked/tracked_preference_helper.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TrackedPreferenceValidationDelegate;
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// A TrackedAtomicPreference is tracked as a whole. A hash is stored for its
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// entire value and it is entirely reset on mismatch. An optional delegate is
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// notified of the status of the preference during enforcement.
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class TrackedAtomicPreference : public TrackedPreference {
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  TrackedAtomicPreference(const std::string& pref_path,
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                          size_t reporting_id,
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                          size_t reporting_ids_count,
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                          PrefHashFilter::EnforcementLevel enforcement_level,
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                          TrackedPreferenceValidationDelegate* delegate);
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TrackedPreference implementation.
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void OnNewValue(const base::Value* value,
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                          PrefHashStoreTransaction* transaction) const OVERRIDE;
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool EnforceAndReport(
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::DictionaryValue* pref_store_contents,
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      PrefHashStoreTransaction* transaction) const OVERRIDE;
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const std::string pref_path_;
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const TrackedPreferenceHelper helper_;
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  TrackedPreferenceValidationDelegate* delegate_;
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TrackedAtomicPreference);
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // CHROME_BROWSER_PREFS_TRACKED_TRACKED_ATOMIC_PREFERENCE_H_
45