Index: chrome/browser/extensions/extension_service.cc |
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc |
index 7636dfe7101bd3f8bead57445336aa37760f9fe9..c35bfb744e1cfa77ccda681a0faef2e527b1659d 100644 |
--- a/chrome/browser/extensions/extension_service.cc |
+++ b/chrome/browser/extensions/extension_service.cc |
@@ -21,6 +21,7 @@ |
#include "chrome/browser/content_settings/content_settings_custom_extension_provider.h" |
#include "chrome/browser/content_settings/content_settings_internal_extension_provider.h" |
#include "chrome/browser/extensions/api/content_settings/content_settings_service.h" |
+#include "chrome/browser/extensions/app_data_migrator.h" |
#include "chrome/browser/extensions/component_loader.h" |
#include "chrome/browser/extensions/crx_installer.h" |
#include "chrome/browser/extensions/data_deleter.h" |
@@ -270,7 +271,8 @@ ExtensionService::ExtensionService(Profile* profile, |
browser_terminating_(false), |
installs_delayed_for_gc_(false), |
is_first_run_(false), |
- shared_module_service_(new extensions::SharedModuleService(profile_)) { |
+ shared_module_service_(new extensions::SharedModuleService(profile_)), |
+ app_data_migrator_(new extensions::AppDataMigrator(profile_, registry_)) { |
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
// Figure out if extension installation should be enabled. |
@@ -1725,6 +1727,19 @@ void ExtensionService::AddNewOrUpdatedExtension( |
delayed_installs_.Remove(extension->id()); |
if (InstallVerifier::NeedsVerification(*extension)) |
system_->install_verifier()->VerifyExtension(extension->id()); |
+ |
+ const Extension* old = GetInstalledExtension(extension->id()); |
+ if (app_data_migrator_->NeedsMigration(old, extension)) { |
+ app_data_migrator_->DoMigrationAndReply( |
+ old, |
+ extension, |
+ base::Bind(&ExtensionService::FinishInstallation, |
+ AsWeakPtr(), |
+ make_scoped_refptr(extension), |
+ was_ephemeral)); |
+ return; |
+ } |
+ |
FinishInstallation(extension, was_ephemeral); |
} |