| Index: chrome/browser/extensions/extension_service.cc
|
| diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
|
| index c5fe8579246e777a0cdf87f1de8d5fc30771b4f0..27128efb4a759a084085e1233dcb213c52d4e903 100644
|
| --- a/chrome/browser/extensions/extension_service.cc
|
| +++ b/chrome/browser/extensions/extension_service.cc
|
| @@ -1891,6 +1891,13 @@ void ExtensionService::ProcessExtensionSyncData(
|
| const ExtensionSyncData& extension_sync_data,
|
| SyncBundle& bundle) {
|
| const std::string& id = extension_sync_data.id();
|
| + const Extension* extension = GetInstalledExtension(id);
|
| +
|
| + // TODO(bolms): we should really handle this better. The particularly bad
|
| + // case is where an app becomes an extension or vice versa, and we end up with
|
| + // a zombie extension that won't go away.
|
| + if (extension && !bundle.filter(*extension))
|
| + return;
|
|
|
| // Handle uninstalls first.
|
| if (extension_sync_data.uninstalled()) {
|
| @@ -1910,7 +1917,6 @@ void ExtensionService::ProcessExtensionSyncData(
|
| }
|
| SetIsIncognitoEnabled(id, extension_sync_data.incognito_enabled());
|
|
|
| - const Extension* extension = GetInstalledExtension(id);
|
| if (extension) {
|
| // If the extension is already installed, check if it's outdated.
|
| int result = extension->version()->CompareTo(extension_sync_data.version());
|
|
|