summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorerikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-20 17:08:54 +0000
committererikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-20 17:08:54 +0000
commita1cbc96e8f0bbdbefa209367c5633c7ad0f3e111 (patch)
tree2ab182fc502bde4990f42e9a913c434007d52c67
parent912f06843fb90f6b50a9b6e270253d67f9be1d88 (diff)
downloadchromium_src-a1cbc96e8f0bbdbefa209367c5633c7ad0f3e111.zip
chromium_src-a1cbc96e8f0bbdbefa209367c5633c7ad0f3e111.tar.gz
chromium_src-a1cbc96e8f0bbdbefa209367c5633c7ad0f3e111.tar.bz2
Revert 147650 - Implement installation of the Chrome App Host.
The Chrome App Host is a simple exe that delegates to a Chrome Binaries installation at user or system level. If no installation is available, it will trigger an installation. The Chrome App Host prevents the Chrome Binaries from being uninstalled, except in the case of an upgrade to system-level. The Chrome App Host is implemented in this uncommitted CL: http://codereview.chromium.org/10559090/ . BUG=None TEST=None Review URL: https://chromiumcodereview.appspot.com/10665002 TBR=erikwright@chromium.org Review URL: https://chromiumcodereview.appspot.com/10797047 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@147668 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/app/chromium_strings.grd9
-rw-r--r--chrome/app/google_chrome_strings.grd9
-rw-r--r--chrome/chrome_installer.gypi14
-rw-r--r--chrome/chrome_installer_util.gypi8
-rw-r--r--chrome/common/chrome_switches.cc4
-rw-r--r--chrome/common/chrome_switches.h1
-rw-r--r--chrome/installer/mini_installer.gyp2
-rw-r--r--chrome/installer/mini_installer.gypi2
-rw-r--r--chrome/installer/mini_installer/appid.h3
-rw-r--r--chrome/installer/mini_installer/chrome.release1
-rw-r--r--chrome/installer/mini_installer/chrome_appid.cc6
-rw-r--r--chrome/installer/mini_installer/configuration.cc9
-rw-r--r--chrome/installer/mini_installer/configuration.h6
-rw-r--r--chrome/installer/mini_installer/mini_installer.cc55
-rw-r--r--chrome/installer/setup/chrome_frame_quick_enable.cc13
-rw-r--r--chrome/installer/setup/install.cc2
-rw-r--r--chrome/installer/setup/install_worker.cc374
-rw-r--r--chrome/installer/setup/install_worker.h25
-rw-r--r--chrome/installer/setup/setup_main.cc337
-rw-r--r--chrome/installer/setup/uninstall.cc289
-rw-r--r--chrome/installer/util/browser_distribution.cc21
-rw-r--r--chrome/installer/util/browser_distribution.h7
-rw-r--r--chrome/installer/util/browser_distribution_unittest.cc50
-rw-r--r--chrome/installer/util/channel_info.cc11
-rw-r--r--chrome/installer/util/channel_info.h9
-rw-r--r--chrome/installer/util/chrome_app_host_distribution.cc148
-rw-r--r--chrome/installer/util/chrome_app_host_distribution.h70
-rw-r--r--chrome/installer/util/chrome_app_host_operations.cc100
-rw-r--r--chrome/installer/util/chrome_app_host_operations.h59
-rw-r--r--chrome/installer/util/chrome_binaries_operations.cc88
-rw-r--r--chrome/installer/util/chrome_binaries_operations.h58
-rw-r--r--chrome/installer/util/chrome_frame_operations.cc1
-rw-r--r--chrome/installer/util/chromium_binaries_distribution.cc1
-rw-r--r--chrome/installer/util/installation_state.cc10
-rw-r--r--chrome/installer/util/installation_state.h3
-rw-r--r--chrome/installer/util/installation_validator.cc266
-rw-r--r--chrome/installer/util/installation_validator.h46
-rw-r--r--chrome/installer/util/installation_validator_unittest.cc36
-rw-r--r--chrome/installer/util/installer_state.cc132
-rw-r--r--chrome/installer/util/installer_state.h8
-rw-r--r--chrome/installer/util/master_preferences.cc9
-rw-r--r--chrome/installer/util/master_preferences.h5
-rw-r--r--chrome/installer/util/master_preferences_constants.cc1
-rw-r--r--chrome/installer/util/master_preferences_constants.h2
-rwxr-xr-xchrome/installer/util/prebuild/create_string_rc.py3
-rw-r--r--chrome/installer/util/product.cc8
-rw-r--r--chrome/installer/util/product.h8
-rw-r--r--chrome/installer/util/util_constants.cc7
-rw-r--r--chrome/installer/util/util_constants.h4
49 files changed, 552 insertions, 1788 deletions
diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd
index 0d815a6..da5ccf8 100644
--- a/chrome/app/chromium_strings.grd
+++ b/chrome/app/chromium_strings.grd
@@ -223,12 +223,6 @@ be available for now. -->
<message name="IDS_PRODUCT_FRAME_NAME" desc="The Chrome Frame application name">
Chromium Frame
</message>
- <message name="IDS_PRODUCT_APP_HOST_NAME" desc="The Chrome App Host application name">
- Chromium App Host
- </message>
- <message name="IDS_PRODUCT_BINARIES_NAME" desc="The Chrome Binaries application name">
- Chromium Binaries
- </message>
<message name="IDS_VERSIONMISMATCH_HEADER">
Chromium Frame Update.
</message>
@@ -452,9 +446,6 @@ Chromium is unable to recover your settings.
<message name="IDS_INSTALL_HIGHER_VERSION" desc="Error displayed when higher version already exists.">
This computer already has a more recent version of Chromium. If the software is not working, please uninstall Chromium and try again.
</message>
- <message name="IDS_INSTALL_HIGHER_VERSION_APP_HOST" desc="Error displayed when higher version of the Chromium App Host already exists.">
- This computer already has a more recent version of the Chromium components. Please use a more recent installer.
- </message>
<message name="IDS_INSTALL_HIGHER_VERSION_CF" desc="Error displayed when higher version already exists.">
This computer already has a more recent version of Chromium Frame. If the software is not working, please uninstall Chromium Frame and try again.
</message>
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd
index 3b8f7ab..92f0585 100644
--- a/chrome/app/google_chrome_strings.grd
+++ b/chrome/app/google_chrome_strings.grd
@@ -146,12 +146,6 @@ Chrome supports. -->
<message name="IDS_PRODUCT_FRAME_NAME" desc="The Chrome Frame application name">
Google Chrome Frame
</message>
- <message name="IDS_PRODUCT_APP_HOST_NAME" desc="The Chrome App Host application name">
- Google Chrome App Host
- </message>
- <message name="IDS_PRODUCT_BINARIES_NAME" desc="The Chrome Binaries application name">
- Google Chrome Binaries
- </message>
<message name="IDS_VERSIONMISMATCH_HEADER">
Chrome Frame Update.
</message>
@@ -375,9 +369,6 @@ Google Chrome is unable to recover your settings.
<message name="IDS_INSTALL_HIGHER_VERSION" desc="Error displayed when higher version already exists.">
This computer already has a more recent version of Google Chrome. If the software is not working, please uninstall Google Chrome and try again.
</message>
- <message name="IDS_INSTALL_HIGHER_VERSION_APP_HOST" desc="Error displayed when higher version of the Chrome App Host already exists.">
- This computer already has a more recent version of the Google Chrome components. Please use a more recent installer.
- </message>
<message name="IDS_INSTALL_HIGHER_VERSION_CF" desc="Error displayed when higher version of Chrome Frame already exists">
This computer already has a more recent version of Google Chrome Frame. If the software is not working, please uninstall Google Chrome Frame and try again.
</message>
diff --git a/chrome/chrome_installer.gypi b/chrome/chrome_installer.gypi
index b21fd76..8d32b84 100644
--- a/chrome/chrome_installer.gypi
+++ b/chrome/chrome_installer.gypi
@@ -88,6 +88,7 @@
'sources': [
'installer/setup/compat_checks_unittest.cc',
'installer/setup/setup_constants.cc',
+ 'installer/util/browser_distribution_unittest.cc',
'installer/util/channel_info_unittest.cc',
'installer/util/copy_reg_key_work_item_unittest.cc',
'installer/util/copy_tree_work_item_unittest.cc',
@@ -261,7 +262,6 @@
'installer_util_strings',
'../base/base.gyp:base',
'../build/temp_gyp/googleurl.gyp:googleurl',
- '../chrome/chrome.gyp:common_constants',
'../chrome_frame/chrome_frame.gyp:chrome_tab_idl',
'../chrome_frame/chrome_frame.gyp:npchrome_frame',
'../breakpad/breakpad.gyp:breakpad_handler',
@@ -980,12 +980,12 @@
['branding=="Chrome" and buildtype=="Official"', {
'actions': [
{
- # copy_keychain_reauthorize.sh explains why this isn't in a
- # 'copies' block, but briefly: this is a prebuilt signed
- # binary component that relies on a correct signature to
- # function properly, and a normal 'copies' block sadly makes
- # a trivial modification to the file such that its signature
- # is no longer valid.
+ # copy_keychain_reauthorize.sh explains why this isn't in a
+ # 'copies' block, but briefly: this is a prebuilt signed
+ # binary component that relies on a correct signature to
+ # function properly, and a normal 'copies' block sadly makes
+ # a trivial modification to the file such that its signature
+ # is no longer valid.
'action_name': 'Copy keychain_reauthorize',
'variables': {
'keychain_reauthorize_path': 'tools/build/mac/copy_keychain_reauthorize.sh',
diff --git a/chrome/chrome_installer_util.gypi b/chrome/chrome_installer_util.gypi
index 0d75575..c6ea69c 100644
--- a/chrome/chrome_installer_util.gypi
+++ b/chrome/chrome_installer_util.gypi
@@ -1,4 +1,4 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -21,8 +21,6 @@
'installer/util/browser_distribution.h',
'installer/util/channel_info.cc',
'installer/util/channel_info.h',
- 'installer/util/chrome_app_host_distribution.cc',
- 'installer/util/chrome_app_host_distribution.h',
'installer/util/chrome_frame_distribution.cc',
'installer/util/chrome_frame_distribution.h',
'installer/util/chromium_binaries_distribution.cc',
@@ -116,10 +114,6 @@
'<(DEPTH)/third_party/lzma_sdk/lzma_sdk.gyp:lzma_sdk',
],
'sources': [
- 'installer/util/chrome_app_host_operations.cc',
- 'installer/util/chrome_app_host_operations.h',
- 'installer/util/chrome_binaries_operations.cc',
- 'installer/util/chrome_binaries_operations.h',
'installer/util/chrome_browser_operations.cc',
'installer/util/chrome_browser_operations.h',
'installer/util/chrome_browser_sxs_operations.cc',
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 9e5e06b..f7ab364 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -91,10 +91,6 @@ const char kAppsGalleryURL[] = "apps-gallery-url";
// The update url used by gallery/webstore extensions.
const char kAppsGalleryUpdateURL[] = "apps-gallery-update-url";
-// Specifies the URL of an application manifest to retrieve. The user will be
-// prompted for consent and the application retrieved/installed if consented.
-const char kAppsInstallFromManifestURL[] = "apps-install-from-manifest-url";
-
// Whether to always use the new app install bubble when installing an app.
const char kAppsNewInstallBubble[] = "apps-new-install-bubble";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 911b2f6..e80f71c 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -41,7 +41,6 @@ extern const char kAppsGalleryInstallAutoConfirmForTests[];
extern const char kAppsGalleryReturnTokens[];
extern const char kAppsGalleryURL[];
extern const char kAppsGalleryUpdateURL[];
-extern const char kAppsInstallFromManifestURL[];
extern const char kAppsNewInstallBubble[];
extern const char kAppsNoThrob[];
extern const char kAuthNegotiateDelegateWhitelist[];
diff --git a/chrome/installer/mini_installer.gyp b/chrome/installer/mini_installer.gyp
index 9256eca..0748ceb 100644
--- a/chrome/installer/mini_installer.gyp
+++ b/chrome/installer/mini_installer.gyp
@@ -16,7 +16,6 @@
['OS=="win"', {
'target_defaults': {
'dependencies': [
- '../chrome.gyp:app_host',
'../chrome.gyp:chrome',
'../chrome.gyp:chrome_nacl_win64',
'../chrome.gyp:chrome_dll',
@@ -235,7 +234,6 @@
],
'inputs': [
'<(create_installer_archive_py_path)',
- '<(PRODUCT_DIR)/app_host.exe',
'<(PRODUCT_DIR)/chrome.exe',
'<(PRODUCT_DIR)/chrome.dll',
'<(PRODUCT_DIR)/nacl64.exe',
diff --git a/chrome/installer/mini_installer.gypi b/chrome/installer/mini_installer.gypi
index ef92ab9..8b5d5d0 100644
--- a/chrome/installer/mini_installer.gypi
+++ b/chrome/installer/mini_installer.gypi
@@ -4,7 +4,6 @@
{
'dependencies': [
'<(chrome_dll_project)',
- '../chrome.gyp:app_host',
'../chrome.gyp:chrome',
'../chrome.gyp:chrome_nacl_win64',
'../chrome.gyp:default_extensions',
@@ -180,7 +179,6 @@
],
'inputs': [
'<(create_installer_archive_py_path)',
- '<(PRODUCT_DIR)/app_host.exe',
'<(PRODUCT_DIR)/chrome.exe',
'<(chrome_dll_path)',
'<(PRODUCT_DIR)/nacl64.exe',
diff --git a/chrome/installer/mini_installer/appid.h b/chrome/installer/mini_installer/appid.h
index 1ea93a4..7dcd4e0 100644
--- a/chrome/installer/mini_installer/appid.h
+++ b/chrome/installer/mini_installer/appid.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -9,7 +9,6 @@
namespace google_update {
extern const wchar_t kAppGuid[];
extern const wchar_t kSxSAppGuid[];
-extern const wchar_t kChromeAppHostAppGuid[];
extern const wchar_t kChromeFrameAppGuid[];
extern const wchar_t kMultiInstallAppGuid[];
}
diff --git a/chrome/installer/mini_installer/chrome.release b/chrome/installer/mini_installer/chrome.release
index a094ea8..c04dd6c 100644
--- a/chrome/installer/mini_installer/chrome.release
+++ b/chrome/installer/mini_installer/chrome.release
@@ -3,7 +3,6 @@
# found in the LICENSE file.
[GENERAL]
-app_host.exe: %(ChromeDir)s\
chrome.exe: %(ChromeDir)s\
wow_helper.exe: %(ChromeDir)s\
chrome.dll: %(VersionDir)s\
diff --git a/chrome/installer/mini_installer/chrome_appid.cc b/chrome/installer/mini_installer/chrome_appid.cc
index 841da52..3162523 100644
--- a/chrome/installer/mini_installer/chrome_appid.cc
+++ b/chrome/installer/mini_installer/chrome_appid.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -6,10 +6,8 @@
namespace google_update {
const wchar_t kAppGuid[] = L"{8A69D345-D564-463c-AFF1-A69D9E530F96}";
-const wchar_t kChromeAppHostAppGuid[] =
- L"{FDA71E6F-AC4C-4a00-8B70-9958A68906BF}";
+const wchar_t kSxSAppGuid[] = L"{4ea16ac7-fd5a-47c3-875b-dbf4a2008c20}";
const wchar_t kChromeFrameAppGuid[] = L"{8BA986DA-5100-405E-AA35-86F34A02ACBF}";
const wchar_t kMultiInstallAppGuid[] =
L"{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}";
-const wchar_t kSxSAppGuid[] = L"{4ea16ac7-fd5a-47c3-875b-dbf4a2008c20}";
}
diff --git a/chrome/installer/mini_installer/configuration.cc b/chrome/installer/mini_installer/configuration.cc
index 6c9f5be..cebe50c 100644
--- a/chrome/installer/mini_installer/configuration.cc
+++ b/chrome/installer/mini_installer/configuration.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -34,7 +34,6 @@ void Configuration::Clear() {
argument_count_ = 0;
has_chrome_ = false;
has_chrome_frame_ = false;
- has_app_host_ = false;
is_multi_install_ = false;
is_system_level_ = false;
}
@@ -60,8 +59,6 @@ bool Configuration::InitializeFromCommandLine(const wchar_t* command_line) {
has_chrome_ = true;
else if (0 == ::lstrcmpi(args_[i], L"--chrome-frame"))
has_chrome_frame_ = true;
- else if (0 == ::lstrcmpi(args_[i], L"--app-host"))
- has_app_host_ = true;
else if (0 == ::lstrcmpi(args_[i], L"--multi-install"))
is_multi_install_ = true;
else if (0 == ::lstrcmpi(args_[i], L"--system-level"))
@@ -70,9 +67,9 @@ bool Configuration::InitializeFromCommandLine(const wchar_t* command_line) {
operation_ = CLEANUP;
}
- // Single-install defaults to Chrome.
+ // Single-install is either Chrome or Chrome Frame.
if (!is_multi_install_)
- has_chrome_ = !(has_chrome_frame_ || has_app_host_);
+ has_chrome_ = !has_chrome_frame_;
}
return args_ != NULL;
}
diff --git a/chrome/installer/mini_installer/configuration.h b/chrome/installer/mini_installer/configuration.h
index fb955ad..351a129 100644
--- a/chrome/installer/mini_installer/configuration.h
+++ b/chrome/installer/mini_installer/configuration.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -46,9 +46,6 @@ class Configuration {
// Returns true if --chrome-frame is on the command line.
bool has_chrome_frame() const { return has_chrome_frame_; }
- // Returns true if --app-host is on the command line.
- bool has_app_host() const { return has_app_host_; }
-
// Returns true if --multi-install is on the command line.
bool is_multi_install() const { return is_multi_install_; }
@@ -66,7 +63,6 @@ class Configuration {
Operation operation_;
bool has_chrome_;
bool has_chrome_frame_;
- bool has_app_host_;
bool is_multi_install_;
bool is_system_level_;
diff --git a/chrome/installer/mini_installer/mini_installer.cc b/chrome/installer/mini_installer/mini_installer.cc
index 4414ea2..ea3add3 100644
--- a/chrome/installer/mini_installer/mini_installer.cc
+++ b/chrome/installer/mini_installer/mini_installer.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -159,7 +159,6 @@ void SetInstallerFlags(const Configuration& configuration) {
const REGSAM key_access = KEY_QUERY_VALUE | KEY_SET_VALUE;
const HKEY root_key =
configuration.is_system_level() ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
- // This is ignored if multi-install is true.
const wchar_t* app_guid =
configuration.has_chrome_frame() ?
google_update::kChromeFrameAppGuid :
@@ -223,48 +222,40 @@ void SetInstallerFlags(const Configuration& configuration) {
// Gets the setup.exe path from Registry by looking the value of Uninstall
// string. |size| is measured in wchar_t units.
-bool GetSetupExePathForGuidFromRegistry(bool system_level,
- const wchar_t* app_guid,
- wchar_t* path,
- size_t size) {
- const HKEY root_key = system_level ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
- RegKey key;
- return OpenClientStateKey(root_key, app_guid, KEY_QUERY_VALUE, &key) &&
- (key.ReadValue(kUninstallRegistryValueName, path, size) == ERROR_SUCCESS);
-}
-
-// Gets the setup.exe path from Registry by looking the value of Uninstall
-// string. |size| is measured in wchar_t units.
bool GetSetupExePathFromRegistry(const Configuration& configuration,
wchar_t* path,
size_t size) {
- bool system_level = configuration.is_system_level();
+ const HKEY root_key =
+ configuration.is_system_level() ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
+ RegKey key;
+ bool succeeded = false;
// If this is a multi install, first try looking in the binaries for the path.
- if (configuration.is_multi_install() && GetSetupExePathForGuidFromRegistry(
- system_level, google_update::kMultiInstallAppGuid, path, size)) {
- return true;
+ if (configuration.is_multi_install() &&
+ OpenClientStateKey(root_key, google_update::kMultiInstallAppGuid,
+ KEY_QUERY_VALUE, &key)) {
+ succeeded = (key.ReadValue(kUninstallRegistryValueName, path,
+ size) == ERROR_SUCCESS);
}
- // Failing that, look in Chrome Frame's client state key if --chrome-frame was
+ // Failing that, look in Chrome Frame's client state key --chrome-frame was
// specified.
- if (configuration.has_chrome_frame() && GetSetupExePathForGuidFromRegistry(
- system_level, google_update::kChromeFrameAppGuid, path, size)) {
- return true;
+ if (!succeeded && configuration.has_chrome_frame() &&
+ OpenClientStateKey(root_key, google_update::kChromeFrameAppGuid,
+ KEY_QUERY_VALUE, &key)) {
+ succeeded = (key.ReadValue(kUninstallRegistryValueName, path,
+ size) == ERROR_SUCCESS);
}
- // Make a last-ditch effort to look in the Chrome and App Host client state
- // keys.
- if (GetSetupExePathForGuidFromRegistry(
- system_level, configuration.chrome_app_guid(), path, size)) {
- return true;
- }
- if (configuration.has_app_host() && GetSetupExePathForGuidFromRegistry(
- system_level, google_update::kChromeAppHostAppGuid, path, size)) {
- return true;
+ // Make a last-ditch effort to look in Chrome's client state key.
+ if (!succeeded &&
+ OpenClientStateKey(root_key, configuration.chrome_app_guid(),
+ KEY_QUERY_VALUE, &key)) {
+ succeeded = (key.ReadValue(kUninstallRegistryValueName, path,
+ size) == ERROR_SUCCESS);
}
- return false;
+ return succeeded;
}
// Calls CreateProcess with good default parameters and waits for the process
diff --git a/chrome/installer/setup/chrome_frame_quick_enable.cc b/chrome/installer/setup/chrome_frame_quick_enable.cc
index f78038e..a2202ab 100644
--- a/chrome/installer/setup/chrome_frame_quick_enable.cc
+++ b/chrome/installer/setup/chrome_frame_quick_enable.cc
@@ -100,6 +100,8 @@ InstallStatus ChromeFrameQuickEnable(const InstallationState& machine_state,
FilePath setup_path(chrome_state->GetSetupPath());
const Version& new_version = chrome_state->version();
+ FilePath new_chrome_exe(
+ installer_state->target_path().Append(installer::kChromeNewExe));
// This creates the uninstallation entry for GCF.
AddUninstallShortcutWorkItems(*installer_state, setup_path, new_version,
@@ -112,7 +114,7 @@ InstallStatus ChromeFrameQuickEnable(const InstallationState& machine_state,
new_version, *cf, item_list.get());
const Version* opv = chrome_state->old_version();
- AppendPostInstallTasks(*installer_state, setup_path, opv,
+ AppendPostInstallTasks(*installer_state, setup_path, new_chrome_exe, opv,
new_version, temp_path.path(), item_list.get());
// Before updating the channel values, add Chrome back to the mix so that
@@ -123,11 +125,10 @@ InstallStatus ChromeFrameQuickEnable(const InstallationState& machine_state,
item_list.get());
// Add the items to remove the quick-enable-cf command from the registry.
- AddQuickEnableChromeFrameWorkItems(
- *installer_state, machine_state,
- &chrome_state->uninstall_command().GetProgram(),
- &chrome_state->version(),
- item_list.get());
+ AddQuickEnableWorkItems(*installer_state, machine_state,
+ &chrome_state->uninstall_command().GetProgram(),
+ &chrome_state->version(),
+ item_list.get());
if (!item_list->Do()) {
item_list->Rollback();
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc
index a3bb52f..5895090 100644
--- a/chrome/installer/setup/install.cc
+++ b/chrome/installer/setup/install.cc
@@ -427,8 +427,6 @@ InstallStatus InstallOrUpdateProduct(
// TODO(robertshield): Removing the pending on-reboot moves should be done
// elsewhere.
- // TODO(erikwright): Understand why this is Chrome Frame only and whether
- // it also applies to App Host. Shouldn't it apply to any multi-install too?
const Products& products = installer_state.products();
DCHECK(products.size());
if (installer_state.FindProduct(BrowserDistribution::CHROME_FRAME)) {
diff --git a/chrome/installer/setup/install_worker.cc b/chrome/installer/setup/install_worker.cc
index e3c1fe3..f314fa0 100644
--- a/chrome/installer/setup/install_worker.cc
+++ b/chrome/installer/setup/install_worker.cc
@@ -25,7 +25,6 @@
#include "base/win/registry.h"
#include "base/win/windows_version.h"
#include "chrome/common/chrome_constants.h"
-#include "chrome/common/chrome_switches.h"
#include "chrome/installer/setup/install.h"
#include "chrome/installer/setup/setup_constants.h"
#include "chrome/installer/setup/setup_util.h"
@@ -104,21 +103,16 @@ void AddInstallerCopyTasks(const InstallerState& installer_state,
FilePath exe_dst(installer_dir.Append(setup_path.BaseName()));
FilePath archive_dst(installer_dir.Append(archive_path.BaseName()));
- if (exe_dst != setup_path) {
- install_list->AddCopyTreeWorkItem(setup_path.value(), exe_dst.value(),
- temp_path.value(), WorkItem::ALWAYS);
- }
+ install_list->AddCopyTreeWorkItem(setup_path.value(), exe_dst.value(),
+ temp_path.value(), WorkItem::ALWAYS);
- if (archive_path != archive_dst) {
- // In the past, we copied rather than moved for system level installs so
- // that the permissions of %ProgramFiles% would be picked up. Now that
- // |temp_path| is in %ProgramFiles% for system level installs (and in
- // %LOCALAPPDATA% otherwise), there is no need to do this for the archive.
- // Setup.exe, on the other hand, is created elsewhere so it must always be
- // copied.
- install_list->AddMoveTreeWorkItem(archive_path.value(), archive_dst.value(),
- temp_path.value(), WorkItem::ALWAYS_MOVE);
- }
+ // In the past, we copied rather than moved for system level installs so that
+ // the permissions of %ProgramFiles% would be picked up. Now that |temp_path|
+ // is in %ProgramFiles% for system level installs (and in %LOCALAPPDATA%
+ // otherwise), there is no need to do this for the archive. Setup.exe, on
+ // the other hand, is created elsewhere so it must always be copied.
+ install_list->AddMoveTreeWorkItem(archive_path.value(), archive_dst.value(),
+ temp_path.value(), WorkItem::ALWAYS_MOVE);
}
// This method adds work items to create (or update) Chrome uninstall entry in
@@ -149,16 +143,19 @@ void AddUninstallShortcutWorkItems(const InstallerState& installer_state,
AppendUninstallCommandLineFlags(installer_state, product,
&uninstall_arguments);
- // If Chrome Frame is installed in Ready Mode, add --chrome-frame to Chrome's
- // uninstall entry. We skip this processing in case of uninstall since this
- // means that Chrome Frame is being uninstalled, so there's no need to do any
- // looping.
+ // The Chrome uninstallation command serves as the master uninstall command
+ // for Chrome + all other products (i.e. Chrome Frame) that do not have an
+ // uninstall entry in the Add/Remove Programs dialog. We skip this processing
+ // in case of uninstall since this means that Chrome Frame is being
+ // uninstalled, so there's no need to do any looping.
if (product.is_chrome() &&
installer_state.operation() != InstallerState::UNINSTALL) {
- const Product* chrome_frame =
- installer_state.FindProduct(BrowserDistribution::CHROME_FRAME);
- if (chrome_frame && chrome_frame->HasOption(kOptionReadyMode))
- chrome_frame->AppendProductFlags(&uninstall_arguments);
+ const Products& products = installer_state.products();
+ for (size_t i = 0; i < products.size(); ++i) {
+ const Product& p = *products[i];
+ if (!p.is_chrome() && !p.ShouldCreateUninstallEntry())
+ p.AppendProductFlags(&uninstall_arguments);
+ }
}
std::wstring update_state_key(browser_dist->GetStateKey());
@@ -231,6 +228,28 @@ void AddUninstallShortcutWorkItems(const InstallerState& installer_state,
}
}
+// Add uninstall-related work items for multi-install scenarios.
+void AddMultiUninstallWorkItems(const InstallerState& installer_state,
+ const FilePath& setup_path,
+ const Version& new_version,
+ WorkItemList* install_list) {
+ DCHECK(installer_state.is_multi_install());
+
+ // The mini_installer needs a reliable way to locate setup.exe for diff
+ // updates. For single-installs, the product's ClientState key is consulted
+ // (Chrome's or Chrome Frame's). For multi-installs, the binaries' key is
+ // used.
+ const HKEY reg_root = installer_state.root_key();
+ std::wstring binaries_state_key(
+ installer_state.multi_package_binaries_distribution()->GetStateKey());
+ FilePath installer_path(
+ installer_state.GetInstallerDirectory(new_version)
+ .Append(setup_path.BaseName()));
+ install_list->AddCreateRegKeyWorkItem(reg_root, binaries_state_key);
+ install_list->AddSetRegValueWorkItem(reg_root, binaries_state_key,
+ installer::kUninstallStringField, installer_path.value(), true);
+}
+
// Create Version key for a product (if not already present) and sets the new
// product version as the last step.
void AddVersionKeyWorkItems(HKEY root,
@@ -267,32 +286,6 @@ void AddVersionKeyWorkItems(HKEY root,
true); // overwrite version
}
-void AddInstallAppCommandWorkItems(const InstallerState& installer_state,
- const InstallationState& machine_state,
- const FilePath* setup_path,
- const Version* new_version,
- const Product& product,
- WorkItemList* work_item_list) {
- DCHECK(product.is_chrome_app_host());
-
- std::wstring cmd_key(product.distribution()->GetVersionKey());
- cmd_key.append(1, L'\\').append(google_update::kRegCommandsKey)
- .append(1, L'\\').append(kCmdInstallApp);
-
- if (installer_state.operation() != InstallerState::UNINSTALL) {
- FilePath target_path(installer_state.target_path());
- CommandLine cmd_line(target_path.Append(installer::kChromeAppHostExe));
- cmd_line.AppendSwitchASCII(::switches::kAppsInstallFromManifestURL, "%1");
-
- AppCommand cmd(cmd_line.GetCommandLineString(), true, true);
- cmd.AddWorkItems(installer_state.root_key(), cmd_key, work_item_list);
- } else {
- work_item_list->AddDeleteRegKeyWorkItem(installer_state.root_key(),
- cmd_key)->set_log_message(
- "removing install-application command");
- }
-}
-
void AddProductSpecificWorkItems(const InstallationState& original_state,
const InstallerState& installer_state,
const FilePath& setup_path,
@@ -305,10 +298,6 @@ void AddProductSpecificWorkItems(const InstallationState& original_state,
AddChromeFrameWorkItems(original_state, installer_state, setup_path,
new_version, p, list);
}
- if (p.is_chrome_app_host()) {
- AddInstallAppCommandWorkItems(installer_state, original_state,
- &setup_path, &new_version, p, list);
- }
}
}
@@ -577,6 +566,7 @@ void AddDeleteUninstallShortcutsForMSIWorkItems(
// false.
bool AppendPostInstallTasks(const InstallerState& installer_state,
const FilePath& setup_path,
+ const FilePath& new_chrome_exe,
const Version* current_version,
const Version& new_version,
const FilePath& temp_path,
@@ -585,8 +575,6 @@ bool AppendPostInstallTasks(const InstallerState& installer_state,
HKEY root = installer_state.root_key();
const Products& products = installer_state.products();
- FilePath new_chrome_exe(
- installer_state.target_path().Append(installer::kChromeNewExe));
// Append work items that will only be executed if this was an update.
// We update the 'opv' value with the current version that is active,
@@ -727,29 +715,32 @@ bool AppendPostInstallTasks(const InstallerState& installer_state,
return true;
}
-void AddChromeWorkItems(const InstallationState& original_state,
- const InstallerState& installer_state,
- const FilePath& setup_path,
- const FilePath& archive_path,
- const FilePath& src_path,
- const FilePath& temp_path,
- const Version& new_version,
- scoped_ptr<Version>* current_version,
- WorkItemList* install_list) {
+void AddInstallWorkItems(const InstallationState& original_state,
+ const InstallerState& installer_state,
+ const FilePath& setup_path,
+ const FilePath& archive_path,
+ const FilePath& src_path,
+ const FilePath& temp_path,
+ const Version& new_version,
+ scoped_ptr<Version>* current_version,
+ WorkItemList* install_list) {
+ DCHECK(install_list);
+
const FilePath& target_path = installer_state.target_path();
+ // A temp directory that work items need and the actual install directory.
+ install_list->AddCreateDirWorkItem(temp_path);
+ install_list->AddCreateDirWorkItem(target_path);
+
if (current_version != NULL && current_version->get() != NULL) {
// Delete the archive from an existing install to save some disk space. We
// make this an unconditional work item since there's no need to roll this
// back; if installation fails we'll be moved to the "-full" channel anyway.
FilePath old_installer_dir(
installer_state.GetInstallerDirectory(**current_version));
- FilePath old_archive(old_installer_dir.Append(installer::kChromeArchive));
- // Don't delete the archive that we are actually installing from.
- if (archive_path != old_archive) {
- install_list->AddDeleteTreeWorkItem(old_archive, temp_path)
- ->set_ignore_failure(true);
- }
+ FilePath old_archive(old_installer_dir.Append(archive_path.BaseName()));
+ install_list->AddDeleteTreeWorkItem(old_archive, temp_path)
+ ->set_ignore_failure(true);
}
// Delete any new_chrome.exe if present (we will end up creating a new one
@@ -852,48 +843,6 @@ void AddChromeWorkItems(const InstallationState& original_state,
AddInstallerCopyTasks(installer_state, setup_path, archive_path, temp_path,
new_version, install_list);
-}
-
-void AddInstallWorkItems(const InstallationState& original_state,
- const InstallerState& installer_state,
- const FilePath& setup_path,
- const FilePath& archive_path,
- const FilePath& src_path,
- const FilePath& temp_path,
- const Version& new_version,
- scoped_ptr<Version>* current_version,
- WorkItemList* install_list) {
- DCHECK(install_list);
-
- const FilePath& target_path = installer_state.target_path();
-
- // A temp directory that work items need and the actual install directory.
- install_list->AddCreateDirWorkItem(temp_path);
- install_list->AddCreateDirWorkItem(target_path);
-
- if (installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER) ||
- installer_state.FindProduct(BrowserDistribution::CHROME_FRAME) ||
- installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES)) {
- AddChromeWorkItems(original_state,
- installer_state,
- setup_path,
- archive_path,
- src_path,
- temp_path,
- new_version,
- current_version,
- install_list);
- }
-
- if (installer_state.FindProduct(BrowserDistribution::CHROME_APP_HOST)) {
- install_list->AddCopyTreeWorkItem(
- src_path.Append(installer::kChromeAppHostExe).value(),
- target_path.Append(installer::kChromeAppHostExe).value(),
- temp_path.value(),
- WorkItem::ALWAYS,
- L"");
- }
-
const HKEY root = installer_state.root_key();
// Only set "lang" for user-level installs since for system-level, the install
// language may not be related to a given user's runtime language.
@@ -916,6 +865,15 @@ void AddInstallWorkItems(const InstallationState& original_state,
install_list);
}
+ if (installer_state.is_multi_install()) {
+ AddMultiUninstallWorkItems(installer_state, setup_path, new_version,
+ install_list);
+
+ AddVersionKeyWorkItems(root,
+ installer_state.multi_package_binaries_distribution(), new_version,
+ add_language_identifier, install_list);
+ }
+
// Add any remaining work items that involve special settings for
// each product.
AddProductSpecificWorkItems(original_state, installer_state, setup_path,
@@ -924,16 +882,13 @@ void AddInstallWorkItems(const InstallationState& original_state,
// Copy over brand, usagestats, and other values.
AddGoogleUpdateWorkItems(original_state, installer_state, install_list);
- AddQuickEnableApplicationHostWorkItems(installer_state, original_state,
- &setup_path, &new_version,
- install_list);
-
- AddQuickEnableChromeFrameWorkItems(installer_state, original_state,
- &setup_path, &new_version, install_list);
+ AddQuickEnableWorkItems(installer_state, original_state, &setup_path,
+ &new_version, install_list);
// Append the tasks that run after the installation.
AppendPostInstallTasks(installer_state,
setup_path,
+ new_chrome_exe,
current_version->get(),
new_version,
temp_path,
@@ -1391,14 +1346,11 @@ void RefreshElevationPolicy() {
}
}
-void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
- const InstallationState& machine_state,
- const FilePath* setup_path,
- const Version* new_version,
- WorkItemList* work_item_list,
- bool have_child_product,
- const CommandLine& child_product_switches,
- const std::wstring& command_id) {
+void AddQuickEnableWorkItems(const InstallerState& installer_state,
+ const InstallationState& machine_state,
+ const FilePath* setup_path,
+ const Version* new_version,
+ WorkItemList* work_item_list) {
DCHECK(setup_path ||
installer_state.operation() == InstallerState::UNINSTALL);
DCHECK(new_version ||
@@ -1406,17 +1358,27 @@ void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
DCHECK(work_item_list);
const bool system_install = installer_state.system_install();
- bool have_chrome_binaries = false;
+ bool have_multi_chrome = false;
+ bool have_chrome_frame = false;
// STEP 1: Figure out the state of the machine before the operation.
const ProductState* product_state = NULL;
- // Are the Chrome Binaries already on the machine?
+ // Is multi-install Chrome already on the machine?
product_state =
machine_state.GetProductState(system_install,
- BrowserDistribution::CHROME_BINARIES);
+ BrowserDistribution::CHROME_BROWSER);
if (product_state != NULL && product_state->is_multi_install())
- have_chrome_binaries = true;
+ have_multi_chrome = true;
+
+ // Is Chrome Frame !ready-mode already on the machine?
+ product_state =
+ machine_state.GetProductState(system_install,
+ BrowserDistribution::CHROME_FRAME);
+ if (product_state != NULL &&
+ !product_state->uninstall_command().HasSwitch(
+ switches::kChromeFrameReadyMode))
+ have_chrome_frame = true;
// STEP 2: Now take into account the current operation.
const Product* product = NULL;
@@ -1424,15 +1386,29 @@ void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
if (installer_state.operation() == InstallerState::UNINSTALL) {
// Forget about multi-install Chrome if it is being uninstalled.
product =
- installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES);
+ installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER);
if (product != NULL && installer_state.is_multi_install())
- have_chrome_binaries = false;
+ have_multi_chrome = false;
+
+ // Forget about Chrome Frame if it is being uninstalled. Note that we don't
+ // bother to check !HasOption(kOptionReadyMode) since have_chrome_frame
+ // should have been false for that case in the first place. It's odd if it
+ // wasn't, but the right thing to do in that case is to proceed with the
+ // thought that CF will not be installed in any sense when we reach the
+ // finish line.
+ if (installer_state.FindProduct(BrowserDistribution::CHROME_FRAME) != NULL)
+ have_chrome_frame = false;
} else {
- // Check if we're installing Chrome Binaries
+ // Check if we're installing multi-install Chrome.
product =
- installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES);
+ installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER);
if (product != NULL && installer_state.is_multi_install())
- have_chrome_binaries = true;
+ have_multi_chrome = true;
+
+ // Check if we're installing Chrome Frame !ready-mode.
+ product = installer_state.FindProduct(BrowserDistribution::CHROME_FRAME);
+ if (product != NULL && !product->HasOption(kOptionReadyMode))
+ have_chrome_frame = true;
}
// STEP 3: Decide what to do based on the final state of things.
@@ -1443,29 +1419,31 @@ void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
} operation = DO_NOTHING;
FilePath binaries_setup_path;
- if (have_child_product) {
- // Child product is being uninstalled. Unconditionally remove the Quick
- // Enable command from the binaries. We do this even if multi-install Chrome
- // isn't installed since we don't want them left behind in any case.
+ if (have_chrome_frame) {
+ // Chrome Frame !ready-mode is or will be installed. Unconditionally remove
+ // the quick-enable-cf command from the binaries. We do this even if
+ // multi-install Chrome isn't installed since we don't want them left
+ // behind in any case.
operation = REMOVE_COMMAND;
- } else if (have_chrome_binaries) {
- // Child product isn't (to be) installed while multi-install Chrome is (to
- // be) installed. Add the Quick Enable command to the binaries.
+ } else if (have_multi_chrome) {
+ // Chrome Frame isn't (to be) installed or is (to be) installed only in
+ // ready-mode, while multi-install Chrome is (to be) installed. Add the
+ // quick-enable-cf command to the binaries.
operation = ADD_COMMAND;
// The path to setup.exe contains the version of the Chrome binaries, so it
// takes a little work to get it right.
if (installer_state.operation() == InstallerState::UNINSTALL) {
- // One or more products are being uninstalled, but not the binaries. Use
- // the path to the currently installed Chrome setup.exe.
+ // Chrome Frame is being uninstalled. Use the path to the currently
+ // installed Chrome setup.exe.
product_state =
machine_state.GetProductState(system_install,
- BrowserDistribution::CHROME_BINARIES);
+ BrowserDistribution::CHROME_BROWSER);
DCHECK(product_state);
binaries_setup_path = product_state->uninstall_command().GetProgram();
} else {
- // Chrome Binaries are being installed, updated, or otherwise operated on.
+ // Chrome is being installed, updated, or otherwise being operated on.
// Use the path to the given |setup_path| in the normal location of
- // multi-install Chrome Binaries of the given |version|.
+ // multi-install Chrome of the given |version|.
DCHECK(installer_state.is_multi_install());
binaries_setup_path =
installer_state.GetInstallerDirectory(*new_version).Append(
@@ -1481,116 +1459,26 @@ void AddGenericQuickEnableWorkItems(const InstallerState& installer_state,
BrowserDistribution::CHROME_BINARIES);
std::wstring cmd_key(binaries->GetVersionKey());
cmd_key.append(1, L'\\').append(google_update::kRegCommandsKey)
- .append(1, L'\\').append(command_id);
+ .append(1, L'\\').append(kCmdQuickEnableCf);
if (operation == ADD_COMMAND) {
DCHECK(!binaries_setup_path.empty());
CommandLine cmd_line(binaries_setup_path);
- cmd_line.AppendArguments(child_product_switches,
- false); // include_program
+ cmd_line.AppendSwitch(switches::kMultiInstall);
+ if (installer_state.system_install())
+ cmd_line.AppendSwitch(switches::kSystemLevel);
if (installer_state.verbose_logging())
cmd_line.AppendSwitch(switches::kVerboseLogging);
+ cmd_line.AppendSwitch(switches::kChromeFrameQuickEnable);
AppCommand cmd(cmd_line.GetCommandLineString(), true, true);
cmd.AddWorkItems(installer_state.root_key(), cmd_key, work_item_list);
} else {
DCHECK(operation == REMOVE_COMMAND);
work_item_list->AddDeleteRegKeyWorkItem(installer_state.root_key(),
cmd_key)->set_log_message(
- "removing " + WideToASCII(command_id) + " command");
+ "removing quick-enable-cf command");
}
}
}
-void AddQuickEnableChromeFrameWorkItems(const InstallerState& installer_state,
- const InstallationState& machine_state,
- const FilePath* setup_path,
- const Version* new_version,
- WorkItemList* work_item_list) {
- DCHECK(setup_path ||
- installer_state.operation() == InstallerState::UNINSTALL);
- DCHECK(new_version ||
- installer_state.operation() == InstallerState::UNINSTALL);
- DCHECK(work_item_list);
-
- const bool system_install = installer_state.system_install();
- bool have_chrome_frame = false;
-
- // STEP 1: Figure out the state of the machine before the operation.
- const ProductState* product_state = NULL;
-
- // Is Chrome Frame !ready-mode already on the machine?
- product_state =
- machine_state.GetProductState(system_install,
- BrowserDistribution::CHROME_FRAME);
- if (product_state != NULL &&
- !product_state->uninstall_command().HasSwitch(
- switches::kChromeFrameReadyMode))
- have_chrome_frame = true;
-
- // STEP 2: Now take into account the current operation.
- const Product* product = NULL;
-
- if (installer_state.operation() == InstallerState::UNINSTALL) {
- // Forget about Chrome Frame if it is being uninstalled. Note that we don't
- // bother to check !HasOption(kOptionReadyMode) since have_chrome_frame
- // should have been false for that case in the first place. It's odd if it
- // wasn't, but the right thing to do in that case is to proceed with the
- // thought that CF will not be installed in any sense when we reach the
- // finish line.
- if (installer_state.FindProduct(BrowserDistribution::CHROME_FRAME) != NULL)
- have_chrome_frame = false;
- } else {
- // Check if we're installing Chrome Frame !ready-mode.
- product = installer_state.FindProduct(BrowserDistribution::CHROME_FRAME);
- if (product != NULL && !product->HasOption(kOptionReadyMode))
- have_chrome_frame = true;
- }
-
- CommandLine cmd_line(CommandLine::NO_PROGRAM);
- cmd_line.AppendSwitch(switches::kMultiInstall);
- if (installer_state.system_install())
- cmd_line.AppendSwitch(switches::kSystemLevel);
- cmd_line.AppendSwitch(switches::kChromeFrameQuickEnable);
-
- AddGenericQuickEnableWorkItems(installer_state,
- machine_state,
- setup_path,
- new_version,
- work_item_list,
- have_chrome_frame,
- cmd_line,
- kCmdQuickEnableCf);
-}
-
-void AddQuickEnableApplicationHostWorkItems(
- const InstallerState& installer_state,
- const InstallationState& machine_state,
- const FilePath* setup_path,
- const Version* new_version,
- WorkItemList* work_item_list) {
- DCHECK(setup_path ||
- installer_state.operation() == InstallerState::UNINSTALL);
- DCHECK(new_version ||
- installer_state.operation() == InstallerState::UNINSTALL);
- DCHECK(work_item_list);
-
- CommandLine cmd_line(CommandLine::NO_PROGRAM);
- cmd_line.AppendSwitch(switches::kMultiInstall);
- cmd_line.AppendSwitch(switches::kChromeAppHost);
-
- // For system-level binaries there is no way to keep the command state in sync
- // with the installation/uninstallation of the Application Host (which is
- // always at user-level).
- // So we pass false for 'have_child_product' to cause this command to always
- // be installed if the Chrome Binaries are installed.
- AddGenericQuickEnableWorkItems(installer_state,
- machine_state,
- setup_path,
- new_version,
- work_item_list,
- false, // have_child_product
- cmd_line,
- kCmdQuickEnableApplicationHost);
-}
-
} // namespace installer
diff --git a/chrome/installer/setup/install_worker.h b/chrome/installer/setup/install_worker.h
index c112f8c..3a32d72 100644
--- a/chrome/installer/setup/install_worker.h
+++ b/chrome/installer/setup/install_worker.h
@@ -63,6 +63,7 @@ void AddUsageStatsWorkItems(const InstallationState& original_state,
// false.
bool AppendPostInstallTasks(const InstallerState& installer_state,
const FilePath& setup_path,
+ const FilePath& new_chrome_exe,
const Version* current_version,
const Version& new_version,
const FilePath& temp_path,
@@ -181,25 +182,11 @@ void RefreshElevationPolicy();
// run) and |new_version| (the version of the product(s) currently being
// installed) are required when processing product installation; they are unused
// (and may therefore be NULL) when uninstalling.
-void AddQuickEnableChromeFrameWorkItems(const InstallerState& installer_state,
- const InstallationState& machine_state,
- const FilePath* setup_path,
- const Version* new_version,
- WorkItemList* work_item_list);
-
-// Add work items to add or remove the "quick-enable-application-host" command
-// to the multi-installer binaries' version key on the basis of the current
-// operation (represented in |installer_state|) and the pre-existing machine
-// configuration (represented in |machine_state|). |setup_path| (the path to
-// the executable currently being run) and |new_version| (the version of the
-// product(s) currently being installed) are required when processing product
-// installation; they are unused (and may therefore be NULL) when uninstalling.
-void AddQuickEnableApplicationHostWorkItems(
- const InstallerState& installer_state,
- const InstallationState& machine_state,
- const FilePath* setup_path,
- const Version* new_version,
- WorkItemList* work_item_list);
+void AddQuickEnableWorkItems(const InstallerState& installer_state,
+ const InstallationState& machine_state,
+ const FilePath* setup_path,
+ const Version* new_version,
+ WorkItemList* work_item_list);
} // namespace installer
diff --git a/chrome/installer/setup/setup_main.cc b/chrome/installer/setup/setup_main.cc
index eb59d17..9d9ff5a 100644
--- a/chrome/installer/setup/setup_main.cc
+++ b/chrome/installer/setup/setup_main.cc
@@ -148,10 +148,8 @@ DWORD UnPackArchive(const FilePath& archive,
void AddExistingMultiInstalls(const InstallationState& original_state,
InstallerState* installer_state) {
if (installer_state->is_multi_install()) {
- for (size_t i = 0; i < BrowserDistribution::NUM_TYPES; ++i) {
- BrowserDistribution::Type type =
- static_cast<BrowserDistribution::Type>(i);
-
+ for (size_t i = 0; i < BrowserDistribution::kNumProductTypes; ++i) {
+ BrowserDistribution::Type type = BrowserDistribution::kProductTypes[i];
if (!installer_state->FindProduct(type)) {
const ProductState* state =
original_state.GetProductState(installer_state->system_install(),
@@ -335,20 +333,18 @@ bool CheckGroupPolicySettings(const InstallationState& original_state,
#endif // defined(GOOGLE_CHROME_BUILD)
}
-// If Chrome Frame is being installed by itself in multi-mode, non-ready-mode:
-// - If a non-multi Chrome Frame installation is present, fail.
-// If Chrome Frame is being installed by itself in multi-mode, ready-mode:
-// - If no Chrome installation is present, fail.
-// - If a Chrome installation is present, add it to the set of products to
-// install.
-// If Chrome Frame is being installed with Chrome in multi-mode, ready-mode:
+// The supported multi-install modes are:
+// --multi-install --chrome --chrome-frame --ready-mode
// - If a non-multi Chrome Frame installation is present, Chrome Frame is
// removed from |installer_state|'s list of products (thereby preserving
// the existing SxS install).
// - If a multi Chrome Frame installation is present, its options are
// preserved (i.e., the --ready-mode command-line option is ignored).
-// If any product is being installed in single-mode that already exists in
-// multi-mode, fail.
+// --multi-install --chrome-frame
+// - If a non-multi Chrome Frame installation is present, fail.
+// - If --ready-mode and no Chrome installation is present, fail.
+// - If a Chrome installation is present, add it to the set of products to
+// install.
bool CheckMultiInstallConditions(const InstallationState& original_state,
InstallerState* installer_state,
installer::InstallStatus* status) {
@@ -360,42 +356,13 @@ bool CheckMultiInstallConditions(const InstallationState& original_state,
if (installer_state->is_multi_install()) {
const Product* chrome =
installer_state->FindProduct(BrowserDistribution::CHROME_BROWSER);
- const Product* app_host =
- installer_state->FindProduct(BrowserDistribution::CHROME_APP_HOST);
- const Product* binaries =
- installer_state->FindProduct(BrowserDistribution::CHROME_BINARIES);
const Product* chrome_frame =
installer_state->FindProduct(BrowserDistribution::CHROME_FRAME);
const ProductState* cf_state =
original_state.GetProductState(system_level,
BrowserDistribution::CHROME_FRAME);
- const ProductState* chrome_state =
- original_state.GetProductState(system_level,
- BrowserDistribution::CHROME_BROWSER);
-
- if (!binaries) {
- if (app_host && !chrome && !chrome_frame && !cf_state && !chrome_state) {
- DCHECK(!system_level);
- // App Host may use Chrome/Chrome binaries at system-level.
- if (original_state.GetProductState(
- true, // system
- BrowserDistribution::CHROME_BROWSER) ||
- original_state.GetProductState(
- true, // system
- BrowserDistribution::CHROME_BINARIES)) {
- return true;
- } else {
- return false;
- }
- } else {
- // Every other scenario requires the binaries to be installed/updated
- // simultaneous to the main product.
- return false;
- }
- }
-
- if (chrome) {
- if (chrome_frame &&
+ if (chrome != NULL) {
+ if (chrome_frame != NULL &&
chrome_frame->HasOption(installer::kOptionReadyMode)) {
// We're being asked to install Chrome with Chrome Frame in ready-mode.
// This is an optimistic operation: if a SxS install of Chrome Frame
@@ -417,83 +384,51 @@ bool CheckMultiInstallConditions(const InstallationState& original_state,
VLOG(1) << "Performing initial install of Chrome Frame ready-mode.";
}
}
- } else if (chrome_state != NULL) {
- // Chrome Frame is being installed in multi-install mode, and Chrome is
- // already present. Add Chrome to the set of products (making it
- // multi-install in the process) so that it is updated, too.
- scoped_ptr<Product> multi_chrome(new Product(
- BrowserDistribution::GetSpecificDistribution(
- BrowserDistribution::CHROME_BROWSER)));
- multi_chrome->SetOption(installer::kOptionMultiInstall, true);
- chrome = installer_state->AddProduct(&multi_chrome);
- VLOG(1) << "Upgrading existing Chrome browser in multi-install mode.";
- } else if (chrome_frame &&
- chrome_frame->HasOption(installer::kOptionReadyMode)) {
- // Chrome Frame with ready-mode is to be installed, yet Chrome is
- // neither installed nor being installed. Fail.
- LOG(ERROR) << "Cannot install Chrome Frame in ready mode without Chrome.";
- *status = installer::READY_MODE_REQUIRES_CHROME;
- installer_state->WriteInstallerResult(
- *status, IDS_INSTALL_READY_MODE_REQUIRES_CHROME_BASE, NULL);
- return false;
+ } else if (chrome_frame != NULL) {
+ // We're being asked to install or update Chrome Frame alone.
+ const ProductState* chrome_state =
+ original_state.GetProductState(system_level,
+ BrowserDistribution::CHROME_BROWSER);
+ if (chrome_state != NULL) {
+ // Add Chrome to the set of products (making it multi-install in the
+ // process) so that it is updated, too.
+ scoped_ptr<Product> multi_chrome(new Product(
+ BrowserDistribution::GetSpecificDistribution(
+ BrowserDistribution::CHROME_BROWSER)));
+ multi_chrome->SetOption(installer::kOptionMultiInstall, true);
+ chrome = installer_state->AddProduct(&multi_chrome);
+ VLOG(1) << "Upgrading existing multi-install Chrome browser along with "
+ << chrome_frame->distribution()->GetAppShortCutName();
+ } else if (chrome_frame->HasOption(installer::kOptionReadyMode)) {
+ // Chrome Frame with ready-mode is to be installed, yet Chrome is
+ // neither installed nor being installed. Fail.
+ LOG(ERROR) << "Cannot install Chrome Frame in ready mode without "
+ "Chrome.";
+ *status = installer::READY_MODE_REQUIRES_CHROME;
+ installer_state->WriteInstallerResult(*status,
+ IDS_INSTALL_READY_MODE_REQUIRES_CHROME_BASE, NULL);
+ return false;
+ }
}
// Fail if we're installing Chrome Frame when a single-install of it is
// already installed.
// TODO(grt): Add support for migration of Chrome Frame from single- to
// multi-install.
- if (chrome_frame && cf_state && !cf_state->is_multi_install()) {
+ if (chrome_frame != NULL &&
+ cf_state != NULL && !cf_state->is_multi_install()) {
LOG(ERROR) << "Cannot migrate existing Chrome Frame installation to "
- << "multi-install.";
+ "multi-install.";
*status = installer::NON_MULTI_INSTALLATION_EXISTS;
installer_state->WriteInstallerResult(*status,
IDS_INSTALL_NON_MULTI_INSTALLATION_EXISTS_BASE, NULL);
return false;
}
- } else {
- // This is a non-multi installation.
-
+ } else if (DCHECK_IS_ON()) {
// It isn't possible to stuff two products into a single-install
// InstallerState. Abort the process here in debug builds just in case
// someone finds a way.
DCHECK_EQ(1U, products.size());
- if (products.size() != 1)
- return false;
-
- // Check for an existing installation of the product.
- const ProductState* product_state = original_state.GetProductState(
- system_level, products[0]->distribution()->GetType());
- if (product_state != NULL) {
- // Block downgrades from multi-install to single-install.
- if (product_state->is_multi_install()) {
- LOG(ERROR) << "Multi-install "
- << products[0]->distribution()->GetAppShortCutName()
- << " exists; aborting single install.";
- *status = installer::MULTI_INSTALLATION_EXISTS;
- installer_state->WriteInstallerResult(*status,
- IDS_INSTALL_MULTI_INSTALLATION_EXISTS_BASE, NULL);
- return false;
- }
- }
-
- }
-
- return true;
-}
-
-bool CheckAppHostPreconditions(const InstallationState& original_state,
- InstallerState* installer_state) {
- if (!installer_state->FindProduct(BrowserDistribution::CHROME_APP_HOST))
- return true;
-
- if (!installer_state->is_multi_install()) {
- VLOG(1) << "Application Host may only be installed in multi-install mode.";
- return false;
- }
-
- if (installer_state->system_install()) {
- VLOG(1) << "Application Host may only be installed at user-level.";
- return false;
}
return true;
@@ -511,11 +446,9 @@ bool CheckAppHostPreconditions(const InstallationState& original_state,
bool CheckPreInstallConditions(const InstallationState& original_state,
InstallerState* installer_state,
installer::InstallStatus* status) {
- if (!CheckAppHostPreconditions(original_state, installer_state))
- return false;
-
- if (!CheckMultiInstallConditions(original_state, installer_state, status))
- return false;
+ // See what products are already installed in multi mode. When we do multi
+ // installs, we must upgrade all installations since they share the binaries.
+ AddExistingMultiInstalls(original_state, installer_state);
const Products& products = installer_state->products();
if (products.empty()) {
@@ -528,47 +461,57 @@ bool CheckPreInstallConditions(const InstallationState& original_state,
return false;
}
- // See what products are already installed in multi mode. When we do multi
- // installs, we must upgrade all installations since they share the binaries.
- AddExistingMultiInstalls(original_state, installer_state);
+ if (!CheckMultiInstallConditions(original_state, installer_state, status))
+ return false;
- if (!installer_state->system_install()) {
- // This is a user-level installation. Make sure that we are not installing
- // on top of an existing system-level installation.
- for (size_t i = 0; i < products.size(); ++i) {
- const Product* product = products[i];
- BrowserDistribution* browser_dist = product->distribution();
- const ProductState* user_level_product_state =
- original_state.GetProductState(false, browser_dist->GetType());
- const ProductState* system_level_product_state =
- original_state.GetProductState(true, browser_dist->GetType());
+ bool is_first_install = true;
+ const bool system_level = installer_state->system_install();
- // Allow upgrades to proceed so that out-of-date versions are not left
- // around.
- if (user_level_product_state)
- continue;
+ for (size_t i = 0; i < products.size(); ++i) {
+ const Product* product = products[i];
+ BrowserDistribution* browser_dist = product->distribution();
- // This is a new user-level install...
+ // Check for an existing installation of the product.
+ const ProductState* product_state =
+ original_state.GetProductState(system_level, browser_dist->GetType());
+ if (product_state != NULL) {
+ is_first_install = false;
+ // Block downgrades from multi-install to single-install.
+ if (!installer_state->is_multi_install() &&
+ product_state->is_multi_install()) {
+ LOG(ERROR) << "Multi-install " << browser_dist->GetAppShortCutName()
+ << " exists; aborting single install.";
+ *status = installer::MULTI_INSTALLATION_EXISTS;
+ installer_state->WriteInstallerResult(*status,
+ IDS_INSTALL_MULTI_INSTALLATION_EXISTS_BASE, NULL);
+ return false;
+ }
+ }
- if (system_level_product_state) {
- // ... and the product already exists at system-level.
+ // Check to avoid attempting to lay down a user-level installation on top
+ // of a system-level one.
+ const ProductState* other_state =
+ original_state.GetProductState(!system_level, browser_dist->GetType());
+ if (other_state != NULL && !system_level) {
+ if (is_first_install) {
+ // This is a user-level install and there is a system-level install of
+ // the product.
LOG(ERROR) << "Already installed version "
- << system_level_product_state->version().GetString()
+ << other_state->version().GetString()
<< " at system-level conflicts with this one at user-level.";
if (product->is_chrome()) {
// Instruct Google Update to launch the existing system-level Chrome.
// There should be no error dialog.
- FilePath install_path(installer::GetChromeInstallPath(true, // system
- browser_dist));
- if (install_path.empty()) {
- // Give up if we failed to construct the install path.
+ FilePath chrome_exe(installer::GetChromeInstallPath(!system_level,
+ browser_dist));
+ if (chrome_exe.empty()) {
+ // If we failed to construct install path. Give up.
*status = installer::OS_ERROR;
installer_state->WriteInstallerResult(*status,
- IDS_INSTALL_OS_ERROR_BASE,
- NULL);
+ IDS_INSTALL_OS_ERROR_BASE, NULL);
} else {
*status = installer::EXISTING_VERSION_LAUNCHED;
- FilePath chrome_exe = install_path.Append(installer::kChromeExe);
+ chrome_exe = chrome_exe.Append(installer::kChromeExe);
CommandLine cmd(chrome_exe);
cmd.AppendSwitch(switches::kFirstRun);
installer_state->WriteInstallerResult(*status, 0, NULL);
@@ -576,13 +519,31 @@ bool CheckPreInstallConditions(const InstallationState& original_state,
base::LaunchProcess(cmd, base::LaunchOptions(), NULL);
}
} else {
- // Display an error message for other products.
+ // Display an error message for Chrome Frame.
*status = installer::SYSTEM_LEVEL_INSTALL_EXISTS;
- installer_state->WriteInstallerResult(
- *status, IDS_INSTALL_SYSTEM_LEVEL_EXISTS_BASE, NULL);
+ installer_state->WriteInstallerResult(*status,
+ IDS_INSTALL_SYSTEM_LEVEL_EXISTS_BASE, NULL);
}
return false;
}
+ // This is an update, not a new install. Allow it to take place so that
+ // out-of-date versions are not left around.
+ }
+ }
+
+ // If no previous installation of Chrome, make sure installation directory
+ // either does not exist or can be deleted (i.e. is not locked by some other
+ // process).
+ if (is_first_install) {
+ if (file_util::PathExists(installer_state->target_path()) &&
+ !file_util::Delete(installer_state->target_path(), true)) {
+ LOG(ERROR) << "Installation directory "
+ << installer_state->target_path().value()
+ << " exists and can not be deleted.";
+ *status = installer::INSTALL_DIR_IN_USE;
+ int str_id = IDS_INSTALL_DIR_IN_USE_BASE;
+ installer_state->WriteInstallerResult(*status, str_id, NULL);
+ return false;
}
}
@@ -609,7 +570,7 @@ installer::InstallStatus InstallProductsHelper(
archive = cmd_line.GetSwitchValuePath(
installer::switches::kInstallArchive);
}
-
+ VLOG(1) << "Archive found to install Chrome " << archive.value();
const Products& products = installer_state.products();
// Create a temp folder where we will unpack Chrome archive. If it fails,
@@ -625,48 +586,13 @@ installer::InstallStatus InstallProductsHelper(
VLOG(1) << "created path " << temp_path.path().value();
FilePath unpack_path(temp_path.path().Append(installer::kInstallSourceDir));
-
- bool unpacked = false;
-
- // We want to keep uncompressed archive (chrome.7z) that we get after
- // uncompressing and binary patching. Get the location for this file.
- FilePath archive_to_copy;
- if (file_util::PathExists(archive)) {
- VLOG(1) << "Archive found to install Chrome " << archive.value();
- if (UnPackArchive(archive, installer_state, temp_path.path(), unpack_path,
- archive_type)) {
- install_status = (*archive_type) == installer::INCREMENTAL_ARCHIVE_TYPE ?
- installer::APPLY_DIFF_PATCH_FAILED : installer::UNCOMPRESSION_FAILED;
- installer_state.WriteInstallerResult(
- install_status,
- IDS_INSTALL_UNCOMPRESSION_FAILED_BASE,
- NULL);
- } else {
- unpacked = true;
- archive_to_copy = temp_path.path().Append(installer::kChromeArchive);
- }
+ if (UnPackArchive(archive, installer_state, temp_path.path(), unpack_path,
+ archive_type)) {
+ install_status = (*archive_type) == installer::INCREMENTAL_ARCHIVE_TYPE ?
+ installer::APPLY_DIFF_PATCH_FAILED : installer::UNCOMPRESSION_FAILED;
+ installer_state.WriteInstallerResult(install_status,
+ IDS_INSTALL_UNCOMPRESSION_FAILED_BASE, NULL);
} else {
- FilePath uncompressed_archive(cmd_line.GetProgram().DirName().Append(
- installer::kChromeArchive));
-
- if (file_util::PathExists(uncompressed_archive)) {
- VLOG(1) << "Uncompressed archive found to install Chrome "
- << uncompressed_archive.value();
- *archive_type = installer::FULL_ARCHIVE_TYPE;
- string16 unpacked_file;
- if (LzmaUtil::UnPackArchive(uncompressed_archive.value(),
- unpack_path.value(), &unpacked_file)) {
- installer_state.WriteInstallerResult(
- installer::UNCOMPRESSION_FAILED,
- IDS_INSTALL_UNCOMPRESSION_FAILED_BASE,
- NULL);
- } else {
- unpacked = true;
- archive_to_copy = uncompressed_archive;
- }
- }
- }
- if (unpacked) {
VLOG(1) << "unpacked to " << unpack_path.value();
FilePath src_path(unpack_path.Append(installer::kInstallSourceChromeDir));
scoped_ptr<Version>
@@ -698,28 +624,22 @@ installer::InstallStatus InstallProductsHelper(
}
if (higher_products != 0) {
- COMPILE_ASSERT(BrowserDistribution::NUM_TYPES == 4,
+ COMPILE_ASSERT(BrowserDistribution::NUM_TYPES == 3,
add_support_for_new_products_here_);
const uint32 kBrowserBit = 1 << BrowserDistribution::CHROME_BROWSER;
const uint32 kGCFBit = 1 << BrowserDistribution::CHROME_FRAME;
- const uint32 kAppHostBit = 1 << BrowserDistribution::CHROME_APP_HOST;
int message_id = 0;
proceed_with_installation = false;
install_status = installer::HIGHER_VERSION_EXISTS;
- switch (higher_products) {
- case kBrowserBit:
- message_id = IDS_INSTALL_HIGHER_VERSION_BASE;
- break;
- case kGCFBit:
- message_id = IDS_INSTALL_HIGHER_VERSION_CF_BASE;
- break;
- case kGCFBit | kBrowserBit:
+ if ((higher_products & kBrowserBit) != 0) {
+ if ((higher_products & kGCFBit) != 0)
message_id = IDS_INSTALL_HIGHER_VERSION_CB_CF_BASE;
- break;
- default:
- message_id = IDS_INSTALL_HIGHER_VERSION_APP_HOST_BASE;
- break;
+ else
+ message_id = IDS_INSTALL_HIGHER_VERSION_BASE;
+ } else {
+ DCHECK(higher_products == kGCFBit);
+ message_id = IDS_INSTALL_HIGHER_VERSION_CF_BASE;
}
installer_state.WriteInstallerResult(install_status, message_id, NULL);
@@ -731,6 +651,10 @@ installer::InstallStatus InstallProductsHelper(
*installer_version, &install_status);
if (proceed_with_installation) {
+ // We want to keep uncompressed archive (chrome.7z) that we get after
+ // uncompressing and binary patching. Get the location for this file.
+ FilePath archive_to_copy(
+ temp_path.path().Append(installer::kChromeArchive));
FilePath prefs_source_path(cmd_line.GetSwitchValueNative(
installer::switches::kInstallerData));
install_status = installer::InstallOrUpdateProduct(original_state,
@@ -955,20 +879,11 @@ installer::InstallStatus UninstallProducts(
const InstallerState& installer_state,
const CommandLine& cmd_line) {
const Products& products = installer_state.products();
-
- if (installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER)) {
- // InstallerState::Initialize always puts Chrome first, and we rely on that
- // here for this reason: if Chrome is in-use, the user will be prompted to
- // confirm uninstallation. Upon cancel, we should not continue with the
- // other products.
- DCHECK(products[0]->is_chrome());
- }
- if (installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES)) {
- // Chrome Binaries should be last; if something else is cancelled, they
- // should stay.
- DCHECK(products[products.size() - 1]->is_chrome_binaries());
- }
-
+ // InstallerState::Initialize always puts Chrome first, and we rely on that
+ // here for this reason: if Chrome is in-use, the user will be prompted to
+ // confirm uninstallation. Upon cancel, we should not continue with the
+ // other products.
+ DCHECK(products.size() < 2 || products[0]->is_chrome());
installer::InstallStatus install_status = installer::UNINSTALL_SUCCESSFUL;
installer::InstallStatus prod_status = installer::UNKNOWN_STATUS;
const bool force = cmd_line.HasSwitch(installer::switches::kForceUninstall);
diff --git a/chrome/installer/setup/uninstall.cc b/chrome/installer/setup/uninstall.cc
index bd4f944..f767409 100644
--- a/chrome/installer/setup/uninstall.cc
+++ b/chrome/installer/setup/uninstall.cc
@@ -52,23 +52,6 @@ using installer::MasterPreferences;
namespace {
-// Avoid leaving behind a Temp dir. If one exists, ask SelfCleaningTempDir to
-// clean it up for us. This may involve scheduling it for deletion after
-// reboot. Don't report that a reboot is required in this case, however.
-// TODO(erikwright): Shouldn't this still lead to
-// ScheduleParentAndGrandparentForDeletion?
-void DeleteInstallTempDir(const FilePath& target_path) {
- FilePath temp_path(target_path.DirName().Append(installer::kInstallTempDir));
- if (file_util::DirectoryExists(temp_path)) {
- installer::SelfCleaningTempDir temp_dir;
- if (!temp_dir.Initialize(target_path.DirName(),
- installer::kInstallTempDir) ||
- !temp_dir.Delete()) {
- LOG(ERROR) << "Failed to delete temp dir " << temp_path.value();
- }
- }
-}
-
// Makes appropriate changes to the Google Update "ap" value in the registry.
// Specifically, removes the flags associated with this product ("-chrome" or
// "-chromeframe[-readymode]") from the "ap" values for all other
@@ -92,15 +75,17 @@ void ProcessGoogleUpdateItems(
// Apply the new channel value to all other products and to the multi package.
if (modified) {
+ BrowserDistribution::Type other_dist_types[] = {
+ (distribution->GetType() == BrowserDistribution::CHROME_BROWSER) ?
+ BrowserDistribution::CHROME_FRAME :
+ BrowserDistribution::CHROME_BROWSER,
+ BrowserDistribution::CHROME_BINARIES
+ };
scoped_ptr<WorkItemList>
update_list(WorkItem::CreateNoRollbackWorkItemList());
- for (size_t i = 0; i < BrowserDistribution::NUM_TYPES; ++i) {
- BrowserDistribution::Type other_dist_type =
- static_cast<BrowserDistribution::Type>(i);
- if (distribution->GetType() == other_dist_type)
- continue;
-
+ for (int i = 0; i < arraysize(other_dist_types); ++i) {
+ BrowserDistribution::Type other_dist_type = other_dist_types[i];
product_state =
original_state.GetProductState(system_level, other_dist_type);
// Only modify other products if they're installed and multi.
@@ -135,11 +120,8 @@ void ProcessQuickEnableWorkItems(
scoped_ptr<WorkItemList> work_item_list(
WorkItem::CreateNoRollbackWorkItemList());
- AddQuickEnableChromeFrameWorkItems(installer_state, machine_state, NULL, NULL,
- work_item_list.get());
-
- AddQuickEnableApplicationHostWorkItems(installer_state, machine_state, NULL,
- NULL, work_item_list.get());
+ AddQuickEnableWorkItems(installer_state, machine_state, NULL, NULL,
+ work_item_list.get());
if (!work_item_list->Do())
LOG(ERROR) << "Failed to update quick-enable-cf command.";
}
@@ -417,80 +399,44 @@ bool MoveSetupOutOfInstallFolder(const InstallerState& installer_state,
return ret;
}
-DeleteResult DeleteAppHostFilesAndFolders(const InstallerState& installer_state,
- const Version& installed_version) {
+DeleteResult DeleteFilesAndFolders(const InstallerState& installer_state,
+ const Version& installed_version) {
const FilePath& target_path = installer_state.target_path();
if (target_path.empty()) {
- LOG(ERROR) << "DeleteAppHostFilesAndFolders: no installation destination "
- << "path.";
+ LOG(ERROR) << "DeleteFilesAndFolders: no installation destination path.";
return DELETE_FAILED; // Nothing else we can do to uninstall, so we return.
}
- DeleteInstallTempDir(target_path);
-
DeleteResult result = DELETE_SUCCEEDED;
- FilePath app_host_exe(target_path.Append(installer::kChromeAppHostExe));
- if (!file_util::Delete(app_host_exe, false)) {
- result = DELETE_FAILED;
- LOG(ERROR) << "Failed to delete path: " << app_host_exe.value();
- } else {
- DeleteEmptyParentDir(target_path);
- }
-
- return result;
-}
-
-DeleteResult DeleteChromeFilesAndFolders(const InstallerState& installer_state,
- const Version& installed_version) {
- const FilePath& target_path = installer_state.target_path();
- if (target_path.empty()) {
- LOG(ERROR) << "DeleteChromeFilesAndFolders: no installation destination "
- << "path.";
- return DELETE_FAILED; // Nothing else we can do to uninstall, so we return.
+ // Avoid leaving behind a Temp dir. If one exists, ask SelfCleaningTempDir to
+ // clean it up for us. This may involve scheduling it for deletion after
+ // reboot. Don't report that a reboot is required in this case, however.
+ FilePath temp_path(target_path.DirName().Append(kInstallTempDir));
+ if (file_util::DirectoryExists(temp_path)) {
+ installer::SelfCleaningTempDir temp_dir;
+ if (!temp_dir.Initialize(target_path.DirName(), kInstallTempDir) ||
+ !temp_dir.Delete()) {
+ LOG(ERROR) << "Failed to delete temp dir " << temp_path.value();
+ }
}
- DeleteInstallTempDir(target_path);
-
- DeleteResult result = DELETE_SUCCEEDED;
-
- using file_util::FileEnumerator;
- FileEnumerator file_enumerator(
- target_path,
- false,
- static_cast<FileEnumerator::FileType>(FileEnumerator::FILES |
- FileEnumerator::DIRECTORIES));
- while (true) {
- FilePath to_delete(file_enumerator.Next());
- if (to_delete.empty())
- break;
- if (to_delete.BaseName().value() == installer::kChromeAppHostExe)
- continue;
-
- VLOG(1) << "Deleting install path " << target_path.value();
- if (!file_util::Delete(to_delete, true)) {
- LOG(ERROR) << "Failed to delete path (1st try): " << to_delete.value();
- if (installer_state.FindProduct(BrowserDistribution::CHROME_FRAME)) {
- // We don't try killing Chrome processes for Chrome Frame builds since
- // that is unlikely to help. Instead, schedule files for deletion and
- // return a value that will trigger a reboot prompt.
- FileEnumerator::FindInfo find_info;
- file_enumerator.GetFindInfo(&find_info);
- if (FileEnumerator::IsDirectory(find_info))
- ScheduleDirectoryForDeletion(to_delete.value().c_str());
- else
- ScheduleFileSystemEntityForDeletion(to_delete.value().c_str());
- result = DELETE_REQUIRES_REBOOT;
- } else {
- // Try closing any running Chrome processes and deleting files once
- // again.
- CloseAllChromeProcesses();
- if (!file_util::Delete(to_delete, true)) {
- LOG(ERROR) << "Failed to delete path (2nd try): "
- << to_delete.value();
- result = DELETE_FAILED;
- break;
- }
+ VLOG(1) << "Deleting install path " << target_path.value();
+ if (!file_util::Delete(target_path, true)) {
+ LOG(ERROR) << "Failed to delete folder (1st try): " << target_path.value();
+ if (installer_state.FindProduct(BrowserDistribution::CHROME_FRAME)) {
+ // We don't try killing Chrome processes for Chrome Frame builds since
+ // that is unlikely to help. Instead, schedule files for deletion and
+ // return a value that will trigger a reboot prompt.
+ ScheduleDirectoryForDeletion(target_path.value().c_str());
+ result = DELETE_REQUIRES_REBOOT;
+ } else {
+ // Try closing any running chrome processes and deleting files once again.
+ CloseAllChromeProcesses();
+ if (!file_util::Delete(target_path, true)) {
+ LOG(ERROR) << "Failed to delete folder (2nd try): "
+ << target_path.value();
+ result = DELETE_FAILED;
}
}
}
@@ -554,7 +500,7 @@ bool ShouldDeleteProfile(const InstallerState& installer_state,
// UI to prompt otherwise and the profile stores no useful data anyway)
// unless they are managed by MSI. MSI uninstalls will explicitly include
// the --delete-profile flag to distinguish them from MSI upgrades.
- if (product.is_chrome_frame() && !installer_state.is_msi()) {
+ if (!product.is_chrome() && !installer_state.is_msi()) {
should_delete = true;
} else {
should_delete =
@@ -943,11 +889,11 @@ InstallStatus UninstallProduct(const InstallationState& original_state,
auto_launch_util::DisableAllAutoStartFeatures(
ASCIIToUTF16(chrome::kInitialProfile));
-
- // First delete shortcuts from Start->Programs, Desktop & Quick Launch.
- DeleteChromeShortcuts(installer_state, product);
}
+ // First delete shortcuts from Start->Programs, Desktop & Quick Launch.
+ DeleteChromeShortcuts(installer_state, product);
+
// Delete the registry keys (Uninstall key and Version key).
HKEY reg_root = installer_state.root_key();
@@ -955,13 +901,8 @@ InstallStatus UninstallProduct(const InstallationState& original_state,
// product.GetVersionKey().
string16 distribution_data(browser_dist->GetDistributionData(reg_root));
- // Remove Control Panel uninstall link.
- if (product.ShouldCreateUninstallEntry()) {
- InstallUtil::DeleteRegistryKey(reg_root,
- browser_dist->GetUninstallRegPath());
- }
-
- // Remove Omaha product key.
+ // Remove Control Panel uninstall link and Omaha product key.
+ InstallUtil::DeleteRegistryKey(reg_root, browser_dist->GetUninstallRegPath());
InstallUtil::DeleteRegistryKey(reg_root, browser_dist->GetVersionKey());
// Also try to delete the MSI value in the ClientState key (it might not be
@@ -970,67 +911,63 @@ InstallStatus UninstallProduct(const InstallationState& original_state,
// being picked up on reinstall.
product.SetMsiMarker(installer_state.system_install(), false);
+ // Remove all Chrome registration keys.
+ // Registration data is put in HKCU for both system level and user level
+ // installs.
InstallStatus ret = installer::UNKNOWN_STATUS;
-
- if (is_chrome) {
- // Remove all Chrome registration keys.
- // Registration data is put in HKCU for both system level and user level
- // installs.
- DeleteChromeRegistrationKeys(browser_dist, HKEY_CURRENT_USER, suffix,
+ DeleteChromeRegistrationKeys(browser_dist, HKEY_CURRENT_USER, suffix,
+ installer_state.target_path(), &ret);
+
+ // If the user's Chrome is registered with a suffix: it is possible that old
+ // unsuffixed registrations were left in HKCU (e.g. if this install was
+ // previously installed with no suffix in HKCU (old suffix rules if the user
+ // is not an admin (or declined UAC at first run)) and later had to be
+ // suffixed when fully registered in HKLM (e.g. when later making Chrome
+ // default through the UI)).
+ // Remove remaining HKCU entries with no suffix if any.
+ if (!suffix.empty()) {
+ DeleteChromeRegistrationKeys(browser_dist, HKEY_CURRENT_USER, string16(),
installer_state.target_path(), &ret);
- // If the user's Chrome is registered with a suffix: it is possible that old
- // unsuffixed registrations were left in HKCU (e.g. if this install was
- // previously installed with no suffix in HKCU (old suffix rules if the user
- // is not an admin (or declined UAC at first run)) and later had to be
- // suffixed when fully registered in HKLM (e.g. when later making Chrome
- // default through the UI)).
- // Remove remaining HKCU entries with no suffix if any.
- if (!suffix.empty()) {
- DeleteChromeRegistrationKeys(browser_dist, HKEY_CURRENT_USER, string16(),
- installer_state.target_path(), &ret);
-
- // For similar reasons it is possible in very few installs (from
- // 21.0.1180.0 and fixed shortly after) to be installed with the new-style
- // suffix, but have some old-style suffix registrations left behind.
- string16 old_style_suffix;
- if (ShellUtil::GetOldUserSpecificRegistrySuffix(&old_style_suffix) &&
- suffix != old_style_suffix) {
- DeleteChromeRegistrationKeys(browser_dist, HKEY_CURRENT_USER,
- old_style_suffix,
- installer_state.target_path(), &ret);
- }
- }
-
- // Chrome is registered in HKLM for all system-level installs and for
- // user-level installs for which Chrome has been made the default browser.
- // Always remove the HKLM registration for system-level installs. For
- // user-level installs, only remove it if both: 1) this uninstall isn't a
- // self destruct following the installation of a system-level Chrome
- // (because the system-level Chrome owns the HKLM registration now), and 2)
- // this user has made Chrome their default browser (i.e. has shell
- // integration entries registered with |suffix| (note: |suffix| will be the
- // empty string if required as it is obtained by
- // GetCurrentInstallationSuffix() above)).
- // TODO(gab): This can still leave parts of a suffixed install behind. To be
- // able to remove them we would need to be able to remove only suffixed
- // entries (as it is now some of the shell integration entries are
- // unsuffixed; thus removing suffixed installs is prohibited in HKLM if
- // !|remove_all| for now).
- if (installer_state.system_install() ||
- (remove_all &&
- ShellUtil::QuickIsChromeRegisteredInHKLM(
- browser_dist, chrome_exe, suffix))) {
- DeleteChromeRegistrationKeys(browser_dist, HKEY_LOCAL_MACHINE, suffix,
+ // For similar reasons it is possible in very few installs (from 21.0.1180.0
+ // and fixed shortly after) to be installed with the new-style suffix, but
+ // have some old-style suffix registrations left behind.
+ string16 old_style_suffix;
+ if (ShellUtil::GetOldUserSpecificRegistrySuffix(&old_style_suffix) &&
+ suffix != old_style_suffix) {
+ DeleteChromeRegistrationKeys(browser_dist, HKEY_CURRENT_USER,
+ old_style_suffix,
installer_state.target_path(), &ret);
}
+ }
- ProcessDelegateExecuteWorkItems(installer_state, product);
+ // Chrome is registered in HKLM for all system-level installs and for
+ // user-level installs for which Chrome has been made the default browser.
+ // Always remove the HKLM registration for system-level installs. For
+ // user-level installs, only remove it if both: 1) this uninstall isn't a self
+ // destruct following the installation of a system-level Chrome (because the
+ // system-level Chrome owns the HKLM registration now), and 2) this user has
+ // made Chrome their default browser (i.e. has shell integration entries
+ // registered with |suffix| (note: |suffix| will be the empty string if
+ // required as it is obtained by GetCurrentInstallationSuffix() above)).
+ // TODO(gab): This can still leave parts of a suffixed install behind. To be
+ // able to remove them we would need to be able to remove only suffixed
+ // entries (as it is now some of the shell integration entries are unsuffixed;
+ // thus removing suffixed installs is prohibited in HKLM if !|remove_all| for
+ // now).
+ if (installer_state.system_install() ||
+ (remove_all &&
+ ShellUtil::QuickIsChromeRegisteredInHKLM(
+ browser_dist, chrome_exe, suffix))) {
+ DeleteChromeRegistrationKeys(browser_dist, HKEY_LOCAL_MACHINE, suffix,
+ installer_state.target_path(), &ret);
UninstallActiveSetupEntries(installer_state, product);
}
- if (product.is_chrome_frame()) {
+ ProcessDelegateExecuteWorkItems(installer_state, product);
+
+ if (!is_chrome) {
ProcessChromeFrameWorkItems(original_state, installer_state, setup_path,
product);
}
@@ -1078,7 +1015,7 @@ InstallStatus UninstallProduct(const InstallationState& original_state,
unreg_work_item_list->Do();
}
- if (product.is_chrome_frame())
+ if (!is_chrome)
ProcessIELowRightsPolicyWorkItems(installer_state);
}
@@ -1098,25 +1035,41 @@ InstallStatus UninstallProduct(const InstallationState& original_state,
ret = installer::UNINSTALL_SUCCESSFUL;
// When deleting files, we must make sure that we're either a "single"
- // (aka non-multi) installation or we are the Chrome Binaries.
+ // (aka non-multi) installation or, in the case of multi, that no other
+ // "multi" products share the binaries we are about to delete.
+
+ bool can_delete_files = true;
+ if (installer_state.is_multi_install()) {
+ ProductState prod_state;
+ for (size_t i = 0; i < BrowserDistribution::kNumProductTypes; ++i) {
+ if (prod_state.Initialize(installer_state.system_install(),
+ BrowserDistribution::kProductTypes[i]) &&
+ prod_state.is_multi_install()) {
+ can_delete_files = false;
+ break;
+ }
+ }
+ LOG(INFO) << (can_delete_files ? "Shared binaries will be deleted." :
+ "Shared binaries still in use.");
+ if (can_delete_files) {
+ BrowserDistribution* multi_dist =
+ installer_state.multi_package_binaries_distribution();
+ InstallUtil::DeleteRegistryKey(reg_root, multi_dist->GetVersionKey());
+ }
+ }
- FilePath backup_state_file(
- BackupLocalStateFile(GetLocalStateFolder(product)));
+ FilePath backup_state_file(BackupLocalStateFile(
+ GetLocalStateFolder(product)));
DeleteResult delete_result = DELETE_SUCCEEDED;
-
- if (product.is_chrome_app_host()) {
- DeleteAppHostFilesAndFolders(installer_state, product_state->version());
- } else if (!installer_state.is_multi_install() ||
- product.is_chrome_binaries()) {
-
+ if (can_delete_files) {
// In order to be able to remove the folder in which we're running, we
// need to move setup.exe out of the install folder.
// TODO(tommi): What if the temp folder is on a different volume?
MoveSetupOutOfInstallFolder(installer_state, setup_path,
product_state->version());
- delete_result = DeleteChromeFilesAndFolders(installer_state,
- product_state->version());
+ delete_result = DeleteFilesAndFolders(installer_state,
+ product_state->version());
}
if (delete_profile)
@@ -1129,7 +1082,7 @@ InstallStatus UninstallProduct(const InstallationState& original_state,
}
if (!force_uninstall) {
- VLOG(1) << "Uninstallation complete. Launching post-uninstall operations.";
+ VLOG(1) << "Uninstallation complete. Launching Uninstall survey.";
browser_dist->DoPostUninstallOperations(product_state->version(),
backup_state_file, distribution_data);
}
diff --git a/chrome/installer/util/browser_distribution.cc b/chrome/installer/util/browser_distribution.cc
index b39ff59..f958db8 100644
--- a/chrome/installer/util/browser_distribution.cc
+++ b/chrome/installer/util/browser_distribution.cc
@@ -17,11 +17,10 @@
#include "base/win/registry.h"
#include "base/win/windows_version.h"
#include "chrome/common/env_vars.h"
-#include "chrome/installer/util/chrome_app_host_distribution.h"
#include "chrome/installer/util/chrome_frame_distribution.h"
#include "chrome/installer/util/chromium_binaries_distribution.h"
-#include "chrome/installer/util/google_chrome_binaries_distribution.h"
#include "chrome/installer/util/google_chrome_distribution.h"
+#include "chrome/installer/util/google_chrome_binaries_distribution.h"
#include "chrome/installer/util/google_chrome_sxs_distribution.h"
#include "chrome/installer/util/install_util.h"
#include "chrome/installer/util/l10n_string_util.h"
@@ -45,7 +44,6 @@ const wchar_t kICommandExecuteImplUuid[] =
BrowserDistribution* g_browser_distribution = NULL;
BrowserDistribution* g_chrome_frame_distribution = NULL;
BrowserDistribution* g_binaries_distribution = NULL;
-BrowserDistribution* g_chrome_app_host_distribution = NULL;
// Returns true if currently running in npchrome_frame.dll
bool IsChromeFrameModule() {
@@ -56,8 +54,6 @@ bool IsChromeFrameModule() {
}
BrowserDistribution::Type GetCurrentDistributionType() {
- // TODO(erikwright): If the app host is installed, but not Chrome, perhaps
- // this should return CHROME_APP_HOST.
static BrowserDistribution::Type type =
(MasterPreferences::ForCurrentProcess().install_chrome_frame() ||
IsChromeFrameModule()) ?
@@ -68,6 +64,16 @@ BrowserDistribution::Type GetCurrentDistributionType() {
} // end namespace
+// CHROME_BINARIES represents the binaries shared by multi-install products and
+// is not a product in and of itself, so it is not present in this collection.
+const BrowserDistribution::Type BrowserDistribution::kProductTypes[] = {
+ BrowserDistribution::CHROME_BROWSER,
+ BrowserDistribution::CHROME_FRAME,
+};
+
+const size_t BrowserDistribution::kNumProductTypes =
+ arraysize(BrowserDistribution::kProductTypes);
+
BrowserDistribution::BrowserDistribution()
: type_(CHROME_BROWSER) {
}
@@ -120,11 +126,6 @@ BrowserDistribution* BrowserDistribution::GetSpecificDistribution(
&g_chrome_frame_distribution);
break;
- case CHROME_APP_HOST:
- dist = GetOrCreateBrowserDistribution<ChromeAppHostDistribution>(
- &g_chrome_app_host_distribution);
- break;
-
default:
DCHECK_EQ(CHROME_BINARIES, type);
#if defined(GOOGLE_CHROME_BUILD)
diff --git a/chrome/installer/util/browser_distribution.h b/chrome/installer/util/browser_distribution.h
index 4f609c9..6738037 100644
--- a/chrome/installer/util/browser_distribution.h
+++ b/chrome/installer/util/browser_distribution.h
@@ -29,7 +29,6 @@ class BrowserDistribution {
CHROME_BROWSER,
CHROME_FRAME,
CHROME_BINARIES,
- CHROME_APP_HOST,
NUM_TYPES
};
@@ -47,6 +46,12 @@ class BrowserDistribution {
// experiment but does not participate.
};
+ // An array of the Types representing products;
+ static const Type kProductTypes[];
+
+ // The number of elements in the array |kProductTypes|.
+ static const size_t kNumProductTypes;
+
virtual ~BrowserDistribution() {}
static BrowserDistribution* GetDistribution();
diff --git a/chrome/installer/util/browser_distribution_unittest.cc b/chrome/installer/util/browser_distribution_unittest.cc
new file mode 100644
index 0000000..d0e1059
--- /dev/null
+++ b/chrome/installer/util/browser_distribution_unittest.cc
@@ -0,0 +1,50 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Unit tests for BrowserDistribution class.
+
+#include "chrome/installer/util/browser_distribution.h"
+#include "chrome/installer/util/shell_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+// The distribution strings should not be empty. The unit tests are not linking
+// with the chrome resources so we cannot test official build.
+TEST(BrowserDistributionTest, StringsTest) {
+ for (size_t i = 0; i < BrowserDistribution::kNumProductTypes; ++i) {
+ BrowserDistribution* dist =
+ BrowserDistribution::GetSpecificDistribution(
+ BrowserDistribution::kProductTypes[i]);
+ ASSERT_TRUE(dist != NULL);
+ string16 name = dist->GetBaseAppName();
+ EXPECT_FALSE(name.empty());
+ string16 desc = dist->GetAppDescription();
+ EXPECT_FALSE(desc.empty());
+ string16 alt_name = dist->GetAlternateApplicationName();
+ EXPECT_FALSE(alt_name.empty());
+ }
+}
+
+// The shortcut strings obtained by the shell utility functions should not
+// be empty or be the same.
+TEST(BrowserDistributionTest, AlternateAndNormalShortcutName) {
+ string16 normal_name;
+ string16 alternate_name;
+ string16 appended_name_one;
+ string16 appended_name_two;
+ BrowserDistribution* dist = BrowserDistribution::GetDistribution();
+ EXPECT_TRUE(ShellUtil::GetChromeShortcutName(dist, false, L"",
+ &normal_name));
+ EXPECT_TRUE(ShellUtil::GetChromeShortcutName(dist, true, L"",
+ &alternate_name));
+ EXPECT_TRUE(ShellUtil::GetChromeShortcutName(dist, true, L"Sparky",
+ &appended_name_one));
+ EXPECT_TRUE(ShellUtil::GetChromeShortcutName(dist, true, L"Sparkles",
+ &appended_name_two));
+ EXPECT_NE(normal_name, alternate_name);
+ EXPECT_NE(appended_name_one, appended_name_two);
+ EXPECT_FALSE(normal_name.empty());
+ EXPECT_FALSE(alternate_name.empty());
+ EXPECT_FALSE(appended_name_one.empty());
+ EXPECT_FALSE(appended_name_two.empty());
+}
diff --git a/chrome/installer/util/channel_info.cc b/chrome/installer/util/channel_info.cc
index a67e7fb..24c5199 100644
--- a/chrome/installer/util/channel_info.cc
+++ b/chrome/installer/util/channel_info.cc
@@ -15,7 +15,6 @@ namespace {
const wchar_t kModChrome[] = L"-chrome";
const wchar_t kModChromeFrame[] = L"-chromeframe";
-const wchar_t kModAppHost[] = L"-apphost";
const wchar_t kModMultiInstall[] = L"-multi";
const wchar_t kModReadyMode[] = L"-readymode";
const wchar_t kModStage[] = L"-stage:";
@@ -32,7 +31,6 @@ const wchar_t* const kModifiers[] = {
kModMultiInstall,
kModChrome,
kModChromeFrame,
- kModAppHost,
kModReadyMode,
kSfxMultiFail,
kSfxFull
@@ -43,7 +41,6 @@ enum ModifierIndex {
MOD_MULTI_INSTALL,
MOD_CHROME,
MOD_CHROME_FRAME,
- MOD_APP_HOST,
MOD_READY_MODE,
SFX_MULTI_FAIL,
SFX_FULL,
@@ -196,14 +193,6 @@ bool ChannelInfo::SetChromeFrame(bool value) {
return SetModifier(MOD_CHROME_FRAME, value, &value_);
}
-bool ChannelInfo::IsAppHost() const {
- return HasModifier(MOD_APP_HOST, value_);
-}
-
-bool ChannelInfo::SetAppHost(bool value) {
- return SetModifier(MOD_APP_HOST, value, &value_);
-}
-
bool ChannelInfo::IsMultiInstall() const {
return HasModifier(MOD_MULTI_INSTALL, value_);
}
diff --git a/chrome/installer/util/channel_info.h b/chrome/installer/util/channel_info.h
index 605b87a..9ceae32 100644
--- a/chrome/installer/util/channel_info.h
+++ b/chrome/installer/util/channel_info.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -57,13 +57,6 @@ class ChannelInfo {
// modified.
bool SetChromeFrame(bool value);
- // Returns true if the -apphost modifier is present in the value.
- bool IsAppHost() const;
-
- // Adds or removes the -apphost modifier, returning true if the value is
- // modified.
- bool SetAppHost(bool value);
-
// Returns true if the -multi modifier is present in the value.
bool IsMultiInstall() const;
diff --git a/chrome/installer/util/chrome_app_host_distribution.cc b/chrome/installer/util/chrome_app_host_distribution.cc
deleted file mode 100644
index 4eef303..0000000
--- a/chrome/installer/util/chrome_app_host_distribution.cc
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// This file defines a specific implementation of BrowserDistribution class for
-// Chrome App Host. It overrides the bare minimum of methods necessary to get a
-// Chrome App Host installer that does not interact with Google Chrome or
-// Chromium installations.
-
-#include "chrome/installer/util/chrome_app_host_distribution.h"
-
-#include "base/string_util.h"
-#include "chrome/common/net/test_server_locations.h"
-#include "chrome/installer/util/channel_info.h"
-#include "chrome/installer/util/google_update_constants.h"
-#include "chrome/installer/util/google_update_settings.h"
-#include "chrome/installer/util/helper.h"
-#include "chrome/installer/util/install_util.h"
-#include "chrome/installer/util/l10n_string_util.h"
-
-#include "installer_util_strings.h" // NOLINT
-
-namespace {
-const wchar_t kChromeAppHostGuid[] = L"{FDA71E6F-AC4C-4a00-8B70-9958A68906BF}";
-}
-
-ChromeAppHostDistribution::ChromeAppHostDistribution()
- : BrowserDistribution(CHROME_APP_HOST) {
-}
-
-string16 ChromeAppHostDistribution::GetAppGuid() {
- return kChromeAppHostGuid;
-}
-
-string16 ChromeAppHostDistribution::GetBaseAppName() {
- return L"Google Chrome App Host";
-}
-
-string16 ChromeAppHostDistribution::GetAppShortCutName() {
- const string16& product_name =
- installer::GetLocalizedString(IDS_PRODUCT_APP_HOST_NAME_BASE);
- return product_name;
-}
-
-string16 ChromeAppHostDistribution::GetAlternateApplicationName() {
- const string16& product_name =
- installer::GetLocalizedString(IDS_PRODUCT_APP_HOST_NAME_BASE);
- return product_name;
-}
-
-string16 ChromeAppHostDistribution::GetInstallSubDir() {
- return BrowserDistribution::GetSpecificDistribution(
- BrowserDistribution::CHROME_BINARIES)->GetInstallSubDir();
-}
-
-string16 ChromeAppHostDistribution::GetPublisherName() {
- const string16& publisher_name =
- installer::GetLocalizedString(IDS_ABOUT_VERSION_COMPANY_NAME_BASE);
- return publisher_name;
-}
-
-string16 ChromeAppHostDistribution::GetAppDescription() {
- NOTREACHED() << "This should never be accessed due to no start-menu/task-bar "
- << "shortcuts.";
- return L"A standalone platform for Chrome apps.";
-}
-
-string16 ChromeAppHostDistribution::GetLongAppDescription() {
- NOTREACHED() << "This should never be accessed as Chrome App Host is not a "
- << "default browser option.";
- return L"A standalone platform for Chrome apps.";
-}
-
-std::string ChromeAppHostDistribution::GetSafeBrowsingName() {
- return "googlechromeapphost";
-}
-
-string16 ChromeAppHostDistribution::GetStateKey() {
- string16 key(google_update::kRegPathClientState);
- key.append(L"\\");
- key.append(kChromeAppHostGuid);
- return key;
-}
-
-string16 ChromeAppHostDistribution::GetStateMediumKey() {
- string16 key(google_update::kRegPathClientStateMedium);
- key.append(L"\\");
- key.append(kChromeAppHostGuid);
- return key;
-}
-
-string16 ChromeAppHostDistribution::GetStatsServerURL() {
- return L"https://clients4.google.com/firefox/metrics/collect";
-}
-
-std::string ChromeAppHostDistribution::GetNetworkStatsServer() const {
- return chrome_common_net::kEchoTestServerLocation;
-}
-
-std::string ChromeAppHostDistribution::GetHttpPipeliningTestServer() const {
- return chrome_common_net::kPipelineTestServerBaseUrl;
-}
-
-string16 ChromeAppHostDistribution::GetUninstallLinkName() {
- NOTREACHED() << "This should never be accessed as Chrome App Host has no "
- << "uninstall entry.";
- return L"Uninstall Chrome App Host";
-}
-
-string16 ChromeAppHostDistribution::GetUninstallRegPath() {
- NOTREACHED() << "This should never be accessed as Chrome App Host has no "
- << "uninstall entry.";
- return L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"
- L"Google Chrome App Host";
-}
-
-string16 ChromeAppHostDistribution::GetVersionKey() {
- string16 key(google_update::kRegPathClients);
- key.append(L"\\");
- key.append(kChromeAppHostGuid);
- return key;
-}
-
-bool ChromeAppHostDistribution::CanSetAsDefault() {
- return false;
-}
-
-bool ChromeAppHostDistribution::CanCreateDesktopShortcuts() {
- return false;
-}
-
-bool ChromeAppHostDistribution::GetDelegateExecuteHandlerData(
- string16* handler_class_uuid,
- string16* type_lib_uuid,
- string16* type_lib_version,
- string16* interface_uuid) {
- return false;
-}
-
-void ChromeAppHostDistribution::UpdateInstallStatus(bool system_install,
- installer::ArchiveType archive_type,
- installer::InstallStatus install_status) {
-#if defined(GOOGLE_CHROME_BUILD)
- GoogleUpdateSettings::UpdateInstallStatus(system_install,
- archive_type, InstallUtil::GetInstallReturnCode(install_status),
- kChromeAppHostGuid);
-#endif
-}
diff --git a/chrome/installer/util/chrome_app_host_distribution.h b/chrome/installer/util/chrome_app_host_distribution.h
deleted file mode 100644
index 1d5ea40..0000000
--- a/chrome/installer/util/chrome_app_host_distribution.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// This file extends the browser distribution with a specific implementation
-// for Chrome AppHost.
-
-#ifndef CHROME_INSTALLER_UTIL_CHROME_APP_HOST_DISTRIBUTION_H_
-#define CHROME_INSTALLER_UTIL_CHROME_APP_HOST_DISTRIBUTION_H_
-
-#include "chrome/installer/util/browser_distribution.h"
-#include "chrome/installer/util/util_constants.h"
-
-class ChromeAppHostDistribution : public BrowserDistribution {
- public:
- virtual string16 GetAppGuid() OVERRIDE;
-
- virtual string16 GetBaseAppName() OVERRIDE;
-
- virtual string16 GetAppShortCutName() OVERRIDE;
-
- virtual string16 GetAlternateApplicationName() OVERRIDE;
-
- virtual string16 GetInstallSubDir() OVERRIDE;
-
- virtual string16 GetPublisherName() OVERRIDE;
-
- virtual string16 GetAppDescription() OVERRIDE;
-
- virtual string16 GetLongAppDescription() OVERRIDE;
-
- virtual std::string GetSafeBrowsingName() OVERRIDE;
-
- virtual string16 GetStateKey() OVERRIDE;
-
- virtual string16 GetStateMediumKey() OVERRIDE;
-
- virtual string16 GetStatsServerURL() OVERRIDE;
-
- virtual std::string GetNetworkStatsServer() const OVERRIDE;
-
- virtual std::string GetHttpPipeliningTestServer() const OVERRIDE;
-
- virtual string16 GetUninstallLinkName() OVERRIDE;
-
- virtual string16 GetUninstallRegPath() OVERRIDE;
-
- virtual string16 GetVersionKey() OVERRIDE;
-
- virtual bool CanSetAsDefault() OVERRIDE;
-
- virtual bool CanCreateDesktopShortcuts() OVERRIDE;
-
- virtual bool GetDelegateExecuteHandlerData(string16* handler_class_uuid,
- string16* type_lib_uuid,
- string16* type_lib_version,
- string16* interface_uuid) OVERRIDE;
-
- virtual void UpdateInstallStatus(bool system_install,
- installer::ArchiveType archive_type,
- installer::InstallStatus install_status) OVERRIDE;
-
- protected:
- friend class BrowserDistribution;
-
- // Disallow construction from non-friends.
- ChromeAppHostDistribution();
-};
-
-#endif // CHROME_INSTALLER_UTIL_CHROME_APP_HOST_DISTRIBUTION_H_
diff --git a/chrome/installer/util/chrome_app_host_operations.cc b/chrome/installer/util/chrome_app_host_operations.cc
deleted file mode 100644
index 07427f5..0000000
--- a/chrome/installer/util/chrome_app_host_operations.cc
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/installer/util/chrome_app_host_operations.h"
-
-#include "base/command_line.h"
-#include "base/file_path.h"
-#include "base/logging.h"
-#include "chrome/installer/util/browser_distribution.h"
-#include "chrome/installer/util/channel_info.h"
-#include "chrome/installer/util/helper.h"
-#include "chrome/installer/util/master_preferences.h"
-#include "chrome/installer/util/master_preferences_constants.h"
-#include "chrome/installer/util/util_constants.h"
-
-namespace installer {
-
-void ChromeAppHostOperations::ReadOptions(
- const MasterPreferences& prefs,
- std::set<std::wstring>* options) const {
- DCHECK(options);
-
- bool pref_value;
- if (prefs.GetBool(master_preferences::kMultiInstall, &pref_value) &&
- pref_value) {
- options->insert(kOptionMultiInstall);
- }
-}
-
-void ChromeAppHostOperations::ReadOptions(
- const CommandLine& uninstall_command,
- std::set<std::wstring>* options) const {
- DCHECK(options);
-
- if (uninstall_command.HasSwitch(switches::kMultiInstall))
- options->insert(kOptionMultiInstall);
-}
-
-void ChromeAppHostOperations::AddKeyFiles(
- const std::set<std::wstring>& options,
- std::vector<FilePath>* key_files) const {
-}
-
-void ChromeAppHostOperations::AddComDllList(
- const std::set<std::wstring>& options,
- std::vector<FilePath>* com_dll_list) const {
-}
-
-void ChromeAppHostOperations::AppendProductFlags(
- const std::set<std::wstring>& options,
- CommandLine* cmd_line) const {
- DCHECK(cmd_line);
- bool is_multi_install = options.find(kOptionMultiInstall) != options.end();
-
- // Non-multi-install not supported for the app host.
- DCHECK(is_multi_install);
-
- // Add --multi-install if it isn't already there.
- if (is_multi_install && !cmd_line->HasSwitch(switches::kMultiInstall))
- cmd_line->AppendSwitch(switches::kMultiInstall);
-
- // --app-host is always needed.
- cmd_line->AppendSwitch(switches::kChromeAppHost);
-}
-
-void ChromeAppHostOperations::AppendRenameFlags(
- const std::set<std::wstring>& options,
- CommandLine* cmd_line) const {
- DCHECK(cmd_line);
- bool is_multi_install = options.find(kOptionMultiInstall) != options.end();
-
- // Non-multi-install not supported for the app host.
- DCHECK(is_multi_install);
-
- // Add --multi-install if it isn't already there.
- if (is_multi_install && !cmd_line->HasSwitch(switches::kMultiInstall))
- cmd_line->AppendSwitch(switches::kMultiInstall);
-}
-
-bool ChromeAppHostOperations::SetChannelFlags(
- const std::set<std::wstring>& options,
- bool set,
- ChannelInfo* channel_info) const {
-#if defined(GOOGLE_CHROME_BUILD)
- DCHECK(channel_info);
- bool modified = channel_info->SetAppHost(set);
-
- return modified;
-#else
- return false;
-#endif
-}
-
-bool ChromeAppHostOperations::ShouldCreateUninstallEntry(
- const std::set<std::wstring>& options) const {
- return false;
-}
-
-} // namespace installer
diff --git a/chrome/installer/util/chrome_app_host_operations.h b/chrome/installer/util/chrome_app_host_operations.h
deleted file mode 100644
index bbf0589..0000000
--- a/chrome/installer/util/chrome_app_host_operations.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_INSTALLER_UTIL_CHROME_APP_HOST_OPERATIONS_H_
-#define CHROME_INSTALLER_UTIL_CHROME_APP_HOST_OPERATIONS_H_
-
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/file_path.h"
-#include "chrome/installer/util/product_operations.h"
-
-namespace installer {
-
-// Operations specific to Chrome App Host; see ProductOperations for general
-// info.
-class ChromeAppHostOperations : public ProductOperations {
- public:
- ChromeAppHostOperations() {}
-
- virtual void ReadOptions(const MasterPreferences& prefs,
- std::set<std::wstring>* options) const OVERRIDE;
-
- virtual void ReadOptions(const CommandLine& uninstall_command,
- std::set<std::wstring>* options) const OVERRIDE;
-
- virtual void AddKeyFiles(const std::set<std::wstring>& options,
- std::vector<FilePath>* key_files) const OVERRIDE;
-
- virtual void AddComDllList(
- const std::set<std::wstring>& options,
- std::vector<FilePath>* com_dll_list) const OVERRIDE;
-
- virtual void AppendProductFlags(
- const std::set<std::wstring>& options,
- CommandLine* cmd_line) const OVERRIDE;
-
- virtual void AppendRenameFlags(
- const std::set<std::wstring>& options,
- CommandLine* cmd_line) const OVERRIDE;
-
- virtual bool SetChannelFlags(const std::set<std::wstring>& options,
- bool set,
- ChannelInfo* channel_info) const OVERRIDE;
-
- virtual bool ShouldCreateUninstallEntry(
- const std::set<std::wstring>& options) const OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(ChromeAppHostOperations);
-};
-
-} // namespace installer
-
-#endif // CHROME_INSTALLER_UTIL_CHROME_APP_HOST_OPERATIONS_H_
diff --git a/chrome/installer/util/chrome_binaries_operations.cc b/chrome/installer/util/chrome_binaries_operations.cc
deleted file mode 100644
index 326223a..0000000
--- a/chrome/installer/util/chrome_binaries_operations.cc
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/installer/util/chrome_binaries_operations.h"
-
-#include "base/command_line.h"
-#include "base/file_path.h"
-#include "base/logging.h"
-#include "chrome/installer/util/channel_info.h"
-#include "chrome/installer/util/helper.h"
-#include "chrome/installer/util/master_preferences.h"
-#include "chrome/installer/util/master_preferences_constants.h"
-#include "chrome/installer/util/util_constants.h"
-
-namespace installer {
-
-void ChromeBinariesOperations::ReadOptions(
- const MasterPreferences& prefs,
- std::set<std::wstring>* options) const {
- DCHECK(options);
-
- bool pref_value;
-
- if (prefs.GetBool(master_preferences::kMultiInstall, &pref_value) &&
- pref_value) {
- options->insert(kOptionMultiInstall);
- }
-}
-
-void ChromeBinariesOperations::ReadOptions(
- const CommandLine& uninstall_command,
- std::set<std::wstring>* options) const {
- DCHECK(options);
-
- if (uninstall_command.HasSwitch(switches::kMultiInstall))
- options->insert(kOptionMultiInstall);
-}
-
-void ChromeBinariesOperations::AddKeyFiles(
- const std::set<std::wstring>& options,
- std::vector<FilePath>* key_files) const {
- DCHECK(key_files);
- key_files->push_back(FilePath(installer::kChromeDll));
-}
-
-void ChromeBinariesOperations::AddComDllList(
- const std::set<std::wstring>& options,
- std::vector<FilePath>* com_dll_list) const {
-}
-
-void ChromeBinariesOperations::AppendProductFlags(
- const std::set<std::wstring>& options,
- CommandLine* cmd_line) const {
- DCHECK(cmd_line);
-
- if (options.find(kOptionMultiInstall) != options.end()) {
- // Add --multi-install if it isn't already there.
- if (!cmd_line->HasSwitch(switches::kMultiInstall))
- cmd_line->AppendSwitch(switches::kMultiInstall);
- }
-}
-
-void ChromeBinariesOperations::AppendRenameFlags(
- const std::set<std::wstring>& options,
- CommandLine* cmd_line) const {
- DCHECK(cmd_line);
-
- // Add --multi-install if it isn't already there.
- if (options.find(kOptionMultiInstall) != options.end() &&
- !cmd_line->HasSwitch(switches::kMultiInstall)) {
- cmd_line->AppendSwitch(switches::kMultiInstall);
- }
-}
-
-bool ChromeBinariesOperations::SetChannelFlags(
- const std::set<std::wstring>& options,
- bool set,
- ChannelInfo* channel_info) const {
- return false;
-}
-
-bool ChromeBinariesOperations::ShouldCreateUninstallEntry(
- const std::set<std::wstring>& options) const {
- return false;
-}
-
-} // namespace installer
diff --git a/chrome/installer/util/chrome_binaries_operations.h b/chrome/installer/util/chrome_binaries_operations.h
deleted file mode 100644
index a40ac41..0000000
--- a/chrome/installer/util/chrome_binaries_operations.h
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_INSTALLER_UTIL_CHROME_BINARIES_OPERATIONS_H_
-#define CHROME_INSTALLER_UTIL_CHROME_BINARIES_OPERATIONS_H_
-
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "chrome/installer/util/product_operations.h"
-
-namespace installer {
-
-// Operations specific to the Chrome Binaries; see ProductOperations for general
-// info.
-class ChromeBinariesOperations : public ProductOperations {
- public:
- ChromeBinariesOperations() {}
-
- virtual void ReadOptions(const MasterPreferences& prefs,
- std::set<std::wstring>* options) const OVERRIDE;
-
- virtual void ReadOptions(const CommandLine& uninstall_command,
- std::set<std::wstring>* options) const OVERRIDE;
-
- virtual void AddKeyFiles(const std::set<std::wstring>& options,
- std::vector<FilePath>* key_files) const OVERRIDE;
-
- virtual void AddComDllList(
- const std::set<std::wstring>& options,
- std::vector<FilePath>* com_dll_list) const OVERRIDE;
-
- virtual void AppendProductFlags(
- const std::set<std::wstring>& options,
- CommandLine* cmd_line) const OVERRIDE;
-
- virtual void AppendRenameFlags(
- const std::set<std::wstring>& options,
- CommandLine* cmd_line) const OVERRIDE;
-
- virtual bool SetChannelFlags(const std::set<std::wstring>& options,
- bool set,
- ChannelInfo* channel_info) const OVERRIDE;
-
- virtual bool ShouldCreateUninstallEntry(
- const std::set<std::wstring>& options) const OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(ChromeBinariesOperations);
-};
-
-} // namespace installer
-
-#endif // CHROME_INSTALLER_UTIL_CHROME_BINARIES_OPERATIONS_H_
diff --git a/chrome/installer/util/chrome_frame_operations.cc b/chrome/installer/util/chrome_frame_operations.cc
index ae790ab..a1a46ee 100644
--- a/chrome/installer/util/chrome_frame_operations.cc
+++ b/chrome/installer/util/chrome_frame_operations.cc
@@ -86,6 +86,7 @@ void ChromeFrameOperations::AddComDllList(
const std::set<std::wstring>& options,
std::vector<FilePath>* com_dll_list) const {
DCHECK(com_dll_list);
+ std::vector<FilePath> dll_list;
com_dll_list->push_back(FilePath(installer::kChromeFrameDll));
}
diff --git a/chrome/installer/util/chromium_binaries_distribution.cc b/chrome/installer/util/chromium_binaries_distribution.cc
index e2d23e9..e12f56b 100644
--- a/chrome/installer/util/chromium_binaries_distribution.cc
+++ b/chrome/installer/util/chromium_binaries_distribution.cc
@@ -90,6 +90,7 @@ string16 ChromiumBinariesDistribution::GetVersionKey() {
}
bool ChromiumBinariesDistribution::CanSetAsDefault() {
+ NOTREACHED();
return false;
}
diff --git a/chrome/installer/util/installation_state.cc b/chrome/installer/util/installation_state.cc
index c8c8604..6f12eb7 100644
--- a/chrome/installer/util/installation_state.cc
+++ b/chrome/installer/util/installation_state.cc
@@ -226,12 +226,9 @@ int InstallationState::IndexFromDistType(BrowserDistribution::Type type) {
unexpected_chrome_frame_distribution_value_);
COMPILE_ASSERT(BrowserDistribution::CHROME_BINARIES == CHROME_BINARIES_INDEX,
unexpected_chrome_frame_distribution_value_);
- COMPILE_ASSERT(BrowserDistribution::CHROME_APP_HOST == CHROME_APP_HOST_INDEX,
- unexpected_chrome_frame_distribution_value_);
DCHECK(type == BrowserDistribution::CHROME_BROWSER ||
type == BrowserDistribution::CHROME_FRAME ||
- type == BrowserDistribution::CHROME_BINARIES ||
- type == BrowserDistribution::CHROME_APP_HOST);
+ type == BrowserDistribution::CHROME_BINARIES);
return type;
}
@@ -252,11 +249,6 @@ void InstallationState::Initialize() {
BrowserDistribution::CHROME_BINARIES);
user_products_[CHROME_BINARIES_INDEX].Initialize(false, distribution);
system_products_[CHROME_BINARIES_INDEX].Initialize(true, distribution);
-
- distribution = BrowserDistribution::GetSpecificDistribution(
- BrowserDistribution::CHROME_APP_HOST);
- user_products_[CHROME_APP_HOST_INDEX].Initialize(false, distribution);
- system_products_[CHROME_APP_HOST_INDEX].Initialize(true, distribution);
}
const ProductState* InstallationState::GetNonVersionedProductState(
diff --git a/chrome/installer/util/installation_state.h b/chrome/installer/util/installation_state.h
index ce72014..05cec80 100644
--- a/chrome/installer/util/installation_state.h
+++ b/chrome/installer/util/installation_state.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -153,7 +153,6 @@ class InstallationState {
CHROME_BROWSER_INDEX,
CHROME_FRAME_INDEX,
CHROME_BINARIES_INDEX,
- CHROME_APP_HOST_INDEX,
NUM_PRODUCTS
};
diff --git a/chrome/installer/util/installation_validator.cc b/chrome/installer/util/installation_validator.cc
index ccfa0a9..2d109fe 100644
--- a/chrome/installer/util/installation_validator.cc
+++ b/chrome/installer/util/installation_validator.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -11,7 +11,6 @@
#include "base/logging.h"
#include "base/version.h"
-#include "chrome/common/chrome_switches.h"
#include "chrome/installer/util/browser_distribution.h"
#include "chrome/installer/util/helper.h"
#include "chrome/installer/util/installation_state.h"
@@ -113,44 +112,6 @@ bool InstallationValidator::ChromeFrameRules::UsageStatsAllowed(
}
BrowserDistribution::Type
- InstallationValidator::ChromeAppHostRules::distribution_type() const {
- return BrowserDistribution::CHROME_APP_HOST;
-}
-
-void InstallationValidator::ChromeAppHostRules::AddUninstallSwitchExpectations(
- const InstallationState& machine_state,
- bool system_install,
- const ProductState& product_state,
- SwitchExpectations* expectations) const {
- DCHECK(!system_install);
-
- // --chrome-app-host must be present.
- expectations->push_back(std::make_pair(std::string(switches::kChromeAppHost),
- true));
- // --chrome must not be present.
- expectations->push_back(std::make_pair(std::string(switches::kChrome),
- false));
-
- // --chrome-frame must not be present.
- expectations->push_back(std::make_pair(std::string(switches::kChromeFrame),
- false));
-}
-
-void InstallationValidator::ChromeAppHostRules::AddRenameSwitchExpectations(
- const InstallationState& machine_state,
- bool system_install,
- const ProductState& product_state,
- SwitchExpectations* expectations) const {
- // TODO(erikwright): I guess there will be none?
-}
-
-bool InstallationValidator::ChromeAppHostRules::UsageStatsAllowed(
- const ProductState& product_state) const {
- // App Host doesn't manage usage stats. The Chrome Binaries will.
- return false;
-}
-
-BrowserDistribution::Type
InstallationValidator::ChromeBinariesRules::distribution_type() const {
return BrowserDistribution::CHROME_BINARIES;
}
@@ -188,59 +149,9 @@ const InstallationValidator::InstallationType
CHROME_FRAME_SINGLE_CHROME_MULTI,
CHROME_FRAME_MULTI,
CHROME_FRAME_MULTI_CHROME_MULTI,
- CHROME_FRAME_READY_MODE_CHROME_MULTI,
- CHROME_APP_HOST,
- CHROME_APP_HOST_CHROME_FRAME_SINGLE,
- CHROME_APP_HOST_CHROME_FRAME_SINGLE_CHROME_MULTI,
- CHROME_APP_HOST_CHROME_FRAME_MULTI,
- CHROME_APP_HOST_CHROME_FRAME_MULTI_CHROME_MULTI,
- CHROME_APP_HOST_CHROME_MULTI,
- CHROME_APP_HOST_CHROME_MULTI_CHROME_FRAME_READY_MODE,
+ CHROME_FRAME_READY_MODE_CHROME_MULTI
};
-// Validates the "install-application" Google Update product command.
-void InstallationValidator::ValidateInstallAppCommand(
- const ProductContext& ctx,
- const AppCommand& command,
- bool* is_valid) {
- DCHECK(is_valid);
-
- CommandLine the_command(CommandLine::FromString(command.command_line()));
-
- FilePath expected_path(
- installer::GetChromeInstallPath(ctx.system_install, ctx.dist)
- .Append(installer::kChromeAppHostExe));
-
- if (!FilePath::CompareEqualIgnoreCase(expected_path.value(),
- the_command.GetProgram().value())) {
- *is_valid = false;
- LOG(ERROR) << "install-application command's path is not "
- << expected_path.value() << ": "
- << the_command.GetProgram().value();
- }
-
-
- SwitchExpectations expected;
-
- expected.push_back(
- std::make_pair(std::string(::switches::kAppsInstallFromManifestURL),
- true));
-
- ValidateCommandExpectations(ctx, the_command, expected, "install application",
- is_valid);
-
- if (!command.sends_pings()) {
- *is_valid = false;
- LOG(ERROR) << "install-application command is not configured to send "
- << "pings.";
- }
-
- if (!command.is_web_accessible()) {
- *is_valid = false;
- LOG(ERROR) << "install-application command is not web accessible.";
- }
-}
-
// Validates the "quick-enable-cf" Google Update product command.
void InstallationValidator::ValidateQuickEnableCfCommand(
const ProductContext& ctx,
@@ -275,48 +186,6 @@ void InstallationValidator::ValidateQuickEnableCfCommand(
}
}
-// Validates the "quick-enable-application-host" Google Update product command.
-void InstallationValidator::ValidateQuickEnableApplicationHostCommand(
- const ProductContext& ctx,
- const AppCommand& command,
- bool* is_valid) {
- DCHECK(is_valid);
-
- CommandLine the_command(CommandLine::FromString(command.command_line()));
-
- ValidateSetupPath(ctx,
- the_command.GetProgram(),
- "quick enable application host",
- is_valid);
-
- SwitchExpectations expected;
-
- expected.push_back(
- std::make_pair(std::string(switches::kChromeAppHost), true));
- expected.push_back(std::make_pair(std::string(switches::kSystemLevel),
- false));
- expected.push_back(std::make_pair(std::string(switches::kMultiInstall),
- true));
-
- ValidateCommandExpectations(ctx,
- the_command,
- expected,
- "quick enable application host",
- is_valid);
-
- if (!command.sends_pings()) {
- *is_valid = false;
- LOG(ERROR) << "Quick-enable-application-host command is not configured to "
- << "send pings.";
- }
-
- if (!command.is_web_accessible()) {
- *is_valid = false;
- LOG(ERROR) << "Quick-enable-application-host command is not web "
- << "accessible.";
- }
-}
-
// Validates a product's set of Google Update product commands against a
// collection of expectations.
void InstallationValidator::ValidateAppCommandExpectations(
@@ -363,23 +232,18 @@ void InstallationValidator::ValidateBinariesCommands(
bool* is_valid) {
DCHECK(is_valid);
- // The quick-enable-cf command must be present if Chrome Binaries are
- // installed and Chrome Frame is not installed (or installed in ready mode).
+ // The quick-enable-cf command must be present if Chrome is installed either
+ // alone or with CF in ready-mode.
const ChannelInfo& channel = ctx.state.channel();
- const ProductState* binaries_state = ctx.machine_state.GetProductState(
- ctx.system_install, BrowserDistribution::CHROME_BINARIES);
+ const ProductState* chrome_state = ctx.machine_state.GetProductState(
+ ctx.system_install, BrowserDistribution::CHROME_BROWSER);
const ProductState* cf_state = ctx.machine_state.GetProductState(
ctx.system_install, BrowserDistribution::CHROME_FRAME);
CommandExpectations expectations;
- if (binaries_state != NULL) {
- if (cf_state == NULL || channel.IsReadyMode())
- expectations[kCmdQuickEnableCf] = &ValidateQuickEnableCfCommand;
-
- expectations[kCmdQuickEnableApplicationHost] =
- &ValidateQuickEnableApplicationHostCommand;
- }
+ if (chrome_state != NULL && (cf_state == NULL || channel.IsReadyMode()))
+ expectations[kCmdQuickEnableCf] = &ValidateQuickEnableCfCommand;
ValidateAppCommandExpectations(ctx, expectations, is_valid);
}
@@ -446,28 +310,8 @@ void InstallationValidator::ValidateBinaries(
<< "\"";
}
- // ap must have -apphost iff Chrome Frame is installed multi
- const ProductState* app_host_state = machine_state.GetProductState(
- system_install, BrowserDistribution::CHROME_APP_HOST);
- if (app_host_state != NULL) {
- if (!app_host_state->is_multi_install()) {
- *is_valid = false;
- LOG(ERROR) << "Chrome App Host is installed in non-multi mode.";
- }
- if (!channel.IsAppHost()) {
- *is_valid = false;
- LOG(ERROR) << "Chrome Binaries are missing \"-apphost\" in channel"
- " name: \"" << channel.value() << "\"";
- }
- } else if (channel.IsAppHost()) {
- *is_valid = false;
- LOG(ERROR) << "Chrome Binaries have \"-apphost\" in channel name, yet "
- "Chrome App Host is not installed: \"" << channel.value()
- << "\"";
- }
-
- // Chrome, Chrome Frame, or App Host must be present
- if (chrome_state == NULL && cf_state == NULL && app_host_state == NULL) {
+ // Chrome or Chrome Frame must be present
+ if (chrome_state == NULL && cf_state == NULL) {
*is_valid = false;
LOG(ERROR) << "Chrome Binaries are present with no other products.";
}
@@ -479,12 +323,12 @@ void InstallationValidator::ValidateBinaries(
<< "Chrome Binaries are present yet Chrome is not multi-install.";
}
- // Chrome Frame must be multi-install if Chrome & App Host are not present.
- if (cf_state != NULL && app_host_state == NULL && chrome_state == NULL &&
+ // Chrome Frame must be multi-install if Chrome is not present.
+ if (cf_state != NULL && chrome_state == NULL &&
!cf_state->is_multi_install()) {
*is_valid = false;
- LOG(ERROR) << "Chrome Binaries are present without Chrome nor App Host "
- << "yet Chrome Frame is not multi-install.";
+ LOG(ERROR) << "Chrome Binaries are present without Chrome yet Chrome Frame "
+ "is not multi-install.";
}
ChromeBinariesRules binaries_rules;
@@ -639,44 +483,24 @@ void InstallationValidator::ValidateMultiInstallProduct(
const ProductState* binaries =
ctx.machine_state.GetProductState(ctx.system_install,
BrowserDistribution::CHROME_BINARIES);
- if (!binaries) {
- if (ctx.dist->GetType() == BrowserDistribution::CHROME_APP_HOST) {
- if (!ctx.machine_state.GetProductState(
- true, // system-level
- BrowserDistribution::CHROME_BINARIES) &&
- !ctx.machine_state.GetProductState(
- true, // system-level
- BrowserDistribution::CHROME_BROWSER)) {
- *is_valid = false;
- LOG(ERROR) << ctx.dist->GetAppShortCutName()
- << " (" << ctx.state.version().GetString() << ") is "
- << "installed without Chrome Binaries or a system-level "
- << "Chrome.";
- }
- } else {
- *is_valid = false;
- LOG(ERROR) << ctx.dist->GetAppShortCutName()
- << " (" << ctx.state.version().GetString() << ") is installed "
- << "without Chrome Binaries.";
- }
- } else {
- // Version must match that of binaries.
- if (ctx.state.version().CompareTo(binaries->version()) != 0) {
- *is_valid = false;
- LOG(ERROR) << "Version of " << ctx.dist->GetAppShortCutName()
- << " (" << ctx.state.version().GetString() << ") does not "
- "match that of Chrome Binaries ("
- << binaries->version().GetString() << ").";
- }
+ DCHECK(binaries);
- // Channel value must match that of binaries.
- if (!ctx.state.channel().Equals(binaries->channel())) {
- *is_valid = false;
- LOG(ERROR) << "Channel name of " << ctx.dist->GetAppShortCutName()
- << " (" << ctx.state.channel().value()
- << ") does not match that of Chrome Binaries ("
- << binaries->channel().value() << ").";
- }
+ // Version must match that of binaries.
+ if (ctx.state.version().CompareTo(binaries->version()) != 0) {
+ *is_valid = false;
+ LOG(ERROR) << "Version of " << ctx.dist->GetAppShortCutName()
+ << " (" << ctx.state.version().GetString() << ") does not "
+ "match that of Chrome Binaries ("
+ << binaries->version().GetString() << ").";
+ }
+
+ // Channel value must match that of binaries.
+ if (!ctx.state.channel().Equals(binaries->channel())) {
+ *is_valid = false;
+ LOG(ERROR) << "Channel name of " << ctx.dist->GetAppShortCutName()
+ << " (" << ctx.state.channel().value()
+ << ") does not match that of Chrome Binaries ("
+ << binaries->channel().value() << ").";
}
}
@@ -686,13 +510,8 @@ void InstallationValidator::ValidateAppCommands(
bool* is_valid) {
DCHECK(is_valid);
- CommandExpectations expectations;
-
- if (ctx.dist->GetType() == BrowserDistribution::CHROME_APP_HOST) {
- expectations[kCmdInstallApp] = &ValidateInstallAppCommand;
- }
-
- ValidateAppCommandExpectations(ctx, expectations, is_valid);
+ // Products are not expected to have any commands.
+ ValidateAppCommandExpectations(ctx, CommandExpectations(), is_valid);
}
// Validates usagestats for the product or binaries in |ctx|.
@@ -790,25 +609,6 @@ bool InstallationValidator::ValidateInstallationTypeForState(
*type = static_cast<InstallationType>(*type | cf_bit);
}
- // Is Chrome App Host installed?
- product_state =
- machine_state.GetProductState(system_level,
- BrowserDistribution::CHROME_APP_HOST);
- if (product_state != NULL) {
- ChromeAppHostRules chrome_app_host_rules;
- ValidateProduct(machine_state, system_level, *product_state,
- chrome_app_host_rules, &rock_on);
- *type = static_cast<InstallationType>(*type | ProductBits::CHROME_APP_HOST);
- if (system_level) {
- LOG(ERROR) << "Chrome App Host must not be installed at system level.";
- rock_on = false;
- }
- if (!product_state->is_multi_install()) {
- LOG(ERROR) << "Chrome App Host must always be multi-install.";
- rock_on = false;
- }
- }
-
DCHECK_NE(std::find(&kInstallationTypes[0],
&kInstallationTypes[arraysize(kInstallationTypes)],
*type),
diff --git a/chrome/installer/util/installation_validator.h b/chrome/installer/util/installation_validator.h
index d06ab9d..ee8cc1c 100644
--- a/chrome/installer/util/installation_validator.h
+++ b/chrome/installer/util/installation_validator.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -36,7 +36,6 @@ class InstallationValidator {
CHROME_FRAME_SINGLE = 0x04,
CHROME_FRAME_MULTI = 0x08,
CHROME_FRAME_READY_MODE = 0x10,
- CHROME_APP_HOST = 0x20,
};
}; // class ProductBits
@@ -59,23 +58,6 @@ class InstallationValidator {
ProductBits::CHROME_FRAME_MULTI | ProductBits::CHROME_MULTI,
CHROME_FRAME_READY_MODE_CHROME_MULTI =
ProductBits::CHROME_FRAME_READY_MODE | ProductBits::CHROME_MULTI,
- CHROME_APP_HOST =
- ProductBits::CHROME_APP_HOST,
- CHROME_APP_HOST_CHROME_FRAME_SINGLE =
- ProductBits::CHROME_APP_HOST | ProductBits::CHROME_FRAME_SINGLE,
- CHROME_APP_HOST_CHROME_FRAME_SINGLE_CHROME_MULTI =
- ProductBits::CHROME_APP_HOST | ProductBits::CHROME_FRAME_SINGLE |
- ProductBits::CHROME_MULTI,
- CHROME_APP_HOST_CHROME_FRAME_MULTI =
- ProductBits::CHROME_APP_HOST | ProductBits::CHROME_FRAME_MULTI,
- CHROME_APP_HOST_CHROME_FRAME_MULTI_CHROME_MULTI =
- ProductBits::CHROME_APP_HOST | ProductBits::CHROME_FRAME_MULTI |
- ProductBits::CHROME_MULTI,
- CHROME_APP_HOST_CHROME_MULTI =
- ProductBits::CHROME_APP_HOST | ProductBits::CHROME_MULTI,
- CHROME_APP_HOST_CHROME_MULTI_CHROME_FRAME_READY_MODE =
- ProductBits::CHROME_APP_HOST | ProductBits::CHROME_MULTI |
- ProductBits::CHROME_FRAME_READY_MODE,
};
// Validates |machine_state| at user or system level, returning true if valid.
@@ -154,24 +136,6 @@ class InstallationValidator {
const ProductState& product_state) const OVERRIDE;
};
- // Validation rules for Chrome App Host.
- class ChromeAppHostRules : public ProductRules {
- public:
- virtual BrowserDistribution::Type distribution_type() const OVERRIDE;
- virtual void AddUninstallSwitchExpectations(
- const InstallationState& machine_state,
- bool system_install,
- const ProductState& product_state,
- SwitchExpectations* expectations) const OVERRIDE;
- virtual void AddRenameSwitchExpectations(
- const InstallationState& machine_state,
- bool system_install,
- const ProductState& product_state,
- SwitchExpectations* expectations) const OVERRIDE;
- virtual bool UsageStatsAllowed(
- const ProductState& product_state) const OVERRIDE;
- };
-
// Validation rules for the multi-install Chrome binaries.
class ChromeBinariesRules : public ProductRules {
public:
@@ -198,17 +162,9 @@ class InstallationValidator {
const ProductRules& rules;
};
- static void ValidateInstallAppCommand(const ProductContext& ctx,
- const AppCommand& command,
- bool* is_valid);
static void ValidateQuickEnableCfCommand(const ProductContext& ctx,
const AppCommand& command,
bool* is_valid);
- static void ValidateQuickEnableApplicationHostCommand(
- const ProductContext& ctx,
- const AppCommand& command,
- bool* is_valid);
-
static void ValidateAppCommandExpectations(
const ProductContext& ctx,
const CommandExpectations& expectations,
diff --git a/chrome/installer/util/installation_validator_unittest.cc b/chrome/installer/util/installation_validator_unittest.cc
index c997110..56e854c 100644
--- a/chrome/installer/util/installation_validator_unittest.cc
+++ b/chrome/installer/util/installation_validator_unittest.cc
@@ -78,14 +78,11 @@ class FakeProductState : public ProductState {
const char* version,
int channel_modifiers,
Vehicle vehicle);
- void AddQuickEnableApplicationHostCommand(BrowserDistribution::Type dist_type,
- Level install_level,
- const char* version,
- int channel_modifiers);
void AddQuickEnableCfCommand(BrowserDistribution::Type dist_type,
Level install_level,
const char* version,
int channel_modifiers);
+ void RemoveQuickEnableCfCommand(BrowserDistribution::Type dist_type);
void set_multi_install(bool is_multi_install) {
multi_install_ = is_multi_install;
}
@@ -197,23 +194,6 @@ void FakeProductState::SetUninstallCommand(BrowserDistribution::Type dist_type,
uninstall_command_.AppendSwitch(installer::switches::kMsi);
}
-// Adds the "quick-enable-application-host" Google Update product command.
-void FakeProductState::AddQuickEnableApplicationHostCommand(
- BrowserDistribution::Type dist_type,
- Level install_level,
- const char* version,
- int channel_modifiers) {
- DCHECK_EQ(dist_type, BrowserDistribution::CHROME_BINARIES);
- DCHECK_NE(channel_modifiers & CM_MULTI, 0);
-
- CommandLine cmd_line(GetSetupExePath(dist_type, install_level, version,
- channel_modifiers));
- cmd_line.AppendSwitch(installer::switches::kMultiInstall);
- cmd_line.AppendSwitch(installer::switches::kChromeAppHost);
- commands_.Set(installer::kCmdQuickEnableApplicationHost,
- AppCommand(cmd_line.GetCommandLineString(), true, true));
-}
-
// Adds the "quick-enable-cf" Google Update product command.
void FakeProductState::AddQuickEnableCfCommand(
BrowserDistribution::Type dist_type,
@@ -233,6 +213,14 @@ void FakeProductState::AddQuickEnableCfCommand(
AppCommand(cmd_line.GetCommandLineString(), true, true));
}
+// Removes the "quick-enable-cf" Google Update product command.
+void FakeProductState::RemoveQuickEnableCfCommand(
+ BrowserDistribution::Type dist_type) {
+ DCHECK_EQ(dist_type, BrowserDistribution::CHROME_BINARIES);
+
+ commands_.Remove(installer::kCmdQuickEnableCf);
+}
+
} // namespace
// Fixture for testing the InstallationValidator. Errors logged by the
@@ -424,12 +412,6 @@ void InstallationValidatorTest::MakeProductState(
state->AddQuickEnableCfCommand(prod_type, install_level,
chrome::kChromeVersion, channel_modifiers);
}
- if (prod_type == BrowserDistribution::CHROME_BINARIES) {
- state->AddQuickEnableApplicationHostCommand(prod_type,
- install_level,
- chrome::kChromeVersion,
- channel_modifiers);
- }
}
// static
diff --git a/chrome/installer/util/installer_state.cc b/chrome/installer/util/installer_state.cc
index 9e69398..34ceff4 100644
--- a/chrome/installer/util/installer_state.cc
+++ b/chrome/installer/util/installer_state.cc
@@ -126,117 +126,6 @@ void InstallerState::Initialize(const CommandLine& command_line,
VLOG(1) << (is_uninstall ? "Uninstall" : "Install")
<< " distribution: " << p->distribution()->GetAppShortCutName();
}
- if (prefs.install_chrome_app_host()) {
- Product* p =
- AddProductFromPreferences(BrowserDistribution::CHROME_APP_HOST, prefs,
- machine_state);
- VLOG(1) << (is_uninstall ? "Uninstall" : "Install")
- << " distribution: " << p->distribution()->GetAppShortCutName();
- }
-
- if (!is_uninstall && is_multi_install()) {
- bool need_binaries = false;
- if (FindProduct(BrowserDistribution::CHROME_APP_HOST)) {
- // App Host will happily use Chrome at system level, or binaries at system
- // level, even if app host is user level.
- const ProductState* chrome_state = machine_state.GetProductState(
- true, // system level
- BrowserDistribution::CHROME_BROWSER);
- // If Chrome is at system-level, multi- or otherwise. We'll use it.
- if (!chrome_state) {
- const ProductState* binaries_state = machine_state.GetProductState(
- true, // system level
- BrowserDistribution::CHROME_BINARIES);
- if (!binaries_state)
- need_binaries = true;
- }
- }
-
- // Chrome/Chrome Frame multi need Binaries at their own level.
- if (FindProduct(BrowserDistribution::CHROME_BROWSER))
- need_binaries = true;
-
- if (FindProduct(BrowserDistribution::CHROME_FRAME))
- need_binaries = true;
-
- if (need_binaries && !FindProduct(BrowserDistribution::CHROME_BINARIES)) {
- // Force binaries to be installed/updated.
- Product* p =
- AddProductFromPreferences(BrowserDistribution::CHROME_BINARIES,
- prefs,
- machine_state);
- VLOG(1) << "Install distribution: "
- << p->distribution()->GetAppShortCutName();
- }
- }
-
- if (is_uninstall && prefs.is_multi_install()) {
- if (FindProduct(BrowserDistribution::CHROME_BROWSER)) {
- const ProductState* chrome_frame_state = machine_state.GetProductState(
- system_install(), BrowserDistribution::CHROME_FRAME);
-
- if (chrome_frame_state != NULL &&
- chrome_frame_state->uninstall_command().HasSwitch(
- switches::kChromeFrameReadyMode) &&
- !FindProduct(BrowserDistribution::CHROME_FRAME)) {
- // Chrome Frame is installed in Ready Mode. Remove it along with Chrome.
- Product* p = AddProductFromPreferences(
- BrowserDistribution::CHROME_FRAME, prefs, machine_state);
-
- VLOG(1) << "Uninstall distribution: "
- << p->distribution()->GetAppShortCutName();
- }
- }
-
- bool keep_binaries = false;
- // Look for a product that is not the binaries and that is not being
- // uninstalled. If not found, binaries are uninstalled too.
- for (size_t i = 0; i < BrowserDistribution::NUM_TYPES; ++i) {
- BrowserDistribution::Type type =
- static_cast<BrowserDistribution::Type>(i);
-
- if (type == BrowserDistribution::CHROME_BINARIES)
- continue;
-
- if (machine_state.GetProductState(system_install(), type) == NULL) {
- // The product is not installed.
- continue;
- }
-
- // The product is installed.
-
- if (!FindProduct(type)) {
- // The product is not being uninstalled.
- if (type != BrowserDistribution::CHROME_APP_HOST) {
- keep_binaries = true;
- break;
- } else {
- // If binaries/chrome are at system-level, we can discard them at
- // user-level...
- if (!machine_state.GetProductState(
- true, // system-level
- BrowserDistribution::CHROME_BROWSER) &&
- !machine_state.GetProductState(
- true, // system-level
- BrowserDistribution::CHROME_BINARIES)) {
- // ... otherwise keep them.
- keep_binaries = true;
- break;
- }
-
- }
- }
-
- // The product is being uninstalled.
- }
- if (!keep_binaries) {
- Product* p =
- AddProductFromPreferences(BrowserDistribution::CHROME_BINARIES, prefs,
- machine_state);
- VLOG(1) << (is_uninstall ? "Uninstall" : "Install")
- << " distribution: " << p->distribution()->GetAppShortCutName();
- }
- }
BrowserDistribution* operand = NULL;
@@ -252,26 +141,17 @@ void InstallerState::Initialize(const CommandLine& command_line,
operand = multi_package_distribution_;
operation_ = MULTI_UPDATE;
} else {
+ // Initial and over installs will always take place under one of the
+ // product app guids. Chrome Frame's will be used if only Chrome Frame
+ // is being installed. In all other cases, Chrome's is used.
operation_ = MULTI_INSTALL;
}
- // Initial, over, and un-installs will always take place under one of the
- // product app guids (Chrome, Chrome Frame, or App Host, in order of
- // preference).
if (operand == NULL) {
- BrowserDistribution::Type operand_distribution_type =
- BrowserDistribution::CHROME_BINARIES;
- if (prefs.install_chrome())
- operand_distribution_type = BrowserDistribution::CHROME_BROWSER;
- else if (prefs.install_chrome_frame())
- operand_distribution_type = BrowserDistribution::CHROME_FRAME;
- else if (prefs.install_chrome_app_host())
- operand_distribution_type = BrowserDistribution::CHROME_APP_HOST;
- else
- NOTREACHED();
-
operand = BrowserDistribution::GetSpecificDistribution(
- operand_distribution_type);
+ prefs.install_chrome() ?
+ BrowserDistribution::CHROME_BROWSER :
+ BrowserDistribution::CHROME_FRAME);
}
state_key_ = operand->GetStateKey();
diff --git a/chrome/installer/util/installer_state.h b/chrome/installer/util/installer_state.h
index 6e18ebd..5fe4fc8 100644
--- a/chrome/installer/util/installer_state.h
+++ b/chrome/installer/util/installer_state.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -37,12 +37,6 @@ typedef std::vector<Product*> Products;
// Encapsulates the state of the current installation operation. Only valid
// for installs and upgrades (not for uninstalls or non-install commands).
-// This class interprets the command-line arguments and master preferences and
-// determines the operations to be performed. For example, the Chrome Binaries
-// are automatically added if required in multi-install mode.
-// TODO(erikwright): This is now used a fair bit during uninstall, and
-// InstallerState::Initialize() contains a lot of code for uninstall. The class
-// comment should probably be updated.
// TODO(grt): Rename to InstallerEngine/Conductor or somesuch?
class InstallerState {
public:
diff --git a/chrome/installer/util/master_preferences.cc b/chrome/installer/util/master_preferences.cc
index 59f7270..008c148 100644
--- a/chrome/installer/util/master_preferences.cc
+++ b/chrome/installer/util/master_preferences.cc
@@ -82,7 +82,6 @@ namespace installer {
MasterPreferences::MasterPreferences() : distribution_(NULL),
preferences_read_from_file_(false),
chrome_(true),
- chrome_app_host_(false),
chrome_frame_(false),
multi_install_(false) {
InitializeFromCommandLine(*CommandLine::ForCurrentProcess());
@@ -92,7 +91,6 @@ MasterPreferences::MasterPreferences(const CommandLine& cmd_line)
: distribution_(NULL),
preferences_read_from_file_(false),
chrome_(true),
- chrome_app_host_(false),
chrome_frame_(false),
multi_install_(false) {
InitializeFromCommandLine(cmd_line);
@@ -100,8 +98,7 @@ MasterPreferences::MasterPreferences(const CommandLine& cmd_line)
MasterPreferences::MasterPreferences(const FilePath& prefs_path)
: distribution_(NULL), preferences_read_from_file_(false),
- chrome_(true), chrome_app_host_(false), chrome_frame_(false),
- multi_install_(false) {
+ chrome_(true), chrome_frame_(false), multi_install_(false) {
master_dictionary_.reset(ParseDistributionPreferences(prefs_path));
if (!master_dictionary_.get()) {
@@ -139,8 +136,6 @@ void MasterPreferences::InitializeFromCommandLine(const CommandLine& cmd_line) {
} translate_switches[] = {
{ installer::switches::kAutoLaunchChrome,
installer::master_preferences::kAutoLaunchChrome },
- { installer::switches::kChromeAppHost,
- installer::master_preferences::kChromeAppHost },
{ installer::switches::kChrome,
installer::master_preferences::kChrome },
{ installer::switches::kChromeFrame,
@@ -212,12 +207,10 @@ void MasterPreferences::InitializeProductFlags() {
// Make sure we start out with the correct defaults.
multi_install_ = false;
chrome_frame_ = false;
- chrome_app_host_ = false;
chrome_ = true;
GetBool(installer::master_preferences::kMultiInstall, &multi_install_);
GetBool(installer::master_preferences::kChromeFrame, &chrome_frame_);
- GetBool(installer::master_preferences::kChromeAppHost, &chrome_app_host_);
// When multi-install is specified, the checks are pretty simple (in theory):
// In order to be installed/uninstalled, each product must have its switch
diff --git a/chrome/installer/util/master_preferences.h b/chrome/installer/util/master_preferences.h
index e698d1d..8baf9d6a 100644
--- a/chrome/installer/util/master_preferences.h
+++ b/chrome/installer/util/master_preferences.h
@@ -164,10 +164,6 @@ class MasterPreferences {
return chrome_;
}
- bool install_chrome_app_host() const {
- return chrome_app_host_;
- }
-
bool install_chrome_frame() const {
return chrome_frame_;
}
@@ -192,7 +188,6 @@ class MasterPreferences {
base::DictionaryValue* distribution_;
bool preferences_read_from_file_;
bool chrome_;
- bool chrome_app_host_;
bool chrome_frame_;
bool multi_install_;
diff --git a/chrome/installer/util/master_preferences_constants.cc b/chrome/installer/util/master_preferences_constants.cc
index 8884ce0..2ee5557 100644
--- a/chrome/installer/util/master_preferences_constants.cc
+++ b/chrome/installer/util/master_preferences_constants.cc
@@ -9,7 +9,6 @@ namespace master_preferences {
const char kAltShortcutText[] = "alternate_shortcut_text";
const char kAutoLaunchChrome[] = "auto_launch_chrome";
const char kChrome[] = "chrome";
- const char kChromeAppHost[] = "app_host";
const char kChromeFrame[] = "chrome_frame";
const char kChromeFrameReadyMode[] = "ready_mode";
const char kChromeShortcutIconIndex[] = "chrome_shortcut_icon_index";
diff --git a/chrome/installer/util/master_preferences_constants.h b/chrome/installer/util/master_preferences_constants.h
index 8a6f6c2..45806bb 100644
--- a/chrome/installer/util/master_preferences_constants.h
+++ b/chrome/installer/util/master_preferences_constants.h
@@ -22,8 +22,6 @@ extern const char kAltShortcutText[];
extern const char kAutoLaunchChrome[];
// Boolean. This is to be a Chrome install. (When using MultiInstall)
extern const char kChrome[];
-// Boolean. This is to be a Chrome App Host install.
-extern const char kChromeAppHost[];
// Boolean. This is to be a Chrome Frame install.
extern const char kChromeFrame[];
// Boolean. Chrome Frame is to be installed in ready-mode.
diff --git a/chrome/installer/util/prebuild/create_string_rc.py b/chrome/installer/util/prebuild/create_string_rc.py
index 4dd2852..dd1043b 100755
--- a/chrome/installer/util/prebuild/create_string_rc.py
+++ b/chrome/installer/util/prebuild/create_string_rc.py
@@ -44,14 +44,11 @@ import FP
kStringIds = [
'IDS_PRODUCT_NAME',
'IDS_SXS_SHORTCUT_NAME',
- 'IDS_PRODUCT_APP_HOST_NAME',
- 'IDS_PRODUCT_BINARIES_NAME',
'IDS_PRODUCT_DESCRIPTION',
'IDS_PRODUCT_FRAME_NAME',
'IDS_UNINSTALL_CHROME',
'IDS_ABOUT_VERSION_COMPANY_NAME',
'IDS_INSTALL_HIGHER_VERSION',
- 'IDS_INSTALL_HIGHER_VERSION_APP_HOST',
'IDS_INSTALL_HIGHER_VERSION_CF',
'IDS_INSTALL_HIGHER_VERSION_CB_CF',
'IDS_INSTALL_SYSTEM_LEVEL_EXISTS',
diff --git a/chrome/installer/util/product.cc b/chrome/installer/util/product.cc
index 7747401..f2ab2a7 100644
--- a/chrome/installer/util/product.cc
+++ b/chrome/installer/util/product.cc
@@ -10,8 +10,6 @@
#include "base/logging.h"
#include "base/process_util.h"
#include "base/win/registry.h"
-#include "chrome/installer/util/chrome_app_host_operations.h"
-#include "chrome/installer/util/chrome_binaries_operations.h"
#include "chrome/installer/util/chrome_browser_operations.h"
#include "chrome/installer/util/chrome_browser_sxs_operations.h"
#include "chrome/installer/util/chrome_frame_operations.h"
@@ -38,12 +36,6 @@ Product::Product(BrowserDistribution* distribution)
case BrowserDistribution::CHROME_FRAME:
operations_.reset(new ChromeFrameOperations());
break;
- case BrowserDistribution::CHROME_APP_HOST:
- operations_.reset(new ChromeAppHostOperations());
- break;
- case BrowserDistribution::CHROME_BINARIES:
- operations_.reset(new ChromeBinariesOperations());
- break;
default:
NOTREACHED() << "Unsupported BrowserDistribution::Type: "
<< distribution->GetType();
diff --git a/chrome/installer/util/product.h b/chrome/installer/util/product.h
index eabc3c9..4b4ec65 100644
--- a/chrome/installer/util/product.h
+++ b/chrome/installer/util/product.h
@@ -56,14 +56,6 @@ class Product {
return distribution_->GetType() == BrowserDistribution::CHROME_FRAME;
}
- bool is_chrome_app_host() const {
- return distribution_->GetType() == BrowserDistribution::CHROME_APP_HOST;
- }
-
- bool is_chrome_binaries() const {
- return distribution_->GetType() == BrowserDistribution::CHROME_BINARIES;
- }
-
bool HasOption(const std::wstring& option) const {
return options_.find(option) != options_.end();
}
diff --git a/chrome/installer/util/util_constants.cc b/chrome/installer/util/util_constants.cc
index 04c4b79..9382fc4 100644
--- a/chrome/installer/util/util_constants.cc
+++ b/chrome/installer/util/util_constants.cc
@@ -15,9 +15,6 @@ const char kAutoLaunchChrome[] = "auto-launch-chrome";
// Currently this is only required when used in combination with kMultiInstall.
const char kChrome[] = "chrome";
-// Install Chrome App Host.
-const char kChromeAppHost[] = "app-host";
-
// Install Chrome Frame.
const char kChromeFrame[] = "chrome-frame";
@@ -170,7 +167,6 @@ const char kToastResultsKey[] = "toast-results-key";
} // namespace switches
-const wchar_t kChromeAppHostExe[] = L"app_host.exe";
const wchar_t kChromeDll[] = L"chrome.dll";
const wchar_t kChromeExe[] = L"chrome.exe";
const wchar_t kChromeFrameDll[] = L"npchrome_frame.dll";
@@ -180,9 +176,6 @@ const wchar_t kChromeFrameReadyModeField[] = L"ChromeFrameReadyMode";
const wchar_t kChromeLauncherExe[] = L"chrome_launcher.exe";
const wchar_t kChromeNewExe[] = L"new_chrome.exe";
const wchar_t kChromeOldExe[] = L"old_chrome.exe";
-const wchar_t kCmdInstallApp[] = L"install-application";
-const wchar_t kCmdQuickEnableApplicationHost[] =
- L"quick-enable-application-host";
const wchar_t kCmdQuickEnableCf[] = L"quick-enable-cf";
const wchar_t kDelegateExecuteExe[] = L"delegate_execute.exe";
const wchar_t kGoogleChromeInstallSubDir1[] = L"Google";
diff --git a/chrome/installer/util/util_constants.h b/chrome/installer/util/util_constants.h
index 9a1da32..c4d1af51 100644
--- a/chrome/installer/util/util_constants.h
+++ b/chrome/installer/util/util_constants.h
@@ -124,7 +124,6 @@ COMPILE_ASSERT(CREATING_VISUAL_MANIFEST == 17,
namespace switches {
extern const char kAutoLaunchChrome[];
extern const char kChrome[];
-extern const char kChromeAppHost[];
extern const char kChromeFrame[];
extern const char kChromeFrameQuickEnable[];
extern const char kChromeFrameReadyMode[];
@@ -167,7 +166,6 @@ extern const char kExperimentGroup[];
extern const char kToastResultsKey[];
} // namespace switches
-extern const wchar_t kChromeAppHostExe[];
extern const wchar_t kChromeDll[];
extern const wchar_t kChromeExe[];
extern const wchar_t kChromeFrameDll[];
@@ -177,8 +175,6 @@ extern const wchar_t kChromeFrameReadyModeField[];
extern const wchar_t kChromeLauncherExe[];
extern const wchar_t kChromeOldExe[];
extern const wchar_t kChromeNewExe[];
-extern const wchar_t kCmdInstallApp[];
-extern const wchar_t kCmdQuickEnableApplicationHost[];
extern const wchar_t kCmdQuickEnableCf[];
extern const wchar_t kDelegateExecuteExe[];
extern const wchar_t kGoogleChromeInstallSubDir1[];