OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 return ret; | 114 return ret; |
115 | 115 |
116 base::FilePath uncompressed_archive( | 116 base::FilePath uncompressed_archive( |
117 temp_path.Append(installer::kChromeArchive)); | 117 temp_path.Append(installer::kChromeArchive)); |
118 scoped_ptr<Version> archive_version( | 118 scoped_ptr<Version> archive_version( |
119 installer::GetMaxVersionFromArchiveDir(installer_state.target_path())); | 119 installer::GetMaxVersionFromArchiveDir(installer_state.target_path())); |
120 | 120 |
121 // Check if this is differential update and if it is, patch it to the | 121 // Check if this is differential update and if it is, patch it to the |
122 // installer archive that should already be on the machine. We assume | 122 // installer archive that should already be on the machine. We assume |
123 // it is a differential installer if chrome.7z is not found. | 123 // it is a differential installer if chrome.7z is not found. |
124 if (!file_util::PathExists(uncompressed_archive)) { | 124 if (!base::PathExists(uncompressed_archive)) { |
125 *archive_type = installer::INCREMENTAL_ARCHIVE_TYPE; | 125 *archive_type = installer::INCREMENTAL_ARCHIVE_TYPE; |
126 VLOG(1) << "Differential patch found. Applying to existing archive."; | 126 VLOG(1) << "Differential patch found. Applying to existing archive."; |
127 if (!archive_version.get()) { | 127 if (!archive_version.get()) { |
128 LOG(ERROR) << "Can not use differential update when Chrome is not " | 128 LOG(ERROR) << "Can not use differential update when Chrome is not " |
129 << "installed on the system."; | 129 << "installed on the system."; |
130 return installer::CHROME_NOT_INSTALLED; | 130 return installer::CHROME_NOT_INSTALLED; |
131 } | 131 } |
132 | 132 |
133 base::FilePath existing_archive(installer_state.target_path().AppendASCII( | 133 base::FilePath existing_archive(installer_state.target_path().AppendASCII( |
134 archive_version->GetString())); | 134 archive_version->GetString())); |
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 installer_state.WriteInstallerResult(installer::TEMP_DIR_FAILED, | 676 installer_state.WriteInstallerResult(installer::TEMP_DIR_FAILED, |
677 IDS_INSTALL_TEMP_DIR_FAILED_BASE, NULL); | 677 IDS_INSTALL_TEMP_DIR_FAILED_BASE, NULL); |
678 return installer::TEMP_DIR_FAILED; | 678 return installer::TEMP_DIR_FAILED; |
679 } | 679 } |
680 | 680 |
681 bool unpacked = false; | 681 bool unpacked = false; |
682 | 682 |
683 // We want to keep uncompressed archive (chrome.7z) that we get after | 683 // We want to keep uncompressed archive (chrome.7z) that we get after |
684 // uncompressing and binary patching. Get the location for this file. | 684 // uncompressing and binary patching. Get the location for this file. |
685 base::FilePath archive_to_copy; | 685 base::FilePath archive_to_copy; |
686 if (file_util::PathExists(archive)) { | 686 if (base::PathExists(archive)) { |
687 VLOG(1) << "Archive found to install Chrome " << archive.value(); | 687 VLOG(1) << "Archive found to install Chrome " << archive.value(); |
688 if (UnPackArchive(archive, installer_state, temp_path.path(), unpack_path, | 688 if (UnPackArchive(archive, installer_state, temp_path.path(), unpack_path, |
689 archive_type)) { | 689 archive_type)) { |
690 install_status = (*archive_type) == installer::INCREMENTAL_ARCHIVE_TYPE ? | 690 install_status = (*archive_type) == installer::INCREMENTAL_ARCHIVE_TYPE ? |
691 installer::APPLY_DIFF_PATCH_FAILED : installer::UNCOMPRESSION_FAILED; | 691 installer::APPLY_DIFF_PATCH_FAILED : installer::UNCOMPRESSION_FAILED; |
692 installer_state.WriteInstallerResult( | 692 installer_state.WriteInstallerResult( |
693 install_status, | 693 install_status, |
694 IDS_INSTALL_UNCOMPRESSION_FAILED_BASE, | 694 IDS_INSTALL_UNCOMPRESSION_FAILED_BASE, |
695 NULL); | 695 NULL); |
696 } else { | 696 } else { |
697 unpacked = true; | 697 unpacked = true; |
698 archive_to_copy = temp_path.path().Append(installer::kChromeArchive); | 698 archive_to_copy = temp_path.path().Append(installer::kChromeArchive); |
699 } | 699 } |
700 } else { | 700 } else { |
701 base::FilePath uncompressed_archive(cmd_line.GetProgram().DirName().Append( | 701 base::FilePath uncompressed_archive(cmd_line.GetProgram().DirName().Append( |
702 installer::kChromeArchive)); | 702 installer::kChromeArchive)); |
703 | 703 |
704 if (file_util::PathExists(uncompressed_archive)) { | 704 if (base::PathExists(uncompressed_archive)) { |
705 VLOG(1) << "Uncompressed archive found to install Chrome " | 705 VLOG(1) << "Uncompressed archive found to install Chrome " |
706 << uncompressed_archive.value(); | 706 << uncompressed_archive.value(); |
707 *archive_type = installer::FULL_ARCHIVE_TYPE; | 707 *archive_type = installer::FULL_ARCHIVE_TYPE; |
708 string16 unpacked_file; | 708 string16 unpacked_file; |
709 if (LzmaUtil::UnPackArchive(uncompressed_archive.value(), | 709 if (LzmaUtil::UnPackArchive(uncompressed_archive.value(), |
710 unpack_path.value(), &unpacked_file)) { | 710 unpack_path.value(), &unpacked_file)) { |
711 installer_state.WriteInstallerResult( | 711 installer_state.WriteInstallerResult( |
712 installer::UNCOMPRESSION_FAILED, | 712 installer::UNCOMPRESSION_FAILED, |
713 IDS_INSTALL_UNCOMPRESSION_FAILED_BASE, | 713 IDS_INSTALL_UNCOMPRESSION_FAILED_BASE, |
714 NULL); | 714 NULL); |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1050 !installer_state.system_install()) { | 1050 !installer_state.system_install()) { |
1051 BrowserDistribution* dist = chrome->distribution(); | 1051 BrowserDistribution* dist = chrome->distribution(); |
1052 const base::FilePath system_exe_path( | 1052 const base::FilePath system_exe_path( |
1053 installer::GetChromeInstallPath(true, dist) | 1053 installer::GetChromeInstallPath(true, dist) |
1054 .Append(installer::kChromeExe)); | 1054 .Append(installer::kChromeExe)); |
1055 system_level_cmd.SetProgram(system_exe_path); | 1055 system_level_cmd.SetProgram(system_exe_path); |
1056 | 1056 |
1057 base::FilePath first_run_sentinel; | 1057 base::FilePath first_run_sentinel; |
1058 InstallUtil::GetSentinelFilePath( | 1058 InstallUtil::GetSentinelFilePath( |
1059 chrome::kFirstRunSentinel, dist, &first_run_sentinel); | 1059 chrome::kFirstRunSentinel, dist, &first_run_sentinel); |
1060 if (file_util::PathExists(first_run_sentinel)) { | 1060 if (base::PathExists(first_run_sentinel)) { |
1061 // If the Chrome being self-destructed has already undergone First Run, | 1061 // If the Chrome being self-destructed has already undergone First Run, |
1062 // trigger Active Setup and make sure the system-level Chrome doesn't go | 1062 // trigger Active Setup and make sure the system-level Chrome doesn't go |
1063 // through first run. | 1063 // through first run. |
1064 trigger_active_setup = true; | 1064 trigger_active_setup = true; |
1065 system_level_cmd.AppendSwitch(::switches::kNoFirstRun); | 1065 system_level_cmd.AppendSwitch(::switches::kNoFirstRun); |
1066 } | 1066 } |
1067 } | 1067 } |
1068 } | 1068 } |
1069 if (installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES)) { | 1069 if (installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES)) { |
1070 // Chrome Binaries should be last; if something else is cancelled, they | 1070 // Chrome Binaries should be last; if something else is cancelled, they |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1197 } | 1197 } |
1198 | 1198 |
1199 base::FilePath chrome_exe( | 1199 base::FilePath chrome_exe( |
1200 cmd_line.GetSwitchValuePath(installer::switches::kRegisterDevChrome)); | 1200 cmd_line.GetSwitchValuePath(installer::switches::kRegisterDevChrome)); |
1201 if (chrome_exe.empty()) | 1201 if (chrome_exe.empty()) |
1202 chrome_exe = cmd_line.GetProgram().DirName().Append(installer::kChromeExe); | 1202 chrome_exe = cmd_line.GetProgram().DirName().Append(installer::kChromeExe); |
1203 if (!chrome_exe.IsAbsolute()) | 1203 if (!chrome_exe.IsAbsolute()) |
1204 chrome_exe = base::MakeAbsoluteFilePath(chrome_exe); | 1204 chrome_exe = base::MakeAbsoluteFilePath(chrome_exe); |
1205 | 1205 |
1206 installer::InstallStatus status = installer::FIRST_INSTALL_SUCCESS; | 1206 installer::InstallStatus status = installer::FIRST_INSTALL_SUCCESS; |
1207 if (file_util::PathExists(chrome_exe)) { | 1207 if (base::PathExists(chrome_exe)) { |
1208 Product chrome(chrome_dist); | 1208 Product chrome(chrome_dist); |
1209 | 1209 |
1210 // Create the Start menu shortcut and pin it to the taskbar. | 1210 // Create the Start menu shortcut and pin it to the taskbar. |
1211 ShellUtil::ShortcutProperties shortcut_properties(ShellUtil::CURRENT_USER); | 1211 ShellUtil::ShortcutProperties shortcut_properties(ShellUtil::CURRENT_USER); |
1212 chrome.AddDefaultShortcutProperties(chrome_exe, &shortcut_properties); | 1212 chrome.AddDefaultShortcutProperties(chrome_exe, &shortcut_properties); |
1213 shortcut_properties.set_dual_mode(true); | 1213 shortcut_properties.set_dual_mode(true); |
1214 shortcut_properties.set_pin_to_taskbar(true); | 1214 shortcut_properties.set_pin_to_taskbar(true); |
1215 ShellUtil::CreateOrUpdateShortcut( | 1215 ShellUtil::CreateOrUpdateShortcut( |
1216 ShellUtil::SHORTCUT_LOCATION_START_MENU, chrome_dist, | 1216 ShellUtil::SHORTCUT_LOCATION_START_MENU, chrome_dist, |
1217 shortcut_properties, ShellUtil::SHELL_SHORTCUT_CREATE_ALWAYS); | 1217 shortcut_properties, ShellUtil::SHELL_SHORTCUT_CREATE_ALWAYS); |
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1752 if (!(installer_state.is_msi() && is_uninstall)) | 1752 if (!(installer_state.is_msi() && is_uninstall)) |
1753 // Note that we allow the status installer::UNINSTALL_REQUIRES_REBOOT | 1753 // Note that we allow the status installer::UNINSTALL_REQUIRES_REBOOT |
1754 // to pass through, since this is only returned on uninstall which is | 1754 // to pass through, since this is only returned on uninstall which is |
1755 // never invoked directly by Google Update. | 1755 // never invoked directly by Google Update. |
1756 return_code = InstallUtil::GetInstallReturnCode(install_status); | 1756 return_code = InstallUtil::GetInstallReturnCode(install_status); |
1757 | 1757 |
1758 VLOG(1) << "Installation complete, returning: " << return_code; | 1758 VLOG(1) << "Installation complete, returning: " << return_code; |
1759 | 1759 |
1760 return return_code; | 1760 return return_code; |
1761 } | 1761 } |
OLD | NEW |