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