OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <windows.h> | 5 #include <windows.h> |
6 #include <msi.h> | 6 #include <msi.h> |
7 #include <shellapi.h> | 7 #include <shellapi.h> |
8 #include <shlobj.h> | 8 #include <shlobj.h> |
9 | 9 |
10 #include <string> | 10 #include <string> |
(...skipping 20 matching lines...) Expand all Loading... |
31 #include "chrome/installer/util/delete_tree_work_item.h" | 31 #include "chrome/installer/util/delete_tree_work_item.h" |
32 #include "chrome/installer/util/helper.h" | 32 #include "chrome/installer/util/helper.h" |
33 #include "chrome/installer/util/html_dialog.h" | 33 #include "chrome/installer/util/html_dialog.h" |
34 #include "chrome/installer/util/install_util.h" | 34 #include "chrome/installer/util/install_util.h" |
35 #include "chrome/installer/util/l10n_string_util.h" | 35 #include "chrome/installer/util/l10n_string_util.h" |
36 #include "chrome/installer/util/logging_installer.h" | 36 #include "chrome/installer/util/logging_installer.h" |
37 #include "chrome/installer/util/lzma_util.h" | 37 #include "chrome/installer/util/lzma_util.h" |
38 #include "chrome/installer/util/google_update_settings.h" | 38 #include "chrome/installer/util/google_update_settings.h" |
39 #include "chrome/installer/util/google_update_constants.h" | 39 #include "chrome/installer/util/google_update_constants.h" |
40 #include "chrome/installer/util/master_preferences.h" | 40 #include "chrome/installer/util/master_preferences.h" |
| 41 #include "chrome/installer/util/master_preferences_constants.h" |
41 #include "chrome/installer/util/shell_util.h" | 42 #include "chrome/installer/util/shell_util.h" |
42 #include "chrome/installer/util/util_constants.h" | 43 #include "chrome/installer/util/util_constants.h" |
43 | 44 |
44 #include "installer_util_strings.h" | 45 #include "installer_util_strings.h" |
45 | 46 |
46 namespace { | 47 namespace { |
47 | 48 |
48 // This method unpacks and uncompresses the given archive file. For Chrome | 49 // This method unpacks and uncompresses the given archive file. For Chrome |
49 // install we are creating a uncompressed archive that contains all the files | 50 // install we are creating a uncompressed archive that contains all the files |
50 // needed for the installer. This uncompressed archive is later compressed. | 51 // needed for the installer. This uncompressed archive is later compressed. |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 int str_id = IDS_INSTALL_DIR_IN_USE_BASE; | 211 int str_id = IDS_INSTALL_DIR_IN_USE_BASE; |
211 InstallUtil::WriteInstallerResult(system_install, status, str_id, NULL); | 212 InstallUtil::WriteInstallerResult(system_install, status, str_id, NULL); |
212 return false; | 213 return false; |
213 } | 214 } |
214 } | 215 } |
215 | 216 |
216 return true; | 217 return true; |
217 } | 218 } |
218 | 219 |
219 installer_util::InstallStatus InstallChrome(const CommandLine& cmd_line, | 220 installer_util::InstallStatus InstallChrome(const CommandLine& cmd_line, |
220 const installer::Version* installed_version, const DictionaryValue* prefs) { | 221 const installer::Version* installed_version, |
| 222 const installer_util::MasterPreferences& prefs) { |
221 bool system_level = false; | 223 bool system_level = false; |
222 installer_util::GetDistroBooleanPreference(prefs, | 224 prefs.GetBool(installer_util::master_preferences::kSystemLevel, |
223 installer_util::master_preferences::kSystemLevel, &system_level); | 225 &system_level); |
224 installer_util::InstallStatus install_status = installer_util::UNKNOWN_STATUS; | 226 installer_util::InstallStatus install_status = installer_util::UNKNOWN_STATUS; |
225 if (!CheckPreInstallConditions(installed_version, | 227 if (!CheckPreInstallConditions(installed_version, |
226 system_level, install_status)) | 228 system_level, install_status)) |
227 return install_status; | 229 return install_status; |
228 | 230 |
229 // For install the default location for chrome.packed.7z is in current | 231 // For install the default location for chrome.packed.7z is in current |
230 // folder, so get that value first. | 232 // folder, so get that value first. |
231 FilePath archive = | 233 FilePath archive = |
232 cmd_line.GetProgram().DirName().Append( | 234 cmd_line.GetProgram().DirName().Append( |
233 installer::kChromeCompressedArchive); | 235 installer::kChromeCompressedArchive); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 install_msg_base = IDS_INSTALL_OS_ERROR_BASE; | 320 install_msg_base = IDS_INSTALL_OS_ERROR_BASE; |
319 install_status = installer_util::OS_ERROR; | 321 install_status = installer_util::OS_ERROR; |
320 } else { | 322 } else { |
321 file_util::AppendToPath(&chrome_exe, installer_util::kChromeExe); | 323 file_util::AppendToPath(&chrome_exe, installer_util::kChromeExe); |
322 chrome_exe = L"\"" + chrome_exe + L"\""; | 324 chrome_exe = L"\"" + chrome_exe + L"\""; |
323 install_msg_base = 0; | 325 install_msg_base = 0; |
324 } | 326 } |
325 } | 327 } |
326 | 328 |
327 bool value = false; | 329 bool value = false; |
328 installer_util::GetDistroBooleanPreference(prefs, | 330 prefs.GetBool( |
329 installer_util::master_preferences::kDoNotRegisterForUpdateLaunch, | 331 installer_util::master_preferences::kDoNotRegisterForUpdateLaunch, |
330 &value); | 332 &value); |
331 bool write_chrome_launch_string = (!value) && | 333 bool write_chrome_launch_string = (!value) && |
332 (install_status != installer_util::IN_USE_UPDATED); | 334 (install_status != installer_util::IN_USE_UPDATED); |
333 | 335 |
334 InstallUtil::WriteInstallerResult(system_level, install_status, | 336 InstallUtil::WriteInstallerResult(system_level, install_status, |
335 install_msg_base, write_chrome_launch_string ? &chrome_exe : NULL); | 337 install_msg_base, write_chrome_launch_string ? &chrome_exe : NULL); |
336 | 338 |
337 if (install_status == installer_util::FIRST_INSTALL_SUCCESS) { | 339 if (install_status == installer_util::FIRST_INSTALL_SUCCESS) { |
338 VLOG(1) << "First install successful."; | 340 VLOG(1) << "First install successful."; |
339 // We never want to launch Chrome in system level install mode. | 341 // We never want to launch Chrome in system level install mode. |
340 bool do_not_launch_chrome = false; | 342 bool do_not_launch_chrome = false; |
341 installer_util::GetDistroBooleanPreference(prefs, | 343 prefs.GetBool(installer_util::master_preferences::kDoNotLaunchChrome, |
342 installer_util::master_preferences::kDoNotLaunchChrome, | 344 &do_not_launch_chrome); |
343 &do_not_launch_chrome); | |
344 if (!system_level && !do_not_launch_chrome) | 345 if (!system_level && !do_not_launch_chrome) |
345 installer::LaunchChrome(system_level); | 346 installer::LaunchChrome(system_level); |
346 } else if ((install_status == installer_util::NEW_VERSION_UPDATED) || | 347 } else if ((install_status == installer_util::NEW_VERSION_UPDATED) || |
347 (install_status == installer_util::IN_USE_UPDATED)) { | 348 (install_status == installer_util::IN_USE_UPDATED)) { |
348 installer_setup::RemoveLegacyRegistryKeys(); | 349 installer_setup::RemoveLegacyRegistryKeys(); |
349 } | 350 } |
350 } | 351 } |
351 } | 352 } |
352 // There might be an experiment (for upgrade usually) that needs to happen. | 353 // There might be an experiment (for upgrade usually) that needs to happen. |
353 // An experiment's outcome can include chrome's uninstallation. If that is | 354 // An experiment's outcome can include chrome's uninstallation. If that is |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
624 WideToASCII(installer_util::switches::kDoNotCreateShortcuts)); | 625 WideToASCII(installer_util::switches::kDoNotCreateShortcuts)); |
625 mutable_command_line->AppendSwitch( | 626 mutable_command_line->AppendSwitch( |
626 WideToASCII(installer_util::switches::kDoNotLaunchChrome)); | 627 WideToASCII(installer_util::switches::kDoNotLaunchChrome)); |
627 mutable_command_line->AppendSwitch( | 628 mutable_command_line->AppendSwitch( |
628 WideToASCII(installer_util::switches::kDoNotRegisterForUpdateLaunch)); | 629 WideToASCII(installer_util::switches::kDoNotRegisterForUpdateLaunch)); |
629 } | 630 } |
630 | 631 |
631 const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess(); | 632 const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess(); |
632 | 633 |
633 installer::InitInstallerLogging(parsed_command_line); | 634 installer::InitInstallerLogging(parsed_command_line); |
634 scoped_ptr<DictionaryValue> prefs(installer_util::GetInstallPreferences( | 635 const installer_util::MasterPreferences& prefs = |
635 parsed_command_line)); | 636 InstallUtil::GetMasterPreferencesForCurrentProcess(); |
636 bool value = false; | 637 bool value = false; |
637 if (installer_util::GetDistroBooleanPreference(prefs.get(), | 638 if (prefs.GetBool(installer_util::master_preferences::kVerboseLogging, |
638 installer_util::master_preferences::kVerboseLogging, &value) && | 639 &value) && value) { |
639 value) | |
640 logging::SetMinLogLevel(logging::LOG_INFO); | 640 logging::SetMinLogLevel(logging::LOG_INFO); |
| 641 } |
641 | 642 |
642 VLOG(1) << "Command Line: " << parsed_command_line.command_line_string(); | 643 VLOG(1) << "Command Line: " << parsed_command_line.command_line_string(); |
643 | 644 |
644 bool system_install = false; | 645 bool system_install = false; |
645 installer_util::GetDistroBooleanPreference(prefs.get(), | 646 prefs.GetBool(installer_util::master_preferences::kSystemLevel, |
646 installer_util::master_preferences::kSystemLevel, &system_install); | 647 &system_install); |
647 VLOG(1) << "system install is " << system_install; | 648 VLOG(1) << "system install is " << system_install; |
648 | 649 |
649 // Check to make sure current system is WinXP or later. If not, log | 650 // Check to make sure current system is WinXP or later. If not, log |
650 // error message and get out. | 651 // error message and get out. |
651 if (!InstallUtil::IsOSSupported()) { | 652 if (!InstallUtil::IsOSSupported()) { |
652 LOG(ERROR) << "Chrome only supports Windows XP or later."; | 653 LOG(ERROR) << "Chrome only supports Windows XP or later."; |
653 InstallUtil::WriteInstallerResult(system_install, | 654 InstallUtil::WriteInstallerResult(system_install, |
654 installer_util::OS_NOT_SUPPORTED, | 655 installer_util::OS_NOT_SUPPORTED, |
655 IDS_INSTALL_OS_NOT_SUPPORTED_BASE, NULL); | 656 IDS_INSTALL_OS_NOT_SUPPORTED_BASE, NULL); |
656 return installer_util::OS_NOT_SUPPORTED; | 657 return installer_util::OS_NOT_SUPPORTED; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 | 717 |
717 installer_util::InstallStatus install_status = installer_util::UNKNOWN_STATUS; | 718 installer_util::InstallStatus install_status = installer_util::UNKNOWN_STATUS; |
718 // If --uninstall option is given, uninstall chrome | 719 // If --uninstall option is given, uninstall chrome |
719 if (parsed_command_line.HasSwitch(installer_util::switches::kUninstall)) { | 720 if (parsed_command_line.HasSwitch(installer_util::switches::kUninstall)) { |
720 install_status = UninstallChrome(parsed_command_line, | 721 install_status = UninstallChrome(parsed_command_line, |
721 command_line, | 722 command_line, |
722 installed_version.get(), | 723 installed_version.get(), |
723 system_install); | 724 system_install); |
724 // If --uninstall option is not specified, we assume it is install case. | 725 // If --uninstall option is not specified, we assume it is install case. |
725 } else { | 726 } else { |
726 install_status = InstallChrome(parsed_command_line, | 727 install_status = InstallChrome(parsed_command_line, installed_version.get(), |
727 installed_version.get(), | 728 prefs); |
728 prefs.get()); | |
729 } | 729 } |
730 | 730 |
731 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 731 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
732 | 732 |
733 if (InstallUtil::IsChromeFrameProcess() && | 733 if (InstallUtil::IsChromeFrameProcess() && |
734 !parsed_command_line.HasSwitch( | 734 !parsed_command_line.HasSwitch( |
735 installer_util::switches::kForceUninstall)) { | 735 installer_util::switches::kForceUninstall)) { |
736 if (install_status == installer_util::UNINSTALL_REQUIRES_REBOOT) { | 736 if (install_status == installer_util::UNINSTALL_REQUIRES_REBOOT) { |
737 ShowRebootDialog(); | 737 ShowRebootDialog(); |
738 } else if (parsed_command_line.HasSwitch( | 738 } else if (parsed_command_line.HasSwitch( |
(...skipping 14 matching lines...) Expand all Loading... |
753 parsed_command_line.HasSwitch(installer_util::switches::kUninstall))) { | 753 parsed_command_line.HasSwitch(installer_util::switches::kUninstall))) { |
754 // Note that we allow the status installer_util::UNINSTALL_REQUIRES_REBOOT | 754 // Note that we allow the status installer_util::UNINSTALL_REQUIRES_REBOOT |
755 // to pass through, since this is only returned on uninstall which is never | 755 // to pass through, since this is only returned on uninstall which is never |
756 // invoked directly by Google Update. | 756 // invoked directly by Google Update. |
757 return_code = dist->GetInstallReturnCode(install_status); | 757 return_code = dist->GetInstallReturnCode(install_status); |
758 } | 758 } |
759 | 759 |
760 VLOG(1) << "Installation complete, returning: " << return_code; | 760 VLOG(1) << "Installation complete, returning: " << return_code; |
761 return return_code; | 761 return return_code; |
762 } | 762 } |
OLD | NEW |