Index: chrome/browser/extensions/crx_installer.cc |
diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc |
index f0a93657b4890db72cad4ecbe5721f52462218f3..c458658c0732282cab23553733566bb1f6671ac7 100644 |
--- a/chrome/browser/extensions/crx_installer.cc |
+++ b/chrome/browser/extensions/crx_installer.cc |
@@ -42,6 +42,7 @@ |
#include "chrome/common/extensions/feature_switch.h" |
#include "chrome/common/extensions/manifest.h" |
#include "chrome/common/extensions/manifest_handlers/icons_handler.h" |
+#include "chrome/common/extensions/manifest_handlers/shared_module_info.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/notification_service.h" |
#include "content/public/browser/resource_dispatcher_host.h" |
@@ -60,6 +61,7 @@ |
using content::BrowserThread; |
using content::UserMetricsAction; |
+using extensions::SharedModuleInfo; |
namespace extensions { |
@@ -400,14 +402,41 @@ void CrxInstaller::OnUnpackSuccess(const base::FilePath& temp_dir, |
if (!BrowserThread::PostTask( |
BrowserThread::UI, FROM_HERE, |
- base::Bind(&CrxInstaller::CheckRequirements, this))) |
+ base::Bind(&CrxInstaller::CheckImportsAndRequirements, this))) |
NOTREACHED(); |
} |
-void CrxInstaller::CheckRequirements() { |
+void CrxInstaller::CheckImportsAndRequirements() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
if (!frontend_weak_.get() || frontend_weak_->browser_terminating()) |
return; |
+ |
+ if (SharedModuleInfo::ImportsModules(extension_)) { |
Matt Perry
2013/04/25 20:16:31
What if you uninstall a shared module that somethi
elijahtaylor1
2013/04/25 21:01:28
In the final version we had talked about making sh
Matt Perry
2013/04/25 21:07:23
Oh yeah, that's right. Makes sense. Leave as-is.
|
+ const std::vector<SharedModuleInfo::ImportInfo>& imports = |
+ SharedModuleInfo::GetImports(extension_); |
+ std::vector<SharedModuleInfo::ImportInfo>::const_iterator i; |
+ for (i = imports.begin(); i != imports.end(); ++i) { |
+ Version version_required(i->minimum_version); |
+ const Extension* imported_module = |
+ frontend_weak_->GetExtensionById(i->extension_id, true); |
+ if (!imported_module || |
+ imported_module->version()->CompareTo(version_required) < 0) { |
+ ReportFailureFromUIThread( |
+ CrxInstallerError(l10n_util::GetStringFUTF16( |
+ IDS_EXTENSION_INSTALL_DEPENDENCY_NOT_FOUND, |
+ ASCIIToUTF16(i->extension_id), |
+ ASCIIToUTF16(i->minimum_version)))); |
+ return; |
+ } |
+ if (!SharedModuleInfo::IsSharedModule(imported_module)) { |
+ ReportFailureFromUIThread( |
+ CrxInstallerError(l10n_util::GetStringFUTF16( |
+ IDS_EXTENSION_INSTALL_DEPENDENCY_NOT_SHARED_MODULE, |
+ ASCIIToUTF16(i->extension_id)))); |
+ return; |
+ } |
+ } |
+ } |
AddRef(); // Balanced in OnRequirementsChecked(). |
requirements_checker_->Check(extension_, |
base::Bind(&CrxInstaller::OnRequirementsChecked, |
@@ -417,7 +446,7 @@ void CrxInstaller::CheckRequirements() { |
void CrxInstaller::OnRequirementsChecked( |
std::vector<std::string> requirement_errors) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- Release(); // Balanced in CheckRequirements(). |
+ Release(); // Balanced in CheckImportsAndRequirements(). |
if (!requirement_errors.empty()) { |
if (error_on_unsupported_requirements_) { |
ReportFailureFromUIThread(CrxInstallerError( |