1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef COMPONENTS_INVALIDATION_INVALIDATOR_STORAGE_H_
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define COMPONENTS_INVALIDATION_INVALIDATOR_STORAGE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/compiler_specific.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/macros.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread_checker.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/invalidation/invalidation_state_tracker.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass PrefRegistrySimple;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefService;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs {
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PrefRegistrySyncable;
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
20a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)namespace invalidation {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Wraps PrefService in an InvalidationStateTracker to allow SyncNotifiers
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// to use PrefService as persistence for invalidation state. It is not thread
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// safe, and lives on the UI thread.
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass InvalidatorStorage : public syncer::InvalidationStateTracker {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // |pref_service| may not be NULL and must outlive |this|.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit InvalidatorStorage(PrefService* pref_service);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~InvalidatorStorage();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Register prefs to be used by per-Profile instances of this class which
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // store invalidation state in Profile prefs.
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Register prefs to be used by a device-global instance of this class which
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // stores invalidation state in local state. This is used on Chrome OS only.
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static void RegisterPrefs(PrefRegistrySimple* registry);
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // InvalidationStateTracker implementation.
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void ClearAndSetNewClientId(const std::string& client_id) OVERRIDE;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual std::string GetInvalidatorClientId() const OVERRIDE;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetBootstrapData(const std::string& data) OVERRIDE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetBootstrapData() const OVERRIDE;
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void SetSavedInvalidations(
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const syncer::UnackedInvalidationsMap& map) OVERRIDE;
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual syncer::UnackedInvalidationsMap GetSavedInvalidations()
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const OVERRIDE;
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void Clear() OVERRIDE;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::ThreadChecker thread_checker_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* const pref_service_;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(InvalidatorStorage);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
58a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)}  // namespace invalidation
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // COMPONENTS_INVALIDATION_INVALIDATOR_STORAGE_H_
61