OLD | NEW |
---|---|
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) {} |
akalin
2011/08/17 17:44:24
initialize type_ here, too
| |
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) { |
akalin
2011/08/17 17:44:24
initialize type_ here, too
| |
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; | |
akalin
2011/08/17 17:44:24
prefer putting everything in initialization list
| |
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(); | |
akalin
2011/08/17 17:44:24
NOTREACHED() only LOG(ERROR)s on release, so proba
| |
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(); | |
akalin
2011/08/17 17:44:24
early-return here for release or LOG(FATAL)
| |
82 } | |
83 | |
84 scoped_ptr<Version> specifics_version( | |
85 Version::GetVersionFromString(specifics.version())); | |
86 if (!specifics_version.get()) { | |
87 NOTREACHED(); | |
akalin
2011/08/17 17:44:24
early return or LOG(FATAL)
| |
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(); | |
akalin
2011/08/17 17:44:24
early return or LOG(FATAL)
| |
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& entity_specifics = sync_data.GetSpecifics(); | |
106 sync_pb::ExtensionSpecifics extension_expecifics; | |
107 if (entity_specifics.HasExtension(sync_pb::extension)) { | |
108 extension_expecifics = entity_specifics.GetExtension(sync_pb::extension); | |
109 type_ = Extension::SYNC_TYPE_EXTENSION; | |
110 } else if (entity_specifics.HasExtension(sync_pb::app)) { | |
111 extension_expecifics = | |
112 entity_specifics.GetExtension(sync_pb::app).extension(); | |
113 type_ = Extension::SYNC_TYPE_APP; | |
114 } else { | |
115 NOTREACHED(); | |
akalin
2011/08/17 17:44:24
early return or LOG(FATAL)
| |
116 } | |
117 PopulateFromExtensionSpecifics(extension_expecifics); | |
118 uninstalled_ = false; | |
119 } | |
120 | |
OLD | NEW |