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

Side by Side Diff: chrome/browser/sync/glue/extension_util.cc

Issue 6852029: [Sync] Move some extension-sync-related logic to ExtensionService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add TODO, fix lint Created 9 years, 8 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/sync/glue/extension_util.h" 5 #include "chrome/browser/sync/glue/extension_util.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/stl_util-inl.h" 11 #include "base/stl_util-inl.h"
12 #include "base/version.h" 12 #include "base/version.h"
13 #include "chrome/browser/extensions/extension_prefs.h" 13 #include "chrome/browser/extensions/extension_prefs.h"
14 #include "chrome/browser/extensions/extension_service.h" 14 #include "chrome/browser/extensions/extension_service.h"
15 #include "chrome/browser/extensions/extension_sync_data.h"
15 #include "chrome/browser/sync/protocol/extension_specifics.pb.h" 16 #include "chrome/browser/sync/protocol/extension_specifics.pb.h"
16 #include "chrome/common/extensions/extension.h"
17 #include "chrome/common/extensions/extension_constants.h" 17 #include "chrome/common/extensions/extension_constants.h"
18 18
19 namespace browser_sync { 19 namespace browser_sync {
20 20
21 bool IsExtensionValid(const Extension& extension) { 21 bool IsExtensionValid(const Extension& extension) {
22 // TODO(akalin): Figure out if we need to allow some other types. 22 // TODO(akalin): Figure out if we need to allow some other types.
23 if (extension.location() != Extension::INTERNAL) { 23 if (extension.location() != Extension::INTERNAL) {
24 // We have a non-standard location. 24 // We have a non-standard location.
25 return false; 25 return false;
26 } 26 }
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 bool incognito_enabled = extension_service.IsIncognitoEnabled(id); 150 bool incognito_enabled = extension_service.IsIncognitoEnabled(id);
151 specifics->set_id(id); 151 specifics->set_id(id);
152 specifics->set_version(extension.VersionString()); 152 specifics->set_version(extension.VersionString());
153 specifics->set_update_url(extension.update_url().spec()); 153 specifics->set_update_url(extension.update_url().spec());
154 specifics->set_enabled(enabled); 154 specifics->set_enabled(enabled);
155 specifics->set_incognito_enabled(incognito_enabled); 155 specifics->set_incognito_enabled(incognito_enabled);
156 specifics->set_name(extension.name()); 156 specifics->set_name(extension.name());
157 DcheckIsExtensionSpecificsValid(*specifics); 157 DcheckIsExtensionSpecificsValid(*specifics);
158 } 158 }
159 159
160 bool IsExtensionOutdated(const Extension& extension,
161 const sync_pb::ExtensionSpecifics& specifics) {
162 DCHECK(IsExtensionValid(extension));
163 DcheckIsExtensionSpecificsValid(specifics);
164 scoped_ptr<Version> specifics_version(
165 Version::GetVersionFromString(specifics.version()));
166 if (!specifics_version.get()) {
167 // If version is invalid, assume we're up-to-date.
168 return false;
169 }
170 return extension.version()->CompareTo(*specifics_version) < 0;
171 }
172
173 void MergeExtensionSpecifics( 160 void MergeExtensionSpecifics(
174 const sync_pb::ExtensionSpecifics& specifics, 161 const sync_pb::ExtensionSpecifics& specifics,
175 bool merge_user_properties, 162 bool merge_user_properties,
176 sync_pb::ExtensionSpecifics* merged_specifics) { 163 sync_pb::ExtensionSpecifics* merged_specifics) {
177 DcheckIsExtensionSpecificsValid(*merged_specifics); 164 DcheckIsExtensionSpecificsValid(*merged_specifics);
178 DcheckIsExtensionSpecificsValid(specifics); 165 DcheckIsExtensionSpecificsValid(specifics);
179 DCHECK_EQ(specifics.id(), merged_specifics->id()); 166 DCHECK_EQ(specifics.id(), merged_specifics->id());
180 // TODO(akalin): Merge enabled permissions when we sync those. 167 // TODO(akalin): Merge enabled permissions when we sync those.
181 scoped_ptr<Version> version( 168 scoped_ptr<Version> version(
182 Version::GetVersionFromString(specifics.version())); 169 Version::GetVersionFromString(specifics.version()));
183 CHECK(version.get()); 170 CHECK(version.get());
184 scoped_ptr<Version> merged_version( 171 scoped_ptr<Version> merged_version(
185 Version::GetVersionFromString(merged_specifics->version())); 172 Version::GetVersionFromString(merged_specifics->version()));
186 CHECK(merged_version.get()); 173 CHECK(merged_version.get());
187 if (version->CompareTo(*merged_version) >= 0) { 174 if (version->CompareTo(*merged_version) >= 0) {
188 // |specifics| has a more recent or the same version, so merge it 175 // |specifics| has a more recent or the same version, so merge it
189 // in. 176 // in.
190 CopyNonUserProperties(specifics, merged_specifics); 177 CopyNonUserProperties(specifics, merged_specifics);
191 if (merge_user_properties) { 178 if (merge_user_properties) {
192 CopyUserProperties(specifics, merged_specifics); 179 CopyUserProperties(specifics, merged_specifics);
193 } 180 }
194 } 181 }
195 } 182 }
196 183
184 bool GetExtensionSyncData(
185 const sync_pb::ExtensionSpecifics& specifics,
186 ExtensionSyncData* sync_data) {
187 if (!Extension::IdIsValid(specifics.id())) {
188 return false;
189 }
190
191 scoped_ptr<Version> version(
192 Version::GetVersionFromString(specifics.version()));
193 if (!version.get()) {
194 return false;
195 }
196
197 // The update URL must be either empty or valid.
198 GURL update_url(specifics.update_url());
199 if (!update_url.is_empty() && !update_url.is_valid()) {
200 return false;
201 }
202
203 sync_data->id = specifics.id();
204 sync_data->update_url = update_url;
205 sync_data->version = *version;
206 sync_data->enabled = specifics.enabled();
207 sync_data->incognito_enabled = specifics.incognito_enabled();
208 return true;
209 }
210
211 bool IsSyncableExtension(Extension::Type type, const GURL& update_url) {
212 switch (type) {
213 case Extension::TYPE_EXTENSION:
214 return true;
215 case Extension::TYPE_USER_SCRIPT:
216 // We only want to sync user scripts with update URLs.
217 return !update_url.is_empty();
218 default:
219 return false;
220 }
221 }
222
223 bool IsValidAndSyncableExtension(const Extension& extension) {
224 return
225 IsExtensionValid(extension) &&
226 IsSyncableExtension(extension.GetType(), extension.update_url());
227 }
228
229 bool IsSyncableApp(Extension::Type type) {
230 return
231 (type == Extension::TYPE_HOSTED_APP) ||
232 (type == Extension::TYPE_PACKAGED_APP);
233 }
234
235 bool IsValidAndSyncableApp(
236 const Extension& extension) {
237 return IsExtensionValid(extension) && IsSyncableApp(extension.GetType());
238 }
239
197 } // namespace browser_sync 240 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698