OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "chrome/browser/extensions/app_sync_data.h" | 9 #include "chrome/browser/extensions/app_sync_data.h" |
10 #include "chrome/browser/extensions/extension_service.h" | 10 #include "chrome/browser/extensions/extension_service.h" |
(...skipping 20 matching lines...) Expand all Loading... | |
31 | 31 |
32 ExtensionSyncData::ExtensionSyncData() | 32 ExtensionSyncData::ExtensionSyncData() |
33 : uninstalled_(false), | 33 : uninstalled_(false), |
34 enabled_(false), | 34 enabled_(false), |
35 incognito_enabled_(false), | 35 incognito_enabled_(false), |
36 remote_install_(false), | 36 remote_install_(false), |
37 all_urls_enabled_(BOOLEAN_UNSET), | 37 all_urls_enabled_(BOOLEAN_UNSET), |
38 installed_by_custodian_(false) { | 38 installed_by_custodian_(false) { |
39 } | 39 } |
40 | 40 |
41 ExtensionSyncData::ExtensionSyncData(const syncer::SyncData& sync_data) | |
42 : uninstalled_(false), | |
43 enabled_(false), | |
44 incognito_enabled_(false), | |
45 remote_install_(false), | |
46 all_urls_enabled_(BOOLEAN_UNSET), | |
47 installed_by_custodian_(false) { | |
48 PopulateFromSyncData(sync_data); | |
49 } | |
50 | |
51 ExtensionSyncData::ExtensionSyncData(const syncer::SyncChange& sync_change) | |
52 : uninstalled_(sync_change.change_type() == | |
53 syncer::SyncChange::ACTION_DELETE), | |
54 enabled_(false), | |
55 incognito_enabled_(false), | |
56 remote_install_(false), | |
57 all_urls_enabled_(BOOLEAN_UNSET), | |
58 installed_by_custodian_(false) { | |
59 PopulateFromSyncData(sync_change.sync_data()); | |
60 } | |
61 | |
62 ExtensionSyncData::ExtensionSyncData(const Extension& extension, | 41 ExtensionSyncData::ExtensionSyncData(const Extension& extension, |
63 bool enabled, | 42 bool enabled, |
64 bool incognito_enabled, | 43 bool incognito_enabled, |
65 bool remote_install, | 44 bool remote_install, |
66 OptionalBoolean all_urls_enabled) | 45 OptionalBoolean all_urls_enabled) |
67 : id_(extension.id()), | 46 : id_(extension.id()), |
68 uninstalled_(false), | 47 uninstalled_(false), |
69 enabled_(enabled), | 48 enabled_(enabled), |
70 incognito_enabled_(incognito_enabled), | 49 incognito_enabled_(incognito_enabled), |
71 remote_install_(remote_install), | 50 remote_install_(remote_install), |
72 all_urls_enabled_(all_urls_enabled), | 51 all_urls_enabled_(all_urls_enabled), |
73 installed_by_custodian_(extension.was_installed_by_custodian()), | 52 installed_by_custodian_(extension.was_installed_by_custodian()), |
74 version_(extension.from_bookmark() ? base::Version("0") | 53 version_(extension.from_bookmark() ? base::Version("0") |
75 : *extension.version()), | 54 : *extension.version()), |
76 update_url_(ManifestURL::GetUpdateURL(&extension)), | 55 update_url_(ManifestURL::GetUpdateURL(&extension)), |
77 name_(extension.non_localized_name()) { | 56 name_(extension.non_localized_name()) { |
78 } | 57 } |
79 | 58 |
80 ExtensionSyncData::~ExtensionSyncData() {} | 59 ExtensionSyncData::~ExtensionSyncData() {} |
81 | 60 |
61 // static | |
62 scoped_ptr<ExtensionSyncData> ExtensionSyncData::CreateFromSyncData( | |
63 const syncer::SyncData& sync_data) { | |
64 scoped_ptr<ExtensionSyncData> data(new ExtensionSyncData); | |
65 if (data->PopulateFromSyncData(sync_data)) | |
66 return data.Pass(); | |
67 return NULL; | |
68 } | |
69 | |
70 // static | |
71 scoped_ptr<ExtensionSyncData> ExtensionSyncData::CreateFromSyncChange( | |
72 const syncer::SyncChange& sync_change) { | |
73 scoped_ptr<ExtensionSyncData> data( | |
74 CreateFromSyncData(sync_change.sync_data())); | |
75 if (!data.get()) | |
76 return NULL; | |
77 | |
78 data->set_uninstalled(sync_change.change_type() == | |
79 syncer::SyncChange::ACTION_DELETE); | |
80 return data.Pass(); | |
81 } | |
82 | |
82 syncer::SyncData ExtensionSyncData::GetSyncData() const { | 83 syncer::SyncData ExtensionSyncData::GetSyncData() const { |
83 sync_pb::EntitySpecifics specifics; | 84 sync_pb::EntitySpecifics specifics; |
84 PopulateExtensionSpecifics(specifics.mutable_extension()); | 85 PopulateExtensionSpecifics(specifics.mutable_extension()); |
85 | 86 |
86 return syncer::SyncData::CreateLocalData(id_, name_, specifics); | 87 return syncer::SyncData::CreateLocalData(id_, name_, specifics); |
87 } | 88 } |
88 | 89 |
89 syncer::SyncChange ExtensionSyncData::GetSyncChange( | 90 syncer::SyncChange ExtensionSyncData::GetSyncChange( |
90 syncer::SyncChange::SyncChangeType change_type) const { | 91 syncer::SyncChange::SyncChangeType change_type) const { |
91 return syncer::SyncChange(FROM_HERE, change_type, GetSyncData()); | 92 return syncer::SyncChange(FROM_HERE, change_type, GetSyncData()); |
92 } | 93 } |
93 | 94 |
94 void ExtensionSyncData::PopulateExtensionSpecifics( | 95 void ExtensionSyncData::PopulateExtensionSpecifics( |
95 sync_pb::ExtensionSpecifics* specifics) const { | 96 sync_pb::ExtensionSpecifics* specifics) const { |
96 DCHECK(crx_file::id_util::IdIsValid(id_)); | 97 DCHECK(crx_file::id_util::IdIsValid(id_)); |
97 specifics->set_id(id_); | 98 specifics->set_id(id_); |
98 specifics->set_update_url(update_url_.spec()); | 99 specifics->set_update_url(update_url_.spec()); |
99 specifics->set_version(version_.GetString()); | 100 specifics->set_version(version_.GetString()); |
100 specifics->set_enabled(enabled_); | 101 specifics->set_enabled(enabled_); |
101 specifics->set_incognito_enabled(incognito_enabled_); | 102 specifics->set_incognito_enabled(incognito_enabled_); |
102 specifics->set_remote_install(remote_install_); | 103 specifics->set_remote_install(remote_install_); |
103 if (all_urls_enabled_ != BOOLEAN_UNSET) | 104 if (all_urls_enabled_ != BOOLEAN_UNSET) |
104 specifics->set_all_urls_enabled(all_urls_enabled_ == BOOLEAN_TRUE); | 105 specifics->set_all_urls_enabled(all_urls_enabled_ == BOOLEAN_TRUE); |
105 specifics->set_installed_by_custodian(installed_by_custodian_); | 106 specifics->set_installed_by_custodian(installed_by_custodian_); |
106 specifics->set_name(name_); | 107 specifics->set_name(name_); |
107 } | 108 } |
108 | 109 |
109 void ExtensionSyncData::PopulateFromExtensionSpecifics( | 110 bool ExtensionSyncData::PopulateFromExtensionSpecifics( |
110 const sync_pb::ExtensionSpecifics& specifics) { | 111 const sync_pb::ExtensionSpecifics& specifics) { |
111 if (!crx_file::id_util::IdIsValid(specifics.id())) { | 112 if (!crx_file::id_util::IdIsValid(specifics.id())) { |
112 LOG(FATAL) << "Attempt to sync bad ExtensionSpecifics (bad ID):\n" | 113 LOG(ERROR) << "Attempt to sync bad ExtensionSpecifics (bad ID):\n" |
not at google - send to devlin
2015/03/11 23:21:34
Can we track this in UMA, with an enum for why (ba
Yoyo Zhou
2015/03/12 00:25:48
Done.
| |
113 << GetExtensionSpecificsLogMessage(specifics); | 114 << GetExtensionSpecificsLogMessage(specifics); |
115 return false; | |
114 } | 116 } |
115 | 117 |
116 Version specifics_version(specifics.version()); | 118 Version specifics_version(specifics.version()); |
117 if (!specifics_version.IsValid()) { | 119 if (!specifics_version.IsValid()) { |
118 LOG(FATAL) << "Attempt to sync bad ExtensionSpecifics (bad version):\n" | 120 LOG(ERROR) << "Attempt to sync bad ExtensionSpecifics (bad version):\n" |
119 << GetExtensionSpecificsLogMessage(specifics); | 121 << GetExtensionSpecificsLogMessage(specifics); |
122 return false; | |
120 } | 123 } |
121 | 124 |
122 // The update URL must be either empty or valid. | 125 // The update URL must be either empty or valid. |
123 GURL specifics_update_url(specifics.update_url()); | 126 GURL specifics_update_url(specifics.update_url()); |
124 if (!specifics_update_url.is_empty() && !specifics_update_url.is_valid()) { | 127 if (!specifics_update_url.is_empty() && !specifics_update_url.is_valid()) { |
125 LOG(FATAL) << "Attempt to sync bad ExtensionSpecifics (bad update URL):\n" | 128 LOG(ERROR) << "Attempt to sync bad ExtensionSpecifics (bad update URL):\n" |
126 << GetExtensionSpecificsLogMessage(specifics); | 129 << GetExtensionSpecificsLogMessage(specifics); |
130 return false; | |
127 } | 131 } |
128 | 132 |
129 id_ = specifics.id(); | 133 id_ = specifics.id(); |
130 update_url_ = specifics_update_url; | 134 update_url_ = specifics_update_url; |
131 version_ = specifics_version; | 135 version_ = specifics_version; |
132 enabled_ = specifics.enabled(); | 136 enabled_ = specifics.enabled(); |
133 incognito_enabled_ = specifics.incognito_enabled(); | 137 incognito_enabled_ = specifics.incognito_enabled(); |
134 if (specifics.has_all_urls_enabled()) { | 138 if (specifics.has_all_urls_enabled()) { |
135 all_urls_enabled_ = | 139 all_urls_enabled_ = |
136 specifics.all_urls_enabled() ? BOOLEAN_TRUE : BOOLEAN_FALSE; | 140 specifics.all_urls_enabled() ? BOOLEAN_TRUE : BOOLEAN_FALSE; |
137 } else { | 141 } else { |
138 // Set this explicitly (even though it's the default) on the offchance | 142 // Set this explicitly (even though it's the default) on the offchance |
139 // that someone is re-using an ExtensionSyncData object. | 143 // that someone is re-using an ExtensionSyncData object. |
140 all_urls_enabled_ = BOOLEAN_UNSET; | 144 all_urls_enabled_ = BOOLEAN_UNSET; |
141 } | 145 } |
142 remote_install_ = specifics.remote_install(); | 146 remote_install_ = specifics.remote_install(); |
143 installed_by_custodian_ = specifics.installed_by_custodian(); | 147 installed_by_custodian_ = specifics.installed_by_custodian(); |
144 name_ = specifics.name(); | 148 name_ = specifics.name(); |
149 return true; | |
145 } | 150 } |
146 | 151 |
147 void ExtensionSyncData::set_uninstalled(bool uninstalled) { | 152 void ExtensionSyncData::set_uninstalled(bool uninstalled) { |
148 uninstalled_ = uninstalled; | 153 uninstalled_ = uninstalled; |
149 } | 154 } |
150 | 155 |
151 void ExtensionSyncData::PopulateFromSyncData( | 156 bool ExtensionSyncData::PopulateFromSyncData( |
152 const syncer::SyncData& sync_data) { | 157 const syncer::SyncData& sync_data) { |
153 const sync_pb::EntitySpecifics& entity_specifics = sync_data.GetSpecifics(); | 158 const sync_pb::EntitySpecifics& entity_specifics = sync_data.GetSpecifics(); |
154 | 159 |
155 if (entity_specifics.has_extension()) { | 160 if (entity_specifics.has_extension()) { |
156 PopulateFromExtensionSpecifics(entity_specifics.extension()); | 161 return PopulateFromExtensionSpecifics(entity_specifics.extension()); |
157 } else { | 162 } else { |
not at google - send to devlin
2015/03/11 23:21:34
no else after return
Yoyo Zhou
2015/03/12 00:25:48
Done.
| |
158 LOG(FATAL) << "Attempt to sync bad EntitySpecifics."; | 163 LOG(ERROR) << "Attempt to sync bad EntitySpecifics: no extension data."; |
164 return false; | |
159 } | 165 } |
160 } | 166 } |
161 | 167 |
162 } // namespace extensions | 168 } // namespace extensions |
OLD | NEW |