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

Unified Diff: chrome/browser/sync/glue/extension_sync.cc

Issue 6852029: [Sync] Move some extension-sync-related logic to ExtensionService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address asargent's comments 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/sync/glue/extension_sync.h ('k') | chrome/browser/sync/glue/extension_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/glue/extension_sync.cc
diff --git a/chrome/browser/sync/glue/extension_sync.cc b/chrome/browser/sync/glue/extension_sync.cc
index b6693adcbf86f9b12b781d0b90d528815df4bc53..1aedc4ae97bbd611c3f9f1381cb8198b14c26743 100644
--- a/chrome/browser/sync/glue/extension_sync.cc
+++ b/chrome/browser/sync/glue/extension_sync.cc
@@ -9,6 +9,7 @@
#include "base/logging.h"
#include "chrome/browser/extensions/extension_updater.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_sync_data.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sync/engine/syncapi.h"
#include "chrome/browser/sync/glue/extension_data.h"
@@ -234,75 +235,6 @@ bool UpdateServer(
return true;
}
-// Tries to update the client data from the given extension data.
-// extension_data->ServerNeedsUpdate() must not hold and
-// extension_data->ClientNeedsUpdate() must hold before this function
-// is called. If the update was successful,
-// extension_data->ClientNeedsUpdate() will be false after this
-// function is called. Otherwise, the extension needs updating to a
-// new version.
-void TryUpdateClient(
- IsValidAndSyncablePredicate is_valid_and_syncable,
- ExtensionServiceInterface* extensions_service,
- ExtensionData* extension_data) {
- DCHECK(!extension_data->NeedsUpdate(ExtensionData::SERVER));
- DCHECK(extension_data->NeedsUpdate(ExtensionData::CLIENT));
- const sync_pb::ExtensionSpecifics& specifics =
- extension_data->merged_data();
- DcheckIsExtensionSpecificsValid(specifics);
- const std::string& id = specifics.id();
- const Extension* extension = extensions_service->GetExtensionById(id, true);
- if (extension) {
- if (!is_valid_and_syncable(*extension)) {
- LOG(DFATAL) << "TryUpdateClient() called for non-syncable extension "
- << id;
- return;
- }
- if (specifics.name() != extension->name()) {
- LOG(WARNING) << "specifics for extension " << id
- << "has a different name than the extension: "
- << specifics.name() << " vs. " << extension->name();
- }
- GURL update_url(specifics.update_url());
- if (update_url != extension->update_url()) {
- LOG(WARNING) << "specifics for extension " << id
- << "has a different update URL than the extension: "
- << update_url.spec() << " vs. " << extension->update_url();
- }
- if (specifics.enabled()) {
- extensions_service->EnableExtension(id);
- } else {
- extensions_service->DisableExtension(id);
- }
- extensions_service->SetIsIncognitoEnabled(id,
- specifics.incognito_enabled());
- {
- sync_pb::ExtensionSpecifics extension_specifics;
- GetExtensionSpecifics(*extension, *extensions_service,
- &extension_specifics);
- DCHECK(AreExtensionSpecificsUserPropertiesEqual(
- specifics, extension_specifics))
- << ExtensionSpecificsToString(specifics) << ", "
- << ExtensionSpecificsToString(extension_specifics);
- }
- if (!IsExtensionOutdated(*extension, specifics)) {
- extension_data->ResolveData(ExtensionData::CLIENT);
- DCHECK(!extension_data->NeedsUpdate(ExtensionData::CLIENT));
- }
- } else {
- GURL update_url(specifics.update_url());
- // TODO(akalin): Replace silent update with a list of enabled
- // permissions.
- extensions_service->pending_extension_manager()->AddFromSync(
- id, update_url,
- is_valid_and_syncable,
- true, // install_silently
- specifics.enabled(),
- specifics.incognito_enabled());
- }
- DCHECK(!extension_data->NeedsUpdate(ExtensionData::SERVER));
-}
-
} // namespace
bool FlushExtensionData(const ExtensionSyncTraits& traits,
@@ -329,14 +261,14 @@ bool FlushExtensionData(const ExtensionSyncTraits& traits,
}
}
DCHECK(!extension_data.NeedsUpdate(ExtensionData::SERVER));
- if (extension_data.NeedsUpdate(ExtensionData::CLIENT)) {
- TryUpdateClient(traits.is_valid_and_syncable,
- extensions_service, &extension_data);
- if (extension_data.NeedsUpdate(ExtensionData::CLIENT)) {
- extensions_service->CheckForUpdatesSoon();
- }
+ ExtensionSyncData sync_data;
+ if (!GetExtensionSyncData(extension_data.merged_data(), &sync_data)) {
+ // TODO(akalin): Should probably recover or drop.
+ NOTREACHED();
+ return false;
}
- DCHECK(!extension_data.NeedsUpdate(ExtensionData::SERVER));
+ extensions_service->ProcessSyncData(sync_data,
+ traits.is_valid_and_syncable);
}
return true;
}
@@ -410,53 +342,4 @@ void RemoveServerData(const ExtensionSyncTraits& traits,
}
}
-void UpdateClient(const ExtensionSyncTraits& traits,
- const sync_pb::ExtensionSpecifics& server_data,
- ExtensionServiceInterface* extensions_service) {
- DcheckIsExtensionSpecificsValid(server_data);
- ExtensionData extension_data =
- ExtensionData::FromData(ExtensionData::SERVER, server_data);
- const Extension* extension =
- extensions_service->GetExtensionById(server_data.id(), true);
- if (extension) {
- if (!traits.is_valid_and_syncable(*extension)) {
- LOG(WARNING) << "Ignoring server data for invalid or "
- << "non-syncable extension " << extension->id();
- return;
- }
- sync_pb::ExtensionSpecifics client_data;
- GetExtensionSpecifics(*extension, *extensions_service,
- &client_data);
- DcheckIsExtensionSpecificsValid(client_data);
- extension_data =
- ExtensionData::FromData(ExtensionData::CLIENT, client_data);
- extension_data.SetData(ExtensionData::SERVER, true, server_data);
- }
- DCHECK(!extension_data.NeedsUpdate(ExtensionData::SERVER));
- if (extension_data.NeedsUpdate(ExtensionData::CLIENT)) {
- TryUpdateClient(traits.is_valid_and_syncable,
- extensions_service, &extension_data);
- if (extension_data.NeedsUpdate(ExtensionData::CLIENT)) {
- extensions_service->CheckForUpdatesSoon();
- }
- }
- DCHECK(!extension_data.NeedsUpdate(ExtensionData::SERVER));
-}
-
-void RemoveFromClient(const ExtensionSyncTraits& traits,
- const std::string& id,
- ExtensionServiceInterface* extensions_service) {
- const Extension* extension = extensions_service->GetExtensionById(id, true);
- if (extension) {
- if (traits.is_valid_and_syncable(*extension)) {
- extensions_service->UninstallExtension(id, false, NULL);
- } else {
- LOG(WARNING) << "Ignoring server data for invalid or "
- << "non-syncable extension " << extension->id();
- }
- } else {
- LOG(ERROR) << "Trying to uninstall nonexistent extension " << id;
- }
-}
-
} // namespace browser_sync
« no previous file with comments | « chrome/browser/sync/glue/extension_sync.h ('k') | chrome/browser/sync/glue/extension_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698