Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: chrome/installer/setup/install_worker.cc

Issue 15255004: Refactor of BrowserDistribution. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rework Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 // This file contains the definitions of the installer functions that build 5 // This file contains the definitions of the installer functions that build
6 // the WorkItemList used to install the application. 6 // the WorkItemList used to install the application.
7 7
8 #include "chrome/installer/setup/install_worker.h" 8 #include "chrome/installer/setup/install_worker.h"
9 9
10 #include <oaidl.h> 10 #include <oaidl.h>
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 if (installer_state.system_install()) { 431 if (installer_state.system_install()) {
432 PathService::Get(base::DIR_COMMON_START_MENU, &uninstall_link); 432 PathService::Get(base::DIR_COMMON_START_MENU, &uninstall_link);
433 } else { 433 } else {
434 PathService::Get(base::DIR_START_MENU, &uninstall_link); 434 PathService::Get(base::DIR_START_MENU, &uninstall_link);
435 } 435 }
436 436
437 if (uninstall_link.empty()) { 437 if (uninstall_link.empty()) {
438 LOG(ERROR) << "Failed to get location for shortcut."; 438 LOG(ERROR) << "Failed to get location for shortcut.";
439 } else { 439 } else {
440 uninstall_link = uninstall_link.Append( 440 uninstall_link = uninstall_link.Append(
441 product.distribution()->GetAppShortCutName()); 441 product.distribution()->GetStartMenuShortcutSubfolder(
442 BrowserDistribution::SUBFOLDER_CHROME));
442 uninstall_link = uninstall_link.Append( 443 uninstall_link = uninstall_link.Append(
443 product.distribution()->GetUninstallLinkName() + installer::kLnkExt); 444 product.distribution()->GetUninstallLinkName() + installer::kLnkExt);
444 VLOG(1) << "Deleting old uninstall shortcut (if present): " 445 VLOG(1) << "Deleting old uninstall shortcut (if present): "
445 << uninstall_link.value(); 446 << uninstall_link.value();
446 WorkItem* delete_link = work_item_list->AddDeleteTreeWorkItem( 447 WorkItem* delete_link = work_item_list->AddDeleteTreeWorkItem(
447 uninstall_link, temp_path); 448 uninstall_link, temp_path);
448 delete_link->set_ignore_failure(true); 449 delete_link->set_ignore_failure(true);
449 delete_link->set_log_message( 450 delete_link->set_log_message(
450 "Failed to delete old uninstall shortcut."); 451 "Failed to delete old uninstall shortcut.");
451 } 452 }
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 if (!installer_state.is_msi() && product.ShouldCreateUninstallEntry()) { 717 if (!installer_state.is_msi() && product.ShouldCreateUninstallEntry()) {
717 // We need to quote the command line for the Add/Remove Programs dialog. 718 // We need to quote the command line for the Add/Remove Programs dialog.
718 CommandLine quoted_uninstall_cmd(installer_path); 719 CommandLine quoted_uninstall_cmd(installer_path);
719 DCHECK_EQ(quoted_uninstall_cmd.GetCommandLineString()[0], '"'); 720 DCHECK_EQ(quoted_uninstall_cmd.GetCommandLineString()[0], '"');
720 quoted_uninstall_cmd.AppendArguments(uninstall_arguments, false); 721 quoted_uninstall_cmd.AppendArguments(uninstall_arguments, false);
721 722
722 string16 uninstall_reg = browser_dist->GetUninstallRegPath(); 723 string16 uninstall_reg = browser_dist->GetUninstallRegPath();
723 install_list->AddCreateRegKeyWorkItem(reg_root, uninstall_reg); 724 install_list->AddCreateRegKeyWorkItem(reg_root, uninstall_reg);
724 install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg, 725 install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg,
725 installer::kUninstallDisplayNameField, 726 installer::kUninstallDisplayNameField,
726 browser_dist->GetAppShortCutName(), true); 727 browser_dist->
728 GetShortcutInfo(BrowserDistribution::SHORTCUT_CHROME).name,
gab 2013/05/24 15:01:35 GetDisplayName()
calamity 2013/05/31 00:11:18 Done.
729 true);
727 install_list->AddSetRegValueWorkItem(reg_root, 730 install_list->AddSetRegValueWorkItem(reg_root,
728 uninstall_reg, installer::kUninstallStringField, 731 uninstall_reg, installer::kUninstallStringField,
729 quoted_uninstall_cmd.GetCommandLineString(), true); 732 quoted_uninstall_cmd.GetCommandLineString(), true);
730 install_list->AddSetRegValueWorkItem(reg_root, 733 install_list->AddSetRegValueWorkItem(reg_root,
731 uninstall_reg, 734 uninstall_reg,
732 L"InstallLocation", 735 L"InstallLocation",
733 install_path.value(), 736 install_path.value(),
734 true); 737 true);
735 738
736 BrowserDistribution* dist = product.distribution(); 739 BrowserDistribution* dist = product.distribution();
740 BrowserDistribution::ShortcutInfo shortcut_info =
741 dist->GetShortcutInfo(BrowserDistribution::SHORTCUT_CHROME);
737 string16 chrome_icon = ShellUtil::FormatIconLocation( 742 string16 chrome_icon = ShellUtil::FormatIconLocation(
738 install_path.Append(dist->GetIconFilename()).value(), 743 install_path.Append(shortcut_info.icon_file).value(),
739 dist->GetIconIndex()); 744 shortcut_info);
740 install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg, 745 install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg,
741 L"DisplayIcon", chrome_icon, true); 746 L"DisplayIcon", chrome_icon, true);
742 install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg, 747 install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg,
743 L"NoModify", static_cast<DWORD>(1), 748 L"NoModify", static_cast<DWORD>(1),
744 true); 749 true);
745 install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg, 750 install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg,
746 L"NoRepair", static_cast<DWORD>(1), 751 L"NoRepair", static_cast<DWORD>(1),
747 true); 752 true);
748 753
749 install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg, 754 install_list->AddSetRegValueWorkItem(reg_root, uninstall_reg,
(...skipping 29 matching lines...) Expand all
779 void AddVersionKeyWorkItems(HKEY root, 784 void AddVersionKeyWorkItems(HKEY root,
780 BrowserDistribution* dist, 785 BrowserDistribution* dist,
781 const Version& new_version, 786 const Version& new_version,
782 bool add_language_identifier, 787 bool add_language_identifier,
783 WorkItemList* list) { 788 WorkItemList* list) {
784 // Create Version key for each distribution (if not already present) and set 789 // Create Version key for each distribution (if not already present) and set
785 // the new product version as the last step. 790 // the new product version as the last step.
786 string16 version_key(dist->GetVersionKey()); 791 string16 version_key(dist->GetVersionKey());
787 list->AddCreateRegKeyWorkItem(root, version_key); 792 list->AddCreateRegKeyWorkItem(root, version_key);
788 793
789 string16 product_name(dist->GetAppShortCutName()); 794 string16 product_name(
795 dist->GetShortcutInfo(BrowserDistribution::SHORTCUT_CHROME).name);
gab 2013/05/24 15:01:35 GetDisplayName()
calamity 2013/05/31 00:11:18 Done.
790 list->AddSetRegValueWorkItem(root, version_key, google_update::kRegNameField, 796 list->AddSetRegValueWorkItem(root, version_key, google_update::kRegNameField,
791 product_name, true); // overwrite name also 797 product_name, true); // overwrite name also
792 list->AddSetRegValueWorkItem(root, version_key, 798 list->AddSetRegValueWorkItem(root, version_key,
793 google_update::kRegOopcrashesField, 799 google_update::kRegOopcrashesField,
794 static_cast<DWORD>(1), 800 static_cast<DWORD>(1),
795 false); // set during first install 801 false); // set during first install
796 if (add_language_identifier) { 802 if (add_language_identifier) {
797 // Write the language identifier of the current translation. Omaha's set of 803 // Write the language identifier of the current translation. Omaha's set of
798 // languages is a superset of Chrome's set of translations with this one 804 // languages is a superset of Chrome's set of translations with this one
799 // exception: what Chrome calls "en-us", Omaha calls "en". sigh. 805 // exception: what Chrome calls "en-us", Omaha calls "en". sigh.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 LOG(ERROR) << "No products found in AddOemInstallWorkItems"; 844 LOG(ERROR) << "No products found in AddOemInstallWorkItems";
839 return; 845 return;
840 } 846 }
841 const ProductState* source_product = 847 const ProductState* source_product =
842 original_state.GetNonVersionedProductState(system_install, source_type); 848 original_state.GetNonVersionedProductState(system_install, source_type);
843 849
844 string16 oem_install; 850 string16 oem_install;
845 if (source_product->GetOemInstall(&oem_install)) { 851 if (source_product->GetOemInstall(&oem_install)) {
846 VLOG(1) << "Mirroring oeminstall=\"" << oem_install << "\" from " 852 VLOG(1) << "Mirroring oeminstall=\"" << oem_install << "\" from "
847 << BrowserDistribution::GetSpecificDistribution(source_type)-> 853 << BrowserDistribution::GetSpecificDistribution(source_type)->
848 GetAppShortCutName(); 854 GetDisplayName();
gab 2013/05/24 15:01:35 Indent 1 more space
calamity 2013/05/31 00:11:18 Done.
849 install_list->AddCreateRegKeyWorkItem(root_key, multi_key); 855 install_list->AddCreateRegKeyWorkItem(root_key, multi_key);
850 // Always overwrite an old value. 856 // Always overwrite an old value.
851 install_list->AddSetRegValueWorkItem(root_key, multi_key, 857 install_list->AddSetRegValueWorkItem(root_key, multi_key,
852 google_update::kRegOemInstallField, 858 google_update::kRegOemInstallField,
853 oem_install, true); 859 oem_install, true);
854 } else { 860 } else {
855 // Clear any old value. 861 // Clear any old value.
856 install_list->AddDeleteRegValueWorkItem( 862 install_list->AddDeleteRegValueWorkItem(
857 root_key, multi_key, google_update::kRegOemInstallField); 863 root_key, multi_key, google_update::kRegOemInstallField);
858 } 864 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 (!have_eula_accepted || dword_value > eula_accepted)) { 899 (!have_eula_accepted || dword_value > eula_accepted)) {
894 have_eula_accepted = true; 900 have_eula_accepted = true;
895 eula_accepted = dword_value; 901 eula_accepted = dword_value;
896 product_type = this_type; 902 product_type = this_type;
897 } 903 }
898 } 904 }
899 905
900 if (have_eula_accepted) { 906 if (have_eula_accepted) {
901 VLOG(1) << "Mirroring eulaaccepted=" << eula_accepted << " from " 907 VLOG(1) << "Mirroring eulaaccepted=" << eula_accepted << " from "
902 << BrowserDistribution::GetSpecificDistribution(product_type)-> 908 << BrowserDistribution::GetSpecificDistribution(product_type)->
903 GetAppShortCutName(); 909 GetDisplayName();
904 install_list->AddCreateRegKeyWorkItem(root_key, multi_key); 910 install_list->AddCreateRegKeyWorkItem(root_key, multi_key);
905 install_list->AddSetRegValueWorkItem( 911 install_list->AddSetRegValueWorkItem(
906 root_key, multi_key, google_update::kRegEULAAceptedField, 912 root_key, multi_key, google_update::kRegEULAAceptedField,
907 eula_accepted, true); 913 eula_accepted, true);
908 } else { 914 } else {
909 // Clear any old value. 915 // Clear any old value.
910 install_list->AddDeleteRegValueWorkItem( 916 install_list->AddDeleteRegValueWorkItem(
911 root_key, multi_key, google_update::kRegEULAAceptedField); 917 root_key, multi_key, google_update::kRegEULAAceptedField);
912 } 918 }
913 } 919 }
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
1432 const Version& new_version, 1438 const Version& new_version,
1433 const Product& product, 1439 const Product& product,
1434 WorkItemList* list) { 1440 WorkItemList* list) {
1435 string16 handler_class_uuid; 1441 string16 handler_class_uuid;
1436 BrowserDistribution* distribution = product.distribution(); 1442 BrowserDistribution* distribution = product.distribution();
1437 if (!distribution->GetCommandExecuteImplClsid(&handler_class_uuid)) { 1443 if (!distribution->GetCommandExecuteImplClsid(&handler_class_uuid)) {
1438 if (InstallUtil::IsChromeSxSProcess()) { 1444 if (InstallUtil::IsChromeSxSProcess()) {
1439 CleanupBadCanaryDelegateExecuteRegistration(target_path, list); 1445 CleanupBadCanaryDelegateExecuteRegistration(target_path, list);
1440 } else { 1446 } else {
1441 VLOG(1) << "No DelegateExecute verb handler processing to do for " 1447 VLOG(1) << "No DelegateExecute verb handler processing to do for "
1442 << distribution->GetAppShortCutName(); 1448 << distribution->GetDisplayName();
1443 } 1449 }
1444 return; 1450 return;
1445 } 1451 }
1446 1452
1447 HKEY root = installer_state.root_key(); 1453 HKEY root = installer_state.root_key();
1448 string16 delegate_execute_path(L"Software\\Classes\\CLSID\\"); 1454 string16 delegate_execute_path(L"Software\\Classes\\CLSID\\");
1449 delegate_execute_path.append(handler_class_uuid); 1455 delegate_execute_path.append(handler_class_uuid);
1450 1456
1451 // Unconditionally remove registration regardless of whether or not it is 1457 // Unconditionally remove registration regardless of whether or not it is
1452 // needed since builds after r132190 included it when it wasn't strictly 1458 // needed since builds after r132190 included it when it wasn't strictly
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1494 const Version& new_version, 1500 const Version& new_version,
1495 const Product& product, 1501 const Product& product,
1496 WorkItemList* list) { 1502 WorkItemList* list) {
1497 DCHECK(installer_state.operation() != InstallerState::UNINSTALL); 1503 DCHECK(installer_state.operation() != InstallerState::UNINSTALL);
1498 BrowserDistribution* distribution = product.distribution(); 1504 BrowserDistribution* distribution = product.distribution();
1499 1505
1500 if (!product.is_chrome() || !installer_state.system_install()) { 1506 if (!product.is_chrome() || !installer_state.system_install()) {
1501 const char* install_level = 1507 const char* install_level =
1502 installer_state.system_install() ? "system" : "user"; 1508 installer_state.system_install() ? "system" : "user";
1503 VLOG(1) << "No Active Setup processing to do for " << install_level 1509 VLOG(1) << "No Active Setup processing to do for " << install_level
1504 << "-level " << distribution->GetAppShortCutName(); 1510 << "-level " << distribution->GetDisplayName();
1505 return; 1511 return;
1506 } 1512 }
1507 DCHECK(installer_state.RequiresActiveSetup()); 1513 DCHECK(installer_state.RequiresActiveSetup());
1508 1514
1509 const HKEY root = HKEY_LOCAL_MACHINE; 1515 const HKEY root = HKEY_LOCAL_MACHINE;
1510 const string16 active_setup_path( 1516 const string16 active_setup_path(
1511 InstallUtil::GetActiveSetupPath(distribution)); 1517 InstallUtil::GetActiveSetupPath(distribution));
1512 1518
1513 VLOG(1) << "Adding registration items for Active Setup."; 1519 VLOG(1) << "Adding registration items for Active Setup.";
1514 list->AddCreateRegKeyWorkItem(root, active_setup_path); 1520 list->AddCreateRegKeyWorkItem(root, active_setup_path);
1515 list->AddSetRegValueWorkItem(root, active_setup_path, L"", 1521 list->AddSetRegValueWorkItem(root, active_setup_path, L"",
1516 distribution->GetAppShortCutName(), true); 1522 distribution->GetDisplayName(), true);
1517 1523
1518 base::FilePath active_setup_exe(installer_state.GetInstallerDirectory( 1524 base::FilePath active_setup_exe(installer_state.GetInstallerDirectory(
1519 new_version).Append(kActiveSetupExe)); 1525 new_version).Append(kActiveSetupExe));
1520 CommandLine cmd(active_setup_exe); 1526 CommandLine cmd(active_setup_exe);
1521 cmd.AppendSwitch(installer::switches::kConfigureUserSettings); 1527 cmd.AppendSwitch(installer::switches::kConfigureUserSettings);
1522 cmd.AppendSwitch(installer::switches::kVerboseLogging); 1528 cmd.AppendSwitch(installer::switches::kVerboseLogging);
1523 cmd.AppendSwitch(installer::switches::kSystemLevel); 1529 cmd.AppendSwitch(installer::switches::kSystemLevel);
1524 product.AppendProductFlags(&cmd); 1530 product.AppendProductFlags(&cmd);
1525 list->AddSetRegValueWorkItem(root, active_setup_path, L"StubPath", 1531 list->AddSetRegValueWorkItem(root, active_setup_path, L"StubPath",
1526 cmd.GetCommandLineString(), true); 1532 cmd.GetCommandLineString(), true);
1527 1533
1528 // TODO(grt): http://crbug.com/75152 Write a reference to a localized 1534 // TODO(grt): http://crbug.com/75152 Write a reference to a localized
1529 // resource. 1535 // resource.
1530 list->AddSetRegValueWorkItem(root, active_setup_path, L"Localized Name", 1536 list->AddSetRegValueWorkItem(root, active_setup_path, L"Localized Name",
1531 distribution->GetAppShortCutName(), true); 1537 distribution->GetDisplayName(), true);
1532 1538
1533 list->AddSetRegValueWorkItem(root, active_setup_path, L"IsInstalled", 1539 list->AddSetRegValueWorkItem(root, active_setup_path, L"IsInstalled",
1534 static_cast<DWORD>(1U), true); 1540 static_cast<DWORD>(1U), true);
1535 1541
1536 list->AddSetRegValueWorkItem(root, active_setup_path, L"Version", 1542 list->AddSetRegValueWorkItem(root, active_setup_path, L"Version",
1537 kActiveSetupVersion, true); 1543 kActiveSetupVersion, true);
1538 } 1544 }
1539 1545
1540 void AddDeleteOldIELowRightsPolicyWorkItems( 1546 void AddDeleteOldIELowRightsPolicyWorkItems(
1541 const InstallerState& installer_state, 1547 const InstallerState& installer_state,
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1712 if (installer_state.system_install()) 1718 if (installer_state.system_install())
1713 cmd_line.AppendSwitch(switches::kSystemLevel); 1719 cmd_line.AppendSwitch(switches::kSystemLevel);
1714 AppCommand cmd(cmd_line.GetCommandLineString()); 1720 AppCommand cmd(cmd_line.GetCommandLineString());
1715 cmd.set_sends_pings(true); 1721 cmd.set_sends_pings(true);
1716 cmd.set_is_web_accessible(true); 1722 cmd.set_is_web_accessible(true);
1717 cmd.AddWorkItems(installer_state.root_key(), cmd_key, work_item_list); 1723 cmd.AddWorkItems(installer_state.root_key(), cmd_key, work_item_list);
1718 } 1724 }
1719 } 1725 }
1720 1726
1721 } // namespace installer 1727 } // namespace installer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698