// 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 #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "base/memory/scoped_vector.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(); // May return ACTION_INVALID if this object represents sync data that isn't // associated with a sync operation. syncer::SyncChange::SyncChangeType change_type() const { return change_type_; } const std::string& extension_id() const { return extension_id_; } const std::string& key() const { return key_; } // value() cannot be called if PassValue() has been called. const base::Value& value() const { return *value_; } // Releases ownership of the value to the caller. Neither value() nor // PassValue() can be after this. scoped_ptr PassValue(); private: // Populates the extension ID, key, and value from |sync_data|. This will be // either an extension or app settings data type. void ExtractSyncData(const syncer::SyncData& sync_data); syncer::SyncChange::SyncChangeType change_type_; std::string extension_id_; std::string key_; scoped_ptr value_; DISALLOW_COPY_AND_ASSIGN(SettingSyncData); }; typedef ScopedVector SettingSyncDataList; } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTING_SYNC_DATA_H_