Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / crx_installer.cc
index ddbf8f1..e269ead 100644 (file)
@@ -12,7 +12,6 @@
 #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"
@@ -36,7 +33,6 @@
 #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"
@@ -44,6 +40,8 @@
 #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"
@@ -52,6 +50,7 @@
 #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"
@@ -139,8 +138,7 @@ CrxInstaller::CrxInstaller(base::WeakPtr<ExtensionService> service_weak,
   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) {
@@ -331,7 +329,7 @@ CrxInstallerError CrxInstaller::AllowInstall(const Extension* extension) {
 
   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);
@@ -340,7 +338,7 @@ CrxInstallerError CrxInstaller::AllowInstall(const Extension* extension) {
                                   NumOffStoreInstallDecision);
       }
     } else {
-      const char* kHistogramName = "Extensions.OffStoreInstallDecisionHard";
+      const char kHistogramName[] = "Extensions.OffStoreInstallDecisionHard";
       if (is_gallery_install()) {
         UMA_HISTOGRAM_ENUMERATION(kHistogramName, OnStoreInstall,
                                   NumOffStoreInstallDecision);
@@ -477,23 +475,34 @@ void CrxInstaller::CheckInstall() {
   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()),
@@ -554,7 +563,7 @@ void CrxInstaller::OnInstallChecksComplete(int failed_checks) {
     // 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;