// 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_SETTING_SYNC_DATA_H_ #define CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTING_SYNC_DATA_H_ #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "base/values.h" #include "sync/api/sync_change.h" namespace syncer { class SyncData; } namespace sync_pb { class ExtensionSettingSpecifics; } namespace extensions { // Container for data interpreted from sync data/changes for an extension or // app setting. Safe and efficient to copy. class SettingSyncData { public: // Creates from a sync change. explicit SettingSyncData(const syncer::SyncChange& sync_change); // Creates from sync data. |change_type| will be ACTION_INVALID. explicit SettingSyncData(const syncer::SyncData& sync_data); // Creates explicitly. SettingSyncData( syncer::SyncChange::SyncChangeType change_type, const std::string& extension_id, const std::string& key, scoped_ptr value); ~SettingSyncData(); // Returns the type of the sync change; may be ACTION_INVALID. syncer::SyncChange::SyncChangeType change_type() const; // Returns the extension id the setting is for. const std::string& extension_id() const; // Returns the settings key. const std::string& key() const; // Returns the value of the setting. const base::Value& value() const; private: // Ref-counted container for the data. // TODO(kalman): Use browser_sync::Immutable. class Internal : public base::RefCountedThreadSafe { public: Internal( syncer::SyncChange::SyncChangeType change_type, const std::string& extension_id, const std::string& key, scoped_ptr value); syncer::SyncChange::SyncChangeType change_type_; std::string extension_id_; std::string key_; scoped_ptr value_; private: friend class base::RefCountedThreadSafe; ~Internal(); }; // Initializes internal_ from sync data for an extension or app setting. void Init(syncer::SyncChange::SyncChangeType change_type, const syncer::SyncData& sync_data); // Initializes internal_ from extension specifics. void InitFromExtensionSettingSpecifics( syncer::SyncChange::SyncChangeType change_type, const sync_pb::ExtensionSettingSpecifics& specifics); scoped_refptr internal_; }; typedef std::vector SettingSyncDataList; } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTING_SYNC_DATA_H_