1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SYNC_DATA_H_ 6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_SYNC_DATA_H_ 7 8#include <string> 9 10#include "base/version.h" 11#include "sync/api/sync_change.h" 12#include "url/gurl.h" 13 14namespace syncer { 15class SyncData; 16} 17 18namespace sync_pb { 19class ExtensionSpecifics; 20} 21 22namespace extensions { 23 24class Extension; 25 26// A class that encapsulates the synced properties of an Extension. 27class ExtensionSyncData { 28 public: 29 ExtensionSyncData(); 30 explicit ExtensionSyncData(const syncer::SyncData& sync_data); 31 explicit ExtensionSyncData(const syncer::SyncChange& sync_change); 32 ExtensionSyncData(const Extension& extension, 33 bool enabled, 34 bool incognito_enabled, 35 bool remote_install); 36 ~ExtensionSyncData(); 37 38 // Retrieve sync data from this class. 39 syncer::SyncData GetSyncData() const; 40 syncer::SyncChange GetSyncChange( 41 syncer::SyncChange::SyncChangeType change_type) const; 42 43 // Convert an ExtensionSyncData back out to a sync structure. 44 void PopulateExtensionSpecifics(sync_pb::ExtensionSpecifics* specifics) const; 45 46 // Populate this class from sync inputs. 47 void PopulateFromExtensionSpecifics( 48 const sync_pb::ExtensionSpecifics& specifics); 49 50 void set_uninstalled(bool uninstalled); 51 52 const std::string& id() const { return id_; } 53 54 // Version-independent properties (i.e., used even when the 55 // version of the currently-installed extension doesn't match 56 // |version|). 57 bool uninstalled() const { return uninstalled_; } 58 bool enabled() const { return enabled_; } 59 bool incognito_enabled() const { return incognito_enabled_; } 60 bool remote_install() const { return remote_install_; } 61 bool installed_by_custodian() const { return installed_by_custodian_; } 62 63 // Version-dependent properties (i.e., should be used only when the 64 // version of the currenty-installed extension matches |version|). 65 const Version& version() const { return version_; } 66 const GURL& update_url() const { return update_url_; } 67 // Used only for debugging. 68 const std::string& name() const { return name_; } 69 70 private: 71 // Populate this class from sync inputs. 72 void PopulateFromSyncData(const syncer::SyncData& sync_data); 73 74 std::string id_; 75 bool uninstalled_; 76 bool enabled_; 77 bool incognito_enabled_; 78 bool remote_install_; 79 bool installed_by_custodian_; 80 Version version_; 81 GURL update_url_; 82 std::string name_; 83}; 84 85} // namespace extensions 86 87#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SYNC_DATA_H_ 88