Index: chrome/browser/extensions/webstore_installer.cc |
diff --git a/chrome/browser/extensions/webstore_installer.cc b/chrome/browser/extensions/webstore_installer.cc |
index 25ef1e838135de5053b85cdab684aa7c380a504f..dcd427989fcb3496495ce106258868d9d2244c2c 100644 |
--- a/chrome/browser/extensions/webstore_installer.cc |
+++ b/chrome/browser/extensions/webstore_installer.cc |
@@ -48,6 +48,7 @@ |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/web_contents.h" |
+#include "extensions/browser/extension_registry.h" |
#include "extensions/browser/extension_system.h" |
#include "extensions/common/extension.h" |
#include "extensions/common/manifest_constants.h" |
@@ -286,6 +287,7 @@ WebstoreInstaller::WebstoreInstaller(Profile* profile, |
scoped_ptr<Approval> approval, |
InstallSource source) |
: content::WebContentsObserver(web_contents), |
+ extension_registry_observer_(this), |
profile_(profile), |
delegate_(delegate), |
id_(id), |
@@ -299,10 +301,9 @@ WebstoreInstaller::WebstoreInstaller(Profile* profile, |
registrar_.Add(this, chrome::NOTIFICATION_CRX_INSTALLER_DONE, |
content::NotificationService::AllSources()); |
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED, |
- content::Source<Profile>(profile->GetOriginalProfile())); |
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR, |
content::Source<CrxInstaller>(NULL)); |
+ extension_registry_observer_.Add(ExtensionRegistry::Get(profile)); |
} |
void WebstoreInstaller::Start() { |
@@ -384,40 +385,6 @@ void WebstoreInstaller::Observe(int type, |
break; |
} |
- case chrome::NOTIFICATION_EXTENSION_INSTALLED: { |
- CHECK(profile_->IsSameProfile(content::Source<Profile>(source).ptr())); |
- const Extension* extension = |
- content::Details<const InstalledExtensionInfo>(details)->extension; |
- if (pending_modules_.empty()) |
- return; |
- SharedModuleInfo::ImportInfo info = pending_modules_.front(); |
- if (extension->id() != info.extension_id) |
- return; |
- pending_modules_.pop_front(); |
- |
- if (pending_modules_.empty()) { |
- CHECK_EQ(extension->id(), id_); |
- ReportSuccess(); |
- } else { |
- const Version version_required(info.minimum_version); |
- if (version_required.IsValid() && |
- extension->version()->CompareTo(version_required) < 0) { |
- // It should not happen, CrxInstaller will make sure the version is |
- // equal or newer than version_required. |
- ReportFailure(kDependencyNotFoundError, |
- FAILURE_REASON_DEPENDENCY_NOT_FOUND); |
- } else if (!SharedModuleInfo::IsSharedModule(extension)) { |
- // It should not happen, CrxInstaller will make sure it is a shared |
- // module. |
- ReportFailure(kDependencyNotSharedModuleError, |
- FAILURE_REASON_DEPENDENCY_NOT_SHARED_MODULE); |
- } else { |
- DownloadNextPendingModule(); |
- } |
- } |
- break; |
- } |
- |
case chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR: { |
CrxInstaller* crx_installer = content::Source<CrxInstaller>(source).ptr(); |
CHECK(crx_installer); |
@@ -441,6 +408,41 @@ void WebstoreInstaller::Observe(int type, |
} |
} |
+void WebstoreInstaller::OnExtensionInstalled( |
+ content::BrowserContext* browser_context, |
+ const Extension* extension, |
+ bool is_update, |
+ const std::string& old_name) { |
+ CHECK(profile_->IsSameProfile(Profile::FromBrowserContext(browser_context))); |
+ if (pending_modules_.empty()) |
+ return; |
+ SharedModuleInfo::ImportInfo info = pending_modules_.front(); |
+ if (extension->id() != info.extension_id) |
+ return; |
+ pending_modules_.pop_front(); |
+ |
+ if (pending_modules_.empty()) { |
+ CHECK_EQ(extension->id(), id_); |
+ ReportSuccess(); |
+ } else { |
+ const Version version_required(info.minimum_version); |
+ if (version_required.IsValid() && |
+ extension->version()->CompareTo(version_required) < 0) { |
+ // It should not happen, CrxInstaller will make sure the version is |
+ // equal or newer than version_required. |
+ ReportFailure(kDependencyNotFoundError, |
+ FAILURE_REASON_DEPENDENCY_NOT_FOUND); |
+ } else if (!SharedModuleInfo::IsSharedModule(extension)) { |
+ // It should not happen, CrxInstaller will make sure it is a shared |
+ // module. |
+ ReportFailure(kDependencyNotSharedModuleError, |
+ FAILURE_REASON_DEPENDENCY_NOT_SHARED_MODULE); |
+ } else { |
+ DownloadNextPendingModule(); |
+ } |
+ } |
+} |
+ |
void WebstoreInstaller::InvalidateDelegate() { |
delegate_ = NULL; |
} |