| 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
|
|
|