OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 <string> | 5 #include <string> |
6 #include <windows.h> | 6 #include <windows.h> |
7 #include <msi.h> | 7 #include <msi.h> |
8 #include <shellapi.h> | 8 #include <shellapi.h> |
9 #include <shlobj.h> | 9 #include <shlobj.h> |
10 | 10 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 const std::wstring& temp_path, const std::wstring& path, | 57 const std::wstring& temp_path, const std::wstring& path, |
58 bool& incremental_install) { | 58 bool& incremental_install) { |
59 // First uncompress the payload. This could be a differential | 59 // First uncompress the payload. This could be a differential |
60 // update (patch.7z) or full archive (chrome.7z). If this uncompress fails | 60 // update (patch.7z) or full archive (chrome.7z). If this uncompress fails |
61 // return with error. | 61 // return with error. |
62 std::wstring unpacked_file; | 62 std::wstring unpacked_file; |
63 int32 ret = LzmaUtil::UnPackArchive(archive, temp_path, &unpacked_file); | 63 int32 ret = LzmaUtil::UnPackArchive(archive, temp_path, &unpacked_file); |
64 if (ret != NO_ERROR) | 64 if (ret != NO_ERROR) |
65 return ret; | 65 return ret; |
66 | 66 |
67 std::wstring archive_name; | |
68 if (InstallUtil::IsChromeFrameProcess()) { | |
69 archive_name = installer::kChromeFrameArchive; | |
70 } else { | |
71 archive_name = installer::kChromeArchive; | |
72 } | |
73 | |
74 std::wstring uncompressed_archive(temp_path); | 67 std::wstring uncompressed_archive(temp_path); |
75 file_util::AppendToPath(&uncompressed_archive, archive_name); | 68 file_util::AppendToPath(&uncompressed_archive, installer::kChromeArchive); |
76 | 69 |
77 // Check if this is differential update and if it is, patch it to the | 70 // Check if this is differential update and if it is, patch it to the |
78 // installer archive that should already be on the machine. We assume | 71 // installer archive that should already be on the machine. We assume |
79 // it is a differential installer if chrome.7z is not found. | 72 // it is a differential installer if chrome.7z is not found. |
80 if (!file_util::PathExists(FilePath::FromWStringHack(uncompressed_archive))) { | 73 if (!file_util::PathExists(FilePath::FromWStringHack(uncompressed_archive))) { |
81 incremental_install = true; | 74 incremental_install = true; |
82 LOG(INFO) << "Differential patch found. Applying to existing archive."; | 75 LOG(INFO) << "Differential patch found. Applying to existing archive."; |
83 if (!installed_version) { | 76 if (!installed_version) { |
84 LOG(ERROR) << "Can not use differential update when Chrome is not " | 77 LOG(ERROR) << "Can not use differential update when Chrome is not " |
85 << "installed on the system."; | 78 << "installed on the system."; |
86 return installer_util::CHROME_NOT_INSTALLED; | 79 return installer_util::CHROME_NOT_INSTALLED; |
87 } | 80 } |
88 std::wstring existing_archive = | 81 std::wstring existing_archive = |
89 installer::GetChromeInstallPath(system_install); | 82 installer::GetChromeInstallPath(system_install); |
90 file_util::AppendToPath(&existing_archive, | 83 file_util::AppendToPath(&existing_archive, |
91 installed_version->GetString()); | 84 installed_version->GetString()); |
92 file_util::AppendToPath(&existing_archive, installer_util::kInstallerDir); | 85 file_util::AppendToPath(&existing_archive, installer_util::kInstallerDir); |
93 file_util::AppendToPath(&existing_archive, archive_name); | 86 file_util::AppendToPath(&existing_archive, installer::kChromeArchive); |
94 if (int i = setup_util::ApplyDiffPatch(existing_archive, unpacked_file, | 87 if (int i = setup_util::ApplyDiffPatch(existing_archive, unpacked_file, |
95 uncompressed_archive)) { | 88 uncompressed_archive)) { |
96 LOG(ERROR) << "Binary patching failed with error " << i; | 89 LOG(ERROR) << "Binary patching failed with error " << i; |
97 return i; | 90 return i; |
98 } | 91 } |
99 } | 92 } |
100 | 93 |
101 // Unpack the uncompressed archive. | 94 // Unpack the uncompressed archive. |
102 return LzmaUtil::UnPackArchive(uncompressed_archive, path, &unpacked_file); | 95 return LzmaUtil::UnPackArchive(uncompressed_archive, path, &unpacked_file); |
103 } | 96 } |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 installer_util::GetDistroBooleanPreference(prefs, | 218 installer_util::GetDistroBooleanPreference(prefs, |
226 installer_util::master_preferences::kSystemLevel, &system_level); | 219 installer_util::master_preferences::kSystemLevel, &system_level); |
227 installer_util::InstallStatus install_status = installer_util::UNKNOWN_STATUS; | 220 installer_util::InstallStatus install_status = installer_util::UNKNOWN_STATUS; |
228 if (!CheckPreInstallConditions(installed_version, | 221 if (!CheckPreInstallConditions(installed_version, |
229 system_level, install_status)) | 222 system_level, install_status)) |
230 return install_status; | 223 return install_status; |
231 | 224 |
232 // For install the default location for chrome.packed.7z is in current | 225 // For install the default location for chrome.packed.7z is in current |
233 // folder, so get that value first. | 226 // folder, so get that value first. |
234 std::wstring archive = file_util::GetDirectoryFromPath(cmd_line.program()); | 227 std::wstring archive = file_util::GetDirectoryFromPath(cmd_line.program()); |
235 if (InstallUtil::IsChromeFrameProcess()) { | 228 file_util::AppendToPath(&archive, |
236 file_util::AppendToPath(&archive, | 229 std::wstring(installer::kChromeCompressedArchive)); |
237 std::wstring(installer::kChromeFrameCompressedArchive)); | 230 |
238 } else { | |
239 file_util::AppendToPath(&archive, | |
240 std::wstring(installer::kChromeCompressedArchive)); | |
241 } | |
242 // If --install-archive is given, get the user specified value | 231 // If --install-archive is given, get the user specified value |
243 if (cmd_line.HasSwitch(installer_util::switches::kInstallArchive)) { | 232 if (cmd_line.HasSwitch(installer_util::switches::kInstallArchive)) { |
244 archive = cmd_line.GetSwitchValue( | 233 archive = cmd_line.GetSwitchValue( |
245 installer_util::switches::kInstallArchive); | 234 installer_util::switches::kInstallArchive); |
246 } | 235 } |
247 LOG(INFO) << "Archive found to install Chrome " << archive; | 236 LOG(INFO) << "Archive found to install Chrome " << archive; |
248 | 237 |
249 // Create a temp folder where we will unpack Chrome archive. If it fails, | 238 // Create a temp folder where we will unpack Chrome archive. If it fails, |
250 // then we are doomed, so return immediately and no cleanup is required. | 239 // then we are doomed, so return immediately and no cleanup is required. |
251 FilePath temp_path; | 240 FilePath temp_path; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 installed_version->IsHigherThan(installer_version.get())) { | 278 installed_version->IsHigherThan(installer_version.get())) { |
290 LOG(ERROR) << "Higher version is already installed."; | 279 LOG(ERROR) << "Higher version is already installed."; |
291 install_status = installer_util::HIGHER_VERSION_EXISTS; | 280 install_status = installer_util::HIGHER_VERSION_EXISTS; |
292 InstallUtil::WriteInstallerResult(system_level, install_status, | 281 InstallUtil::WriteInstallerResult(system_level, install_status, |
293 IDS_INSTALL_HIGHER_VERSION_BASE, | 282 IDS_INSTALL_HIGHER_VERSION_BASE, |
294 NULL); | 283 NULL); |
295 } else { | 284 } else { |
296 // We want to keep uncompressed archive (chrome.7z) that we get after | 285 // We want to keep uncompressed archive (chrome.7z) that we get after |
297 // uncompressing and binary patching. Get the location for this file. | 286 // uncompressing and binary patching. Get the location for this file. |
298 std::wstring archive_to_copy(temp_path.ToWStringHack()); | 287 std::wstring archive_to_copy(temp_path.ToWStringHack()); |
299 std::wstring archive_name; | 288 file_util::AppendToPath(&archive_to_copy, installer::kChromeArchive); |
300 if (InstallUtil::IsChromeFrameProcess()) { | |
301 archive_name = installer::kChromeFrameArchive; | |
302 } else { | |
303 archive_name = installer::kChromeArchive; | |
304 } | |
305 file_util::AppendToPath(&archive_to_copy, archive_name); | |
306 std::wstring prefs_source_path = cmd_line.GetSwitchValue( | 289 std::wstring prefs_source_path = cmd_line.GetSwitchValue( |
307 installer_util::switches::kInstallerData); | 290 installer_util::switches::kInstallerData); |
308 install_status = installer::InstallOrUpdateChrome( | 291 install_status = installer::InstallOrUpdateChrome( |
309 cmd_line.program(), archive_to_copy, temp_path.ToWStringHack(), | 292 cmd_line.program(), archive_to_copy, temp_path.ToWStringHack(), |
310 prefs_source_path, prefs, *installer_version, installed_version); | 293 prefs_source_path, prefs, *installer_version, installed_version); |
311 | 294 |
312 int install_msg_base = IDS_INSTALL_FAILED_BASE; | 295 int install_msg_base = IDS_INSTALL_FAILED_BASE; |
313 std::wstring chrome_exe; | 296 std::wstring chrome_exe; |
314 if (install_status == installer_util::SAME_VERSION_REPAIR_FAILED) { | 297 if (install_status == installer_util::SAME_VERSION_REPAIR_FAILED) { |
315 install_msg_base = IDS_SAME_VERSION_REPAIR_FAILED_BASE; | 298 install_msg_base = IDS_SAME_VERSION_REPAIR_FAILED_BASE; |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 bool initialized_; | 592 bool initialized_; |
610 }; | 593 }; |
611 | 594 |
612 } // namespace | 595 } // namespace |
613 | 596 |
614 int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prev_instance, | 597 int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prev_instance, |
615 wchar_t* command_line, int show_command) { | 598 wchar_t* command_line, int show_command) { |
616 // The exit manager is in charge of calling the dtors of singletons. | 599 // The exit manager is in charge of calling the dtors of singletons. |
617 base::AtExitManager exit_manager; | 600 base::AtExitManager exit_manager; |
618 CommandLine::Init(0, NULL); | 601 CommandLine::Init(0, NULL); |
| 602 CommandLine* mutable_command_line = CommandLine::ForCurrentProcess(); |
| 603 |
| 604 if (mutable_command_line->HasSwitch(installer_util::switches::kChromeFrame)) { |
| 605 mutable_command_line->AppendSwitch( |
| 606 WideToASCII(installer_util::switches::kDoNotCreateShortcuts)); |
| 607 mutable_command_line->AppendSwitch( |
| 608 WideToASCII(installer_util::switches::kDoNotLaunchChrome)); |
| 609 mutable_command_line->AppendSwitch( |
| 610 WideToASCII(installer_util::switches::kDoNotRegisterForUpdateLaunch)); |
| 611 } |
| 612 |
619 const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess(); | 613 const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess(); |
| 614 |
620 installer::InitInstallerLogging(parsed_command_line); | 615 installer::InitInstallerLogging(parsed_command_line); |
621 scoped_ptr<DictionaryValue> prefs(installer_util::GetInstallPreferences( | 616 scoped_ptr<DictionaryValue> prefs(installer_util::GetInstallPreferences( |
622 parsed_command_line)); | 617 parsed_command_line)); |
623 bool value = false; | 618 bool value = false; |
624 if (installer_util::GetDistroBooleanPreference(prefs.get(), | 619 if (installer_util::GetDistroBooleanPreference(prefs.get(), |
625 installer_util::master_preferences::kVerboseLogging, &value) && | 620 installer_util::master_preferences::kVerboseLogging, &value) && |
626 value) | 621 value) |
627 logging::SetMinLogLevel(logging::LOG_INFO); | 622 logging::SetMinLogLevel(logging::LOG_INFO); |
628 | 623 |
629 LOG(INFO) << "Command Line: " << parsed_command_line.command_line_string(); | 624 LOG(INFO) << "Command Line: " << parsed_command_line.command_line_string(); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
741 parsed_command_line.HasSwitch(installer_util::switches::kUninstall))) { | 736 parsed_command_line.HasSwitch(installer_util::switches::kUninstall))) { |
742 // Note that we allow the status installer_util::UNINSTALL_REQUIRES_REBOOT | 737 // Note that we allow the status installer_util::UNINSTALL_REQUIRES_REBOOT |
743 // to pass through, since this is only returned on uninstall which is never | 738 // to pass through, since this is only returned on uninstall which is never |
744 // invoked directly by Google Update. | 739 // invoked directly by Google Update. |
745 return_code = dist->GetInstallReturnCode(install_status); | 740 return_code = dist->GetInstallReturnCode(install_status); |
746 } | 741 } |
747 | 742 |
748 LOG(INFO) << "Installation complete, returning: " << return_code; | 743 LOG(INFO) << "Installation complete, returning: " << return_code; |
749 return return_code; | 744 return return_code; |
750 } | 745 } |
OLD | NEW |