Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(404)

Side by Side Diff: chrome/browser/extensions/extension_sync_data.cc

Issue 7564037: Apps/Extensions Sync refactoring -- delete most of the old glue, implement new sync API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_sync_data.h" 5 #include "chrome/browser/extensions/extension_sync_data.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/browser/extensions/extension_service.h"
9 #include "chrome/browser/sync/protocol/app_specifics.pb.h"
10 #include "chrome/browser/sync/protocol/extension_specifics.pb.h"
8 11
9 ExtensionSyncData::ExtensionSyncData() 12 ExtensionSyncData::ExtensionSyncData()
10 : uninstalled(false), enabled(false), incognito_enabled(false) {} 13 : uninstalled_(false), enabled_(false), incognito_enabled_(false) {}
11 14
12 ExtensionSyncData::~ExtensionSyncData() {} 15 ExtensionSyncData::~ExtensionSyncData() {}
13 16
14 void ExtensionSyncData::Merge(const ExtensionSyncData& new_data) { 17 ExtensionSyncData::ExtensionSyncData(const SyncData& sync_data)
15 CHECK_EQ(id, new_data.id); 18 : uninstalled_(false), enabled_(false), incognito_enabled_(false) {
16 CHECK(!uninstalled); 19 PopulateFromSyncData(sync_data);
17 CHECK(!new_data.uninstalled); 20 }
18 21
19 // Copy version-independent properties. 22 ExtensionSyncData::ExtensionSyncData(const SyncChange& sync_change) {
20 enabled = new_data.enabled; 23 PopulateFromSyncData(sync_change.sync_data());
21 incognito_enabled = new_data.incognito_enabled; 24 uninstalled_ = (sync_change.change_type() == SyncChange::ACTION_DELETE);
25 }
22 26
23 // Copy version-dependent properties if version <= new_data.version. 27 ExtensionSyncData::ExtensionSyncData(const Extension& extension,
24 if (version.CompareTo(new_data.version) <= 0) { 28 bool enabled,
25 version = new_data.version; 29 bool incognito_enabled)
26 update_url = new_data.update_url; 30 : uninstalled_(false) {
27 name = new_data.name; 31 id_ = extension.id();
32 uninstalled_ = false;
33 enabled_ = enabled;
34 incognito_enabled_ = incognito_enabled;
35 version_ = *extension.version();
36 update_url_ = extension.update_url();
37 name_ = extension.name();
38 type_ = extension.GetSyncType();
39 }
40
41 void ExtensionSyncData::PopulateSyncSpecifics(
42 sync_pb::ExtensionSpecifics* specifics) const {
43 DCHECK(Extension::IdIsValid(id_));
44 specifics->set_id(id_);
45 specifics->set_update_url(update_url_.spec());
46 specifics->set_version(version_.GetString());
47 specifics->set_enabled(enabled_);
48 specifics->set_incognito_enabled(incognito_enabled_);
49 specifics->set_name(name_);
50 }
51
52 SyncData ExtensionSyncData::GetSyncData() const {
53 sync_pb::EntitySpecifics specifics;
54 sync_pb::ExtensionSpecifics* ext_specifics;
55
56 switch (type_) {
57 case Extension::SYNC_TYPE_EXTENSION:
58 ext_specifics = specifics.MutableExtension(sync_pb::extension);
59 break;
60 case Extension::SYNC_TYPE_APP:
61 ext_specifics =
62 specifics.MutableExtension(sync_pb::app)->mutable_extension();
63 break;
64 default:
65 NOTREACHED();
28 } 66 }
67
68 PopulateSyncSpecifics(ext_specifics);
69
70 return SyncData::CreateLocalData(id_, name_, specifics);
29 } 71 }
72
73 SyncChange ExtensionSyncData::GetSyncChange(
74 SyncChange::SyncChangeType change_type) const {
75 return SyncChange(change_type, GetSyncData());
76 }
77
78 void ExtensionSyncData::PopulateFromExtensionSpecifics(
79 const sync_pb::ExtensionSpecifics& specifics) {
80 if (!Extension::IdIsValid(specifics.id())) {
81 NOTREACHED();
82 }
83
84 scoped_ptr<Version> specifics_version(
85 Version::GetVersionFromString(specifics.version()));
86 if (!specifics_version.get()) {
87 NOTREACHED();
88 }
89
90 // The update URL must be either empty or valid.
91 GURL specifics_update_url(specifics.update_url());
92 if (!specifics_update_url.is_empty() && !specifics_update_url.is_valid()) {
93 NOTREACHED();
94 }
95
96 id_ = specifics.id();
97 update_url_ = specifics_update_url;
98 version_ = *specifics_version;
99 enabled_ = specifics.enabled();
100 incognito_enabled_ = specifics.incognito_enabled();
101 name_ = specifics.name();
102 }
103
104 void ExtensionSyncData::PopulateFromSyncData(const SyncData& sync_data) {
105 const sync_pb::EntitySpecifics& ent_spec = sync_data.GetSpecifics();
106 sync_pb::ExtensionSpecifics es;
asargent_no_longer_on_chrome 2011/08/12 20:50:39 style nit: "es" and "ent_spec" are probably too sh
107 if (ent_spec.HasExtension(sync_pb::extension)) {
108 es = ent_spec.GetExtension(sync_pb::extension);
109 type_ = Extension::SYNC_TYPE_EXTENSION;
110 } else if (ent_spec.HasExtension(sync_pb::app)) {
111 es = ent_spec.GetExtension(sync_pb::app).extension();
112 type_ = Extension::SYNC_TYPE_APP;
113 } else {
114 NOTREACHED();
115 }
116 PopulateFromExtensionSpecifics(es);
117 uninstalled_ = false;
118 }
119
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698