| // Copyright (c) 2012 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 CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTINGS_SYNC_PROCESSOR_H_ |
| #define CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTINGS_SYNC_PROCESSOR_H_ |
| |
| #include <set> |
| #include <string> |
| |
| #include "chrome/browser/value_store/value_store_change.h" |
| #include "sync/api/sync_error.h" |
| |
| namespace syncer { |
| class SyncChangeProcessor; |
| } // namespace syncer |
| |
| namespace extensions { |
| |
| // A wrapper for a SyncChangeProcessor that deals specifically with the syncing |
| // of a single extension's settings. Handles: |
| // - translating SettingChanges into calls into the Sync API. |
| // - deciding whether to ADD/REMOVE/SET depending on the current state of |
| // settings. |
| // - rate limiting (inherently per-extension, which is what we want). |
| class SettingsSyncProcessor { |
| public: |
| SettingsSyncProcessor(const std::string& extension_id, |
| syncer::ModelType type, |
| syncer::SyncChangeProcessor* sync_processor); |
| ~SettingsSyncProcessor(); |
| |
| // Initializes this with the initial state of sync. |
| void Init(const base::DictionaryValue& initial_state); |
| |
| // Sends |changes| to sync. |
| syncer::SyncError SendChanges(const ValueStoreChangeList& changes); |
| |
| // Informs this that |changes| have been receieved from sync. No action will |
| // be taken, but this must be notified for internal bookkeeping. |
| void NotifyChanges(const ValueStoreChangeList& changes); |
| |
| syncer::ModelType type() { return type_; } |
| |
| private: |
| // ID of the extension the changes are for. |
| const std::string extension_id_; |
| |
| // Sync model type. Either EXTENSION_SETTING or APP_SETTING. |
| const syncer::ModelType type_; |
| |
| // The sync processor used to send changes to sync. |
| syncer::SyncChangeProcessor* const sync_processor_; |
| |
| // Whether Init() has been called. |
| bool initialized_; |
| |
| // Keys of the settings that are currently being synced. Used to decide what |
| // kind of action (ADD, UPDATE, REMOVE) to send to sync. |
| std::set<std::string> synced_keys_; |
| |
| DISALLOW_COPY_AND_ASSIGN(SettingsSyncProcessor); |
| }; |
| |
| } // namespace extensions |
| |
| #endif // CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTINGS_SYNC_PROCESSOR_H_ |