#include "base/files/scoped_temp_dir.h"
#include "base/lazy_instance.h"
#include "base/metrics/histogram.h"
-#include "base/path_service.h"
#include "base/sequenced_task_runner.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/version.h"
#include "chrome/browser/extensions/convert_user_script.h"
#include "chrome/browser/extensions/convert_web_app.h"
-#include "chrome/browser/extensions/crx_installer_error.h"
#include "chrome/browser/extensions/extension_assets_manager.h"
#include "chrome/browser/extensions/extension_error_reporter.h"
-#include "chrome/browser/extensions/extension_install_ui.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/install_tracker.h"
#include "chrome/browser/extensions/install_tracker_factory.h"
#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/extensions/extension_constants.h"
-#include "chrome/common/extensions/manifest_url_handler.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/user_metrics.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_system.h"
+#include "extensions/browser/install/crx_installer_error.h"
+#include "extensions/browser/install/extension_install_ui.h"
#include "extensions/browser/install_flag.h"
#include "extensions/browser/notification_types.h"
#include "extensions/common/extension_icon_set.h"
#include "extensions/common/manifest.h"
#include "extensions/common/manifest_handlers/kiosk_mode_info.h"
#include "extensions/common/manifest_handlers/shared_module_info.h"
+#include "extensions/common/manifest_url_handlers.h"
#include "extensions/common/permissions/permission_message_provider.h"
#include "extensions/common/permissions/permission_set.h"
#include "extensions/common/permissions/permissions_data.h"
if (client_) {
client_->install_ui()->SetUseAppInstalledBubble(
approval->use_app_installed_bubble);
- client_->install_ui()->set_skip_post_install_ui(
- approval->skip_post_install_ui);
+ client_->install_ui()->SetSkipPostInstallUI(approval->skip_post_install_ui);
}
if (approval->skip_install_dialog) {
if (install_cause_ == extension_misc::INSTALL_CAUSE_USER_DOWNLOAD) {
if (FeatureSwitch::easy_off_store_install()->IsEnabled()) {
- const char* kHistogramName = "Extensions.OffStoreInstallDecisionEasy";
+ const char kHistogramName[] = "Extensions.OffStoreInstallDecisionEasy";
if (is_gallery_install()) {
UMA_HISTOGRAM_ENUMERATION(kHistogramName, OnStoreInstall,
NumOffStoreInstallDecision);
NumOffStoreInstallDecision);
}
} else {
- const char* kHistogramName = "Extensions.OffStoreInstallDecisionHard";
+ const char kHistogramName[] = "Extensions.OffStoreInstallDecisionHard";
if (is_gallery_install()) {
UMA_HISTOGRAM_ENUMERATION(kHistogramName, OnStoreInstall,
NumOffStoreInstallDecision);
if (!service || service->browser_terminating())
return;
+ // TODO(crbug.com/420147): Move this code to a utility class to avoid
+ // duplication of SharedModuleService::CheckImports code.
if (SharedModuleInfo::ImportsModules(extension())) {
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 =
service->GetExtensionById(i->extension_id, true);
if (imported_module &&
!SharedModuleInfo::IsSharedModule(imported_module)) {
- ReportFailureFromUIThread(
- CrxInstallerError(l10n_util::GetStringFUTF16(
- IDS_EXTENSION_INSTALL_DEPENDENCY_NOT_SHARED_MODULE,
- base::ASCIIToUTF16(i->extension_id))));
+ ReportFailureFromUIThread(CrxInstallerError(l10n_util::GetStringFUTF16(
+ IDS_EXTENSION_INSTALL_DEPENDENCY_NOT_SHARED_MODULE,
+ base::UTF8ToUTF16(imported_module->name()))));
+ return;
+ } else if (imported_module && (version_required.IsValid() &&
+ imported_module->version()->CompareTo(
+ version_required) < 0)) {
+ ReportFailureFromUIThread(CrxInstallerError(l10n_util::GetStringFUTF16(
+ IDS_EXTENSION_INSTALL_DEPENDENCY_OLD_VERSION,
+ base::UTF8ToUTF16(imported_module->name()),
+ base::ASCIIToUTF16(i->minimum_version),
+ base::ASCIIToUTF16(imported_module->version()->GetString()))));
return;
} else if (imported_module &&
- !SharedModuleInfo::IsExportAllowedByWhitelist(imported_module,
- extension()->id())) {
+ !SharedModuleInfo::IsExportAllowedByWhitelist(
+ imported_module, extension()->id())) {
ReportFailureFromUIThread(CrxInstallerError(l10n_util::GetStringFUTF16(
IDS_EXTENSION_INSTALL_DEPENDENCY_NOT_WHITELISTED,
base::UTF8ToUTF16(extension()->name()),
// because the WebStore already shows an error dialog itself.
// Note: |client_| can be NULL in unit_tests!
if (extension()->from_webstore() && client_)
- client_->install_ui()->set_skip_post_install_ui(true);
+ client_->install_ui()->SetSkipPostInstallUI(true);
ReportFailureFromUIThread(
CrxInstallerError(base::UTF8ToUTF16(install_checker_.policy_error())));
return;