| 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 "chrome/installer/setup/install.h" | 5 #include "chrome/installer/setup/install.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 #include <shlobj.h> | 8 #include <shlobj.h> |
| 9 #include <time.h> | 9 #include <time.h> |
| 10 | 10 |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 ShellUtil::ShellChange shortcut_level = installer_state.system_install() ? | 251 ShellUtil::ShellChange shortcut_level = installer_state.system_install() ? |
| 252 ShellUtil::SYSTEM_LEVEL : ShellUtil::CURRENT_USER; | 252 ShellUtil::SYSTEM_LEVEL : ShellUtil::CURRENT_USER; |
| 253 base::FilePath uninstall_shortcut_path; | 253 base::FilePath uninstall_shortcut_path; |
| 254 ShellUtil::GetShortcutPath(ShellUtil::SHORTCUT_LOCATION_START_MENU_CHROME_DIR, | 254 ShellUtil::GetShortcutPath(ShellUtil::SHORTCUT_LOCATION_START_MENU_CHROME_DIR, |
| 255 dist, shortcut_level, &uninstall_shortcut_path); | 255 dist, shortcut_level, &uninstall_shortcut_path); |
| 256 uninstall_shortcut_path = uninstall_shortcut_path.Append( | 256 uninstall_shortcut_path = uninstall_shortcut_path.Append( |
| 257 dist->GetUninstallLinkName() + installer::kLnkExt); | 257 dist->GetUninstallLinkName() + installer::kLnkExt); |
| 258 base::DeleteFile(uninstall_shortcut_path, false); | 258 base::DeleteFile(uninstall_shortcut_path, false); |
| 259 } | 259 } |
| 260 | 260 |
| 261 // Returns the appropriate shortcut operations for App Launcher, | |
| 262 // based on state of installation and master_preferences. | |
| 263 installer::InstallShortcutOperation GetAppLauncherShortcutOperation( | |
| 264 const installer::InstallationState& original_state, | |
| 265 const installer::InstallerState& installer_state) { | |
| 266 const installer::ProductState* original_app_host_state = | |
| 267 original_state.GetProductState(installer_state.system_install(), | |
| 268 BrowserDistribution::CHROME_APP_HOST); | |
| 269 bool app_launcher_exists = original_app_host_state && | |
| 270 original_app_host_state->uninstall_command() | |
| 271 .HasSwitch(installer::switches::kChromeAppLauncher); | |
| 272 if (!app_launcher_exists) | |
| 273 return installer::INSTALL_SHORTCUT_CREATE_ALL; | |
| 274 | |
| 275 return installer::INSTALL_SHORTCUT_REPLACE_EXISTING; | |
| 276 } | |
| 277 | |
| 278 } // end namespace | 261 } // end namespace |
| 279 | 262 |
| 280 namespace installer { | 263 namespace installer { |
| 281 | 264 |
| 282 void EscapeXmlAttributeValueInSingleQuotes(base::string16* att_value) { | 265 void EscapeXmlAttributeValueInSingleQuotes(base::string16* att_value) { |
| 283 base::ReplaceChars(*att_value, base::ASCIIToUTF16("&"), | 266 base::ReplaceChars(*att_value, base::ASCIIToUTF16("&"), |
| 284 base::ASCIIToUTF16("&"), att_value); | 267 base::ASCIIToUTF16("&"), att_value); |
| 285 base::ReplaceChars(*att_value, base::ASCIIToUTF16("'"), | 268 base::ReplaceChars(*att_value, base::ASCIIToUTF16("'"), |
| 286 base::ASCIIToUTF16("'"), att_value); | 269 base::ASCIIToUTF16("'"), att_value); |
| 287 base::ReplaceChars(*att_value, base::ASCIIToUTF16("<"), | 270 base::ReplaceChars(*att_value, base::ASCIIToUTF16("<"), |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 // installed and for the binaries in case of multi-install. | 505 // installed and for the binaries in case of multi-install. |
| 523 installer_state.UpdateChannels(); | 506 installer_state.UpdateChannels(); |
| 524 | 507 |
| 525 installer_state.UpdateStage(installer::COPYING_PREFERENCES_FILE); | 508 installer_state.UpdateStage(installer::COPYING_PREFERENCES_FILE); |
| 526 | 509 |
| 527 if (result == FIRST_INSTALL_SUCCESS && !prefs_path.empty()) | 510 if (result == FIRST_INSTALL_SUCCESS && !prefs_path.empty()) |
| 528 CopyPreferenceFileForFirstRun(installer_state, prefs_path); | 511 CopyPreferenceFileForFirstRun(installer_state, prefs_path); |
| 529 | 512 |
| 530 installer_state.UpdateStage(installer::CREATING_SHORTCUTS); | 513 installer_state.UpdateStage(installer::CREATING_SHORTCUTS); |
| 531 | 514 |
| 532 const installer::Product* app_launcher_product = | |
| 533 installer_state.FindProduct(BrowserDistribution::CHROME_APP_HOST); | |
| 534 // Creates shortcuts for App Launcher. | |
| 535 if (app_launcher_product) { | |
| 536 // TODO(huangs): Remove this check once we have system-level App Host. | |
| 537 DCHECK(!installer_state.system_install()); | |
| 538 const base::FilePath app_host_exe( | |
| 539 installer_state.target_path().Append(kChromeAppHostExe)); | |
| 540 InstallShortcutOperation app_launcher_shortcut_operation = | |
| 541 GetAppLauncherShortcutOperation(original_state, installer_state); | |
| 542 | |
| 543 // Always install per-user shortcuts for App Launcher. | |
| 544 CreateOrUpdateShortcuts(app_host_exe, *app_launcher_product, prefs, | |
| 545 CURRENT_USER, app_launcher_shortcut_operation); | |
| 546 } | |
| 547 | |
| 548 const installer::Product* chrome_product = | 515 const installer::Product* chrome_product = |
| 549 installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER); | 516 installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER); |
| 550 // Creates shortcuts for Chrome. | 517 // Creates shortcuts for Chrome. |
| 551 if (chrome_product) { | 518 if (chrome_product) { |
| 552 BrowserDistribution* chrome_dist = chrome_product->distribution(); | 519 BrowserDistribution* chrome_dist = chrome_product->distribution(); |
| 553 const base::FilePath chrome_exe( | 520 const base::FilePath chrome_exe( |
| 554 installer_state.target_path().Append(kChromeExe)); | 521 installer_state.target_path().Append(kChromeExe)); |
| 555 CleanupLegacyShortcuts(installer_state, chrome_dist, chrome_exe); | 522 CleanupLegacyShortcuts(installer_state, chrome_dist, chrome_exe); |
| 556 | 523 |
| 557 // Install per-user shortcuts on user-level installs and all-users | 524 // Install per-user shortcuts on user-level installs and all-users |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 672 INSTALL_SHORTCUT_CREATE_EACH_IF_NO_SYSTEM_LEVEL); | 639 INSTALL_SHORTCUT_CREATE_EACH_IF_NO_SYSTEM_LEVEL); |
| 673 | 640 |
| 674 // Read master_preferences copied beside chrome.exe at install. | 641 // Read master_preferences copied beside chrome.exe at install. |
| 675 MasterPreferences prefs(installation_root.AppendASCII(kDefaultMasterPrefs)); | 642 MasterPreferences prefs(installation_root.AppendASCII(kDefaultMasterPrefs)); |
| 676 base::FilePath chrome_exe(installation_root.Append(kChromeExe)); | 643 base::FilePath chrome_exe(installation_root.Append(kChromeExe)); |
| 677 CreateOrUpdateShortcuts( | 644 CreateOrUpdateShortcuts( |
| 678 chrome_exe, chrome, prefs, CURRENT_USER, install_operation); | 645 chrome_exe, chrome, prefs, CURRENT_USER, install_operation); |
| 679 } | 646 } |
| 680 | 647 |
| 681 } // namespace installer | 648 } // namespace installer |
| OLD | NEW |