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

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

Issue 300593002: Make omaha, gcapi and uninstall registry accesses use Wow6432Node on 64-bit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move the uninstall registry access to 32-bit Created 6 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 | Annotate | Revision Log
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 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 DCHECK(app); 209 DCHECK(app);
210 DCHECK(command_with_parameter); 210 DCHECK(command_with_parameter);
211 DCHECK(work_item_list); 211 DCHECK(work_item_list);
212 212
213 base::string16 full_cmd_key( 213 base::string16 full_cmd_key(
214 GetRegCommandKey(product.distribution(), command_key)); 214 GetRegCommandKey(product.distribution(), command_key));
215 215
216 if (installer_state.operation() == InstallerState::UNINSTALL) { 216 if (installer_state.operation() == InstallerState::UNINSTALL) {
217 work_item_list->AddDeleteRegKeyWorkItem(installer_state.root_key(), 217 work_item_list->AddDeleteRegKeyWorkItem(installer_state.root_key(),
218 full_cmd_key, 218 full_cmd_key,
219 WorkItem::kWow64Default) 219 KEY_WOW64_32KEY)
220 ->set_log_message("removing " + base::UTF16ToASCII(command_key) + 220 ->set_log_message("removing " + base::UTF16ToASCII(command_key) +
221 " command"); 221 " command");
222 } else { 222 } else {
223 CommandLine cmd_line(installer_state.target_path().Append(app)); 223 CommandLine cmd_line(installer_state.target_path().Append(app));
224 cmd_line.AppendSwitchASCII(command_with_parameter, "%1"); 224 cmd_line.AppendSwitchASCII(command_with_parameter, "%1");
225 225
226 AppCommand cmd(cmd_line.GetCommandLineString()); 226 AppCommand cmd(cmd_line.GetCommandLineString());
227 cmd.set_sends_pings(true); 227 cmd.set_sends_pings(true);
228 cmd.set_is_web_accessible(true); 228 cmd.set_is_web_accessible(true);
229 cmd.set_is_run_as_user(true); 229 cmd.set_is_run_as_user(true);
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 const base::FilePath& temp_path, 435 const base::FilePath& temp_path,
436 WorkItemList* work_item_list) { 436 WorkItemList* work_item_list) {
437 DCHECK(installer_state.is_msi()) 437 DCHECK(installer_state.is_msi())
438 << "This must only be called for MSI installations!"; 438 << "This must only be called for MSI installations!";
439 439
440 // First attempt to delete the old installation's ARP dialog entry. 440 // First attempt to delete the old installation's ARP dialog entry.
441 HKEY reg_root = installer_state.root_key(); 441 HKEY reg_root = installer_state.root_key();
442 base::string16 uninstall_reg(product.distribution()->GetUninstallRegPath()); 442 base::string16 uninstall_reg(product.distribution()->GetUninstallRegPath());
443 443
444 WorkItem* delete_reg_key = work_item_list->AddDeleteRegKeyWorkItem( 444 WorkItem* delete_reg_key = work_item_list->AddDeleteRegKeyWorkItem(
445 reg_root, uninstall_reg, WorkItem::kWow64Default); 445 reg_root, uninstall_reg, KEY_WOW64_32KEY);
grt (UTC plus 2) 2014/05/27 16:42:08 as with my comment on line 734, i think this shoul
446 delete_reg_key->set_ignore_failure(true); 446 delete_reg_key->set_ignore_failure(true);
447 447
448 // Then attempt to delete the old installation's start menu shortcut. 448 // Then attempt to delete the old installation's start menu shortcut.
449 base::FilePath uninstall_link; 449 base::FilePath uninstall_link;
450 if (installer_state.system_install()) { 450 if (installer_state.system_install()) {
451 PathService::Get(base::DIR_COMMON_START_MENU, &uninstall_link); 451 PathService::Get(base::DIR_COMMON_START_MENU, &uninstall_link);
452 } else { 452 } else {
453 PathService::Get(base::DIR_START_MENU, &uninstall_link); 453 PathService::Get(base::DIR_START_MENU, &uninstall_link);
454 } 454 }
455 455
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 604
605 return true; 605 return true;
606 } 606 }
607 607
608 void AddUninstallDelegateExecuteWorkItems( 608 void AddUninstallDelegateExecuteWorkItems(
609 HKEY root, 609 HKEY root,
610 const base::string16& delegate_execute_path, 610 const base::string16& delegate_execute_path,
611 WorkItemList* list) { 611 WorkItemList* list) {
612 VLOG(1) << "Adding unregistration items for DelegateExecute verb handler in " 612 VLOG(1) << "Adding unregistration items for DelegateExecute verb handler in "
613 << root; 613 << root;
614 // Delete both 64 and 32 keys to clean up from previous installs which placed
615 // the delegate registration key in the wrong hive.
grt (UTC plus 2) 2014/05/27 16:42:08 "in the wrong hive" makes it sound like previous i
Will Harris 2014/05/27 19:25:10 Done.
616 // See http://crbug.com/348626.
614 list->AddDeleteRegKeyWorkItem(root, 617 list->AddDeleteRegKeyWorkItem(root,
615 delegate_execute_path, 618 delegate_execute_path,
616 WorkItem::kWow64Default); 619 KEY_WOW64_32KEY);
620
621 list->AddDeleteRegKeyWorkItem(root,
622 delegate_execute_path,
623 KEY_WOW64_64KEY);
624
617 625
618 // In the past, the ICommandExecuteImpl interface and a TypeLib were both 626 // In the past, the ICommandExecuteImpl interface and a TypeLib were both
619 // registered. Remove these since this operation may be updating a machine 627 // registered. Remove these since this operation may be updating a machine
620 // that had the old registrations. 628 // that had the old registrations.
621 list->AddDeleteRegKeyWorkItem(root, 629 list->AddDeleteRegKeyWorkItem(root,
622 L"Software\\Classes\\Interface\\" 630 L"Software\\Classes\\Interface\\"
623 L"{0BA0D4E9-2259-4963-B9AE-A839F7CB7544}", 631 L"{0BA0D4E9-2259-4963-B9AE-A839F7CB7544}",
624 WorkItem::kWow64Default); 632 WorkItem::kWow64Default);
grt (UTC plus 2) 2014/05/27 16:42:08 this and line 640 should both be KEY_WOW64_32KEY s
Will Harris 2014/05/27 19:25:10 Done.
625 list->AddDeleteRegKeyWorkItem(root, 633 list->AddDeleteRegKeyWorkItem(root,
626 L"Software\\Classes\\TypeLib\\" 634 L"Software\\Classes\\TypeLib\\"
627 #if defined(GOOGLE_CHROME_BUILD) 635 #if defined(GOOGLE_CHROME_BUILD)
628 L"{4E805ED8-EBA0-4601-9681-12815A56EBFD}", 636 L"{4E805ED8-EBA0-4601-9681-12815A56EBFD}",
629 #else 637 #else
630 L"{7779FB70-B399-454A-AA1A-BAA850032B10}", 638 L"{7779FB70-B399-454A-AA1A-BAA850032B10}",
631 #endif 639 #endif
632 WorkItem::kWow64Default); 640 WorkItem::kWow64Default);
633 } 641 }
634 642
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 base::FilePath installer_path( 700 base::FilePath installer_path(
693 installer_state.GetInstallerDirectory(new_version)); 701 installer_state.GetInstallerDirectory(new_version));
694 installer_path = installer_path.Append(setup_path.BaseName()); 702 installer_path = installer_path.Append(setup_path.BaseName());
695 703
696 CommandLine uninstall_arguments(CommandLine::NO_PROGRAM); 704 CommandLine uninstall_arguments(CommandLine::NO_PROGRAM);
697 AppendUninstallCommandLineFlags(installer_state, product, 705 AppendUninstallCommandLineFlags(installer_state, product,
698 &uninstall_arguments); 706 &uninstall_arguments);
699 707
700 base::string16 update_state_key(browser_dist->GetStateKey()); 708 base::string16 update_state_key(browser_dist->GetStateKey());
701 install_list->AddCreateRegKeyWorkItem( 709 install_list->AddCreateRegKeyWorkItem(
702 reg_root, update_state_key, WorkItem::kWow64Default); 710 reg_root, update_state_key, KEY_WOW64_32KEY);
703 install_list->AddSetRegValueWorkItem(reg_root, 711 install_list->AddSetRegValueWorkItem(reg_root,
704 update_state_key, 712 update_state_key,
705 WorkItem::kWow64Default, 713 KEY_WOW64_32KEY,
706 installer::kUninstallStringField, 714 installer::kUninstallStringField,
707 installer_path.value(), 715 installer_path.value(),
708 true); 716 true);
709 install_list->AddSetRegValueWorkItem( 717 install_list->AddSetRegValueWorkItem(
710 reg_root, 718 reg_root,
711 update_state_key, 719 update_state_key,
712 WorkItem::kWow64Default, 720 KEY_WOW64_32KEY,
713 installer::kUninstallArgumentsField, 721 installer::kUninstallArgumentsField,
714 uninstall_arguments.GetCommandLineString(), 722 uninstall_arguments.GetCommandLineString(),
715 true); 723 true);
716 724
717 // MSI installations will manage their own uninstall shortcuts. 725 // MSI installations will manage their own uninstall shortcuts.
718 if (!installer_state.is_msi() && product.ShouldCreateUninstallEntry()) { 726 if (!installer_state.is_msi() && product.ShouldCreateUninstallEntry()) {
719 // We need to quote the command line for the Add/Remove Programs dialog. 727 // We need to quote the command line for the Add/Remove Programs dialog.
720 CommandLine quoted_uninstall_cmd(installer_path); 728 CommandLine quoted_uninstall_cmd(installer_path);
721 DCHECK_EQ(quoted_uninstall_cmd.GetCommandLineString()[0], '"'); 729 DCHECK_EQ(quoted_uninstall_cmd.GetCommandLineString()[0], '"');
722 quoted_uninstall_cmd.AppendArguments(uninstall_arguments, false); 730 quoted_uninstall_cmd.AppendArguments(uninstall_arguments, false);
723 731
724 base::string16 uninstall_reg = browser_dist->GetUninstallRegPath(); 732 base::string16 uninstall_reg = browser_dist->GetUninstallRegPath();
725 install_list->AddCreateRegKeyWorkItem( 733 install_list->AddCreateRegKeyWorkItem(
726 reg_root, uninstall_reg, WorkItem::kWow64Default); 734 reg_root, uninstall_reg, KEY_WOW64_32KEY);
grt (UTC plus 2) 2014/05/27 16:42:08 why force the add/remove control panel data into t
Will Harris 2014/05/27 19:25:10 as discussed, while we're leaving Chrome in C:\Pro
grt (UTC plus 2) 2014/05/27 22:06:19 SGTM
727 install_list->AddSetRegValueWorkItem(reg_root, 735 install_list->AddSetRegValueWorkItem(reg_root,
728 uninstall_reg, 736 uninstall_reg,
729 WorkItem::kWow64Default, 737 KEY_WOW64_32KEY,
730 installer::kUninstallDisplayNameField, 738 installer::kUninstallDisplayNameField,
731 browser_dist->GetDisplayName(), 739 browser_dist->GetDisplayName(),
732 true); 740 true);
733 install_list->AddSetRegValueWorkItem( 741 install_list->AddSetRegValueWorkItem(
734 reg_root, 742 reg_root,
735 uninstall_reg, 743 uninstall_reg,
736 WorkItem::kWow64Default, 744 KEY_WOW64_32KEY,
737 installer::kUninstallStringField, 745 installer::kUninstallStringField,
738 quoted_uninstall_cmd.GetCommandLineString(), 746 quoted_uninstall_cmd.GetCommandLineString(),
739 true); 747 true);
740 install_list->AddSetRegValueWorkItem(reg_root, 748 install_list->AddSetRegValueWorkItem(reg_root,
741 uninstall_reg, 749 uninstall_reg,
742 WorkItem::kWow64Default, 750 KEY_WOW64_32KEY,
743 L"InstallLocation", 751 L"InstallLocation",
744 install_path.value(), 752 install_path.value(),
745 true); 753 true);
746 754
747 BrowserDistribution* dist = product.distribution(); 755 BrowserDistribution* dist = product.distribution();
748 base::string16 chrome_icon = ShellUtil::FormatIconLocation( 756 base::string16 chrome_icon = ShellUtil::FormatIconLocation(
749 install_path.Append(dist->GetIconFilename()).value(), 757 install_path.Append(dist->GetIconFilename()).value(),
750 dist->GetIconIndex(BrowserDistribution::SHORTCUT_CHROME)); 758 dist->GetIconIndex(BrowserDistribution::SHORTCUT_CHROME));
751 install_list->AddSetRegValueWorkItem(reg_root, 759 install_list->AddSetRegValueWorkItem(reg_root,
752 uninstall_reg, 760 uninstall_reg,
753 WorkItem::kWow64Default, 761 KEY_WOW64_32KEY,
754 L"DisplayIcon", 762 L"DisplayIcon",
755 chrome_icon, 763 chrome_icon,
756 true); 764 true);
757 install_list->AddSetRegValueWorkItem(reg_root, 765 install_list->AddSetRegValueWorkItem(reg_root,
758 uninstall_reg, 766 uninstall_reg,
759 WorkItem::kWow64Default, 767 KEY_WOW64_32KEY,
760 L"NoModify", 768 L"NoModify",
761 static_cast<DWORD>(1), 769 static_cast<DWORD>(1),
762 true); 770 true);
763 install_list->AddSetRegValueWorkItem(reg_root, 771 install_list->AddSetRegValueWorkItem(reg_root,
764 uninstall_reg, 772 uninstall_reg,
765 WorkItem::kWow64Default, 773 KEY_WOW64_32KEY,
766 L"NoRepair", 774 L"NoRepair",
767 static_cast<DWORD>(1), 775 static_cast<DWORD>(1),
768 true); 776 true);
769 777
770 install_list->AddSetRegValueWorkItem(reg_root, 778 install_list->AddSetRegValueWorkItem(reg_root,
771 uninstall_reg, 779 uninstall_reg,
772 WorkItem::kWow64Default, 780 KEY_WOW64_32KEY,
773 L"Publisher", 781 L"Publisher",
774 browser_dist->GetPublisherName(), 782 browser_dist->GetPublisherName(),
775 true); 783 true);
776 install_list->AddSetRegValueWorkItem(reg_root, 784 install_list->AddSetRegValueWorkItem(reg_root,
777 uninstall_reg, 785 uninstall_reg,
778 WorkItem::kWow64Default, 786 KEY_WOW64_32KEY,
779 L"Version", 787 L"Version",
780 ASCIIToWide(new_version.GetString()), 788 ASCIIToWide(new_version.GetString()),
781 true); 789 true);
782 install_list->AddSetRegValueWorkItem(reg_root, 790 install_list->AddSetRegValueWorkItem(reg_root,
783 uninstall_reg, 791 uninstall_reg,
784 WorkItem::kWow64Default, 792 KEY_WOW64_32KEY,
785 L"DisplayVersion", 793 L"DisplayVersion",
786 ASCIIToWide(new_version.GetString()), 794 ASCIIToWide(new_version.GetString()),
787 true); 795 true);
788 install_list->AddSetRegValueWorkItem(reg_root, 796 install_list->AddSetRegValueWorkItem(reg_root,
789 uninstall_reg, 797 uninstall_reg,
790 WorkItem::kWow64Default, 798 KEY_WOW64_32KEY,
791 L"InstallDate", 799 L"InstallDate",
792 InstallUtil::GetCurrentDate(), 800 InstallUtil::GetCurrentDate(),
793 false); 801 false);
grt (UTC plus 2) 2014/05/27 16:42:08 it'd be nice to preserve the InstallDate when migr
Will Harris 2014/05/27 19:25:10 pretty sure this code does preserve, since it's on
grt (UTC plus 2) 2014/05/27 22:06:19 i was referring to the (future) case where the uni
Will Harris 2014/05/27 22:29:28 Put a TODO so I don't forget to do this.
794 802
795 const std::vector<uint16>& version_components = new_version.components(); 803 const std::vector<uint16>& version_components = new_version.components();
796 if (version_components.size() == 4) { 804 if (version_components.size() == 4) {
797 // Our version should be in major.minor.build.rev. 805 // Our version should be in major.minor.build.rev.
798 install_list->AddSetRegValueWorkItem( 806 install_list->AddSetRegValueWorkItem(
799 reg_root, 807 reg_root,
800 uninstall_reg, 808 uninstall_reg,
801 WorkItem::kWow64Default, 809 KEY_WOW64_32KEY,
802 L"VersionMajor", 810 L"VersionMajor",
803 static_cast<DWORD>(version_components[2]), 811 static_cast<DWORD>(version_components[2]),
804 true); 812 true);
805 install_list->AddSetRegValueWorkItem( 813 install_list->AddSetRegValueWorkItem(
806 reg_root, 814 reg_root,
807 uninstall_reg, 815 uninstall_reg,
808 WorkItem::kWow64Default, 816 KEY_WOW64_32KEY,
809 L"VersionMinor", 817 L"VersionMinor",
810 static_cast<DWORD>(version_components[3]), 818 static_cast<DWORD>(version_components[3]),
811 true); 819 true);
812 } 820 }
813 } 821 }
814 } 822 }
815 823
816 // Create Version key for a product (if not already present) and sets the new 824 // Create Version key for a product (if not already present) and sets the new
817 // product version as the last step. 825 // product version as the last step.
818 void AddVersionKeyWorkItems(HKEY root, 826 void AddVersionKeyWorkItems(HKEY root,
819 BrowserDistribution* dist, 827 BrowserDistribution* dist,
820 const Version& new_version, 828 const Version& new_version,
821 bool add_language_identifier, 829 bool add_language_identifier,
822 WorkItemList* list) { 830 WorkItemList* list) {
823 // Create Version key for each distribution (if not already present) and set 831 // Create Version key for each distribution (if not already present) and set
824 // the new product version as the last step. 832 // the new product version as the last step.
825 base::string16 version_key(dist->GetVersionKey()); 833 base::string16 version_key(dist->GetVersionKey());
826 list->AddCreateRegKeyWorkItem(root, version_key, WorkItem::kWow64Default); 834 list->AddCreateRegKeyWorkItem(root, version_key, KEY_WOW64_32KEY);
827 835
828 base::string16 product_name(dist->GetDisplayName()); 836 base::string16 product_name(dist->GetDisplayName());
829 list->AddSetRegValueWorkItem(root, 837 list->AddSetRegValueWorkItem(root,
830 version_key, 838 version_key,
831 WorkItem::kWow64Default, 839 KEY_WOW64_32KEY,
832 google_update::kRegNameField, 840 google_update::kRegNameField,
833 product_name, 841 product_name,
834 true); // overwrite name also 842 true); // overwrite name also
835 list->AddSetRegValueWorkItem(root, 843 list->AddSetRegValueWorkItem(root,
836 version_key, 844 version_key,
837 WorkItem::kWow64Default, 845 KEY_WOW64_32KEY,
838 google_update::kRegOopcrashesField, 846 google_update::kRegOopcrashesField,
839 static_cast<DWORD>(1), 847 static_cast<DWORD>(1),
840 false); // set during first install 848 false); // set during first install
841 if (add_language_identifier) { 849 if (add_language_identifier) {
842 // Write the language identifier of the current translation. Omaha's set of 850 // Write the language identifier of the current translation. Omaha's set of
843 // languages is a superset of Chrome's set of translations with this one 851 // languages is a superset of Chrome's set of translations with this one
844 // exception: what Chrome calls "en-us", Omaha calls "en". sigh. 852 // exception: what Chrome calls "en-us", Omaha calls "en". sigh.
845 base::string16 language(GetCurrentTranslation()); 853 base::string16 language(GetCurrentTranslation());
846 if (LowerCaseEqualsASCII(language, "en-us")) 854 if (LowerCaseEqualsASCII(language, "en-us"))
847 language.resize(2); 855 language.resize(2);
848 list->AddSetRegValueWorkItem(root, 856 list->AddSetRegValueWorkItem(root,
849 version_key, 857 version_key,
850 WorkItem::kWow64Default, 858 KEY_WOW64_32KEY,
851 google_update::kRegLangField, 859 google_update::kRegLangField,
852 language, 860 language,
853 false); // do not overwrite language 861 false); // do not overwrite language
854 } 862 }
855 list->AddSetRegValueWorkItem(root, 863 list->AddSetRegValueWorkItem(root,
856 version_key, 864 version_key,
857 WorkItem::kWow64Default, 865 KEY_WOW64_32KEY,
858 google_update::kRegVersionField, 866 google_update::kRegVersionField,
859 ASCIIToWide(new_version.GetString()), 867 ASCIIToWide(new_version.GetString()),
860 true); // overwrite version 868 true); // overwrite version
861 } 869 }
862 870
863 // Mirror oeminstall the first time anything is installed multi. There is no 871 // Mirror oeminstall the first time anything is installed multi. There is no
864 // need to update the value on future install/update runs since this value never 872 // need to update the value on future install/update runs since this value never
865 // changes. Note that the value is removed by Google Update after EULA 873 // changes. Note that the value is removed by Google Update after EULA
866 // acceptance is processed. 874 // acceptance is processed.
867 void AddOemInstallWorkItems(const InstallationState& original_state, 875 void AddOemInstallWorkItems(const InstallationState& original_state,
(...skipping 22 matching lines...) Expand all
890 } 898 }
891 const ProductState* source_product = 899 const ProductState* source_product =
892 original_state.GetNonVersionedProductState(system_install, source_type); 900 original_state.GetNonVersionedProductState(system_install, source_type);
893 901
894 base::string16 oem_install; 902 base::string16 oem_install;
895 if (source_product->GetOemInstall(&oem_install)) { 903 if (source_product->GetOemInstall(&oem_install)) {
896 VLOG(1) << "Mirroring oeminstall=\"" << oem_install << "\" from " 904 VLOG(1) << "Mirroring oeminstall=\"" << oem_install << "\" from "
897 << BrowserDistribution::GetSpecificDistribution(source_type)-> 905 << BrowserDistribution::GetSpecificDistribution(source_type)->
898 GetDisplayName(); 906 GetDisplayName();
899 install_list->AddCreateRegKeyWorkItem( 907 install_list->AddCreateRegKeyWorkItem(
900 root_key, multi_key, WorkItem::kWow64Default); 908 root_key, multi_key, KEY_WOW64_32KEY);
901 // Always overwrite an old value. 909 // Always overwrite an old value.
902 install_list->AddSetRegValueWorkItem(root_key, 910 install_list->AddSetRegValueWorkItem(root_key,
903 multi_key, 911 multi_key,
904 WorkItem::kWow64Default, 912 KEY_WOW64_32KEY,
905 google_update::kRegOemInstallField, 913 google_update::kRegOemInstallField,
906 oem_install, 914 oem_install,
907 true); 915 true);
908 } else { 916 } else {
909 // Clear any old value. 917 // Clear any old value.
910 install_list->AddDeleteRegValueWorkItem( 918 install_list->AddDeleteRegValueWorkItem(
911 root_key, 919 root_key,
912 multi_key, 920 multi_key,
913 WorkItem::kWow64Default, 921 KEY_WOW64_32KEY,
914 google_update::kRegOemInstallField); 922 google_update::kRegOemInstallField);
915 } 923 }
916 } 924 }
917 } 925 }
918 926
919 // Mirror eulaaccepted the first time anything is installed multi. There is no 927 // Mirror eulaaccepted the first time anything is installed multi. There is no
920 // need to update the value on future install/update runs since 928 // need to update the value on future install/update runs since
921 // GoogleUpdateSettings::SetEULAConsent will modify the value for both the 929 // GoogleUpdateSettings::SetEULAConsent will modify the value for both the
922 // relevant product and for the binaries. 930 // relevant product and for the binaries.
923 void AddEulaAcceptedWorkItems(const InstallationState& original_state, 931 void AddEulaAcceptedWorkItems(const InstallationState& original_state,
(...skipping 28 matching lines...) Expand all
952 eula_accepted = dword_value; 960 eula_accepted = dword_value;
953 product_type = this_type; 961 product_type = this_type;
954 } 962 }
955 } 963 }
956 964
957 if (have_eula_accepted) { 965 if (have_eula_accepted) {
958 VLOG(1) << "Mirroring eulaaccepted=" << eula_accepted << " from " 966 VLOG(1) << "Mirroring eulaaccepted=" << eula_accepted << " from "
959 << BrowserDistribution::GetSpecificDistribution(product_type)-> 967 << BrowserDistribution::GetSpecificDistribution(product_type)->
960 GetDisplayName(); 968 GetDisplayName();
961 install_list->AddCreateRegKeyWorkItem( 969 install_list->AddCreateRegKeyWorkItem(
962 root_key, multi_key, WorkItem::kWow64Default); 970 root_key, multi_key, KEY_WOW64_32KEY);
963 install_list->AddSetRegValueWorkItem(root_key, 971 install_list->AddSetRegValueWorkItem(root_key,
964 multi_key, 972 multi_key,
965 WorkItem::kWow64Default, 973 KEY_WOW64_32KEY,
966 google_update::kRegEULAAceptedField, 974 google_update::kRegEULAAceptedField,
967 eula_accepted, 975 eula_accepted,
968 true); 976 true);
969 } else { 977 } else {
970 // Clear any old value. 978 // Clear any old value.
971 install_list->AddDeleteRegValueWorkItem( 979 install_list->AddDeleteRegValueWorkItem(
972 root_key, 980 root_key,
973 multi_key, 981 multi_key,
974 WorkItem::kWow64Default, 982 KEY_WOW64_32KEY,
975 google_update::kRegEULAAceptedField); 983 google_update::kRegEULAAceptedField);
976 } 984 }
977 } 985 }
978 } 986 }
979 987
980 // Adds work items that make registry adjustments for Google Update. 988 // Adds work items that make registry adjustments for Google Update.
981 void AddGoogleUpdateWorkItems(const InstallationState& original_state, 989 void AddGoogleUpdateWorkItems(const InstallationState& original_state,
982 const InstallerState& installer_state, 990 const InstallerState& installer_state,
983 WorkItemList* install_list) { 991 WorkItemList* install_list) {
984 // Is a multi-install product being installed or over-installed? 992 // Is a multi-install product being installed or over-installed?
985 if (installer_state.operation() != InstallerState::MULTI_INSTALL && 993 if (installer_state.operation() != InstallerState::MULTI_INSTALL &&
986 installer_state.operation() != InstallerState::MULTI_UPDATE) { 994 installer_state.operation() != InstallerState::MULTI_UPDATE) {
987 VLOG(1) << "AddGoogleUpdateWorkItems noop: " << installer_state.operation(); 995 VLOG(1) << "AddGoogleUpdateWorkItems noop: " << installer_state.operation();
988 return; 996 return;
989 } 997 }
990 998
991 const bool system_install = installer_state.system_install(); 999 const bool system_install = installer_state.system_install();
992 const HKEY root_key = installer_state.root_key(); 1000 const HKEY root_key = installer_state.root_key();
993 base::string16 multi_key( 1001 base::string16 multi_key(
994 installer_state.multi_package_binaries_distribution()->GetStateKey()); 1002 installer_state.multi_package_binaries_distribution()->GetStateKey());
995 1003
996 // For system-level installs, make sure the ClientStateMedium key for the 1004 // For system-level installs, make sure the ClientStateMedium key for the
997 // binaries exists. 1005 // binaries exists.
998 if (system_install) { 1006 if (system_install) {
999 install_list->AddCreateRegKeyWorkItem( 1007 install_list->AddCreateRegKeyWorkItem(
1000 root_key, 1008 root_key,
1001 installer_state.multi_package_binaries_distribution() 1009 installer_state.multi_package_binaries_distribution()
1002 ->GetStateMediumKey().c_str(), 1010 ->GetStateMediumKey().c_str(),
1003 WorkItem::kWow64Default); 1011 KEY_WOW64_32KEY);
1004 } 1012 }
1005 1013
1006 // Creating the ClientState key for binaries, if we're migrating to multi then 1014 // Creating the ClientState key for binaries, if we're migrating to multi then
1007 // copy over Chrome's brand code if it has one. 1015 // copy over Chrome's brand code if it has one.
1008 if (installer_state.state_type() != BrowserDistribution::CHROME_BINARIES) { 1016 if (installer_state.state_type() != BrowserDistribution::CHROME_BINARIES) {
1009 const ProductState* chrome_product_state = 1017 const ProductState* chrome_product_state =
1010 original_state.GetNonVersionedProductState( 1018 original_state.GetNonVersionedProductState(
1011 system_install, BrowserDistribution::CHROME_BROWSER); 1019 system_install, BrowserDistribution::CHROME_BROWSER);
1012 1020
1013 const base::string16& brand(chrome_product_state->brand()); 1021 const base::string16& brand(chrome_product_state->brand());
1014 if (!brand.empty()) { 1022 if (!brand.empty()) {
1015 install_list->AddCreateRegKeyWorkItem( 1023 install_list->AddCreateRegKeyWorkItem(
1016 root_key, multi_key, WorkItem::kWow64Default); 1024 root_key, multi_key, KEY_WOW64_32KEY);
1017 // Write Chrome's brand code to the multi key. Never overwrite the value 1025 // Write Chrome's brand code to the multi key. Never overwrite the value
1018 // if one is already present (although this shouldn't happen). 1026 // if one is already present (although this shouldn't happen).
1019 install_list->AddSetRegValueWorkItem(root_key, 1027 install_list->AddSetRegValueWorkItem(root_key,
1020 multi_key, 1028 multi_key,
1021 WorkItem::kWow64Default, 1029 KEY_WOW64_32KEY,
1022 google_update::kRegBrandField, 1030 google_update::kRegBrandField,
1023 brand, 1031 brand,
1024 false); 1032 false);
1025 } 1033 }
1026 } 1034 }
1027 1035
1028 AddOemInstallWorkItems(original_state, installer_state, install_list); 1036 AddOemInstallWorkItems(original_state, installer_state, install_list);
1029 AddEulaAcceptedWorkItems(original_state, installer_state, install_list); 1037 AddEulaAcceptedWorkItems(original_state, installer_state, install_list);
1030 AddUsageStatsWorkItems(original_state, installer_state, install_list); 1038 AddUsageStatsWorkItems(original_state, installer_state, install_list);
1031 1039
(...skipping 23 matching lines...) Expand all
1055 installer_state.system_install(), dist->GetType()); 1063 installer_state.system_install(), dist->GetType());
1056 value_found = product_state->GetUsageStats(&usagestats); 1064 value_found = product_state->GetUsageStats(&usagestats);
1057 } 1065 }
1058 1066
1059 // If a value was found, write it in the appropriate location for the 1067 // If a value was found, write it in the appropriate location for the
1060 // binaries and remove all values from the products. 1068 // binaries and remove all values from the products.
1061 if (value_found) { 1069 if (value_found) {
1062 base::string16 state_key( 1070 base::string16 state_key(
1063 installer_state.multi_package_binaries_distribution()->GetStateKey()); 1071 installer_state.multi_package_binaries_distribution()->GetStateKey());
1064 install_list->AddCreateRegKeyWorkItem( 1072 install_list->AddCreateRegKeyWorkItem(
1065 root_key, state_key, WorkItem::kWow64Default); 1073 root_key, state_key, KEY_WOW64_32KEY);
1066 // Overwrite any existing value so that overinstalls (where Omaha writes a 1074 // Overwrite any existing value so that overinstalls (where Omaha writes a
1067 // new value into a product's state key) pick up the correct value. 1075 // new value into a product's state key) pick up the correct value.
1068 install_list->AddSetRegValueWorkItem(root_key, 1076 install_list->AddSetRegValueWorkItem(root_key,
1069 state_key, 1077 state_key,
1070 WorkItem::kWow64Default, 1078 KEY_WOW64_32KEY,
1071 google_update::kRegUsageStatsField, 1079 google_update::kRegUsageStatsField,
1072 usagestats, 1080 usagestats,
1073 true); 1081 true);
1074 1082
1075 for (Products::const_iterator scan = products.begin(), end = products.end(); 1083 for (Products::const_iterator scan = products.begin(), end = products.end();
1076 scan != end; ++scan) { 1084 scan != end; ++scan) {
1077 if ((*scan)->is_chrome_binaries()) 1085 if ((*scan)->is_chrome_binaries())
1078 continue; 1086 continue;
1079 BrowserDistribution* dist = (*scan)->distribution(); 1087 BrowserDistribution* dist = (*scan)->distribution();
1080 if (installer_state.system_install()) { 1088 if (installer_state.system_install()) {
1081 install_list->AddDeleteRegValueWorkItem( 1089 install_list->AddDeleteRegValueWorkItem(
1082 root_key, 1090 root_key,
1083 dist->GetStateMediumKey(), 1091 dist->GetStateMediumKey(),
1084 WorkItem::kWow64Default, 1092 KEY_WOW64_32KEY,
1085 google_update::kRegUsageStatsField); 1093 google_update::kRegUsageStatsField);
1086 // Previous versions of Chrome also wrote a value in HKCU even for 1094 // Previous versions of Chrome also wrote a value in HKCU even for
1087 // system-level installs, so clean that up. 1095 // system-level installs, so clean that up.
1088 install_list->AddDeleteRegValueWorkItem( 1096 install_list->AddDeleteRegValueWorkItem(
1089 HKEY_CURRENT_USER, 1097 HKEY_CURRENT_USER,
1090 dist->GetStateKey(), 1098 dist->GetStateKey(),
1091 WorkItem::kWow64Default, 1099 KEY_WOW64_32KEY,
1092 google_update::kRegUsageStatsField); 1100 google_update::kRegUsageStatsField);
1093 } 1101 }
1094 install_list->AddDeleteRegValueWorkItem( 1102 install_list->AddDeleteRegValueWorkItem(
1095 root_key, 1103 root_key,
1096 dist->GetStateKey(), 1104 dist->GetStateKey(),
1097 WorkItem::kWow64Default, 1105 KEY_WOW64_32KEY,
1098 google_update::kRegUsageStatsField); 1106 google_update::kRegUsageStatsField);
1099 } 1107 }
1100 } 1108 }
1101 } 1109 }
1102 1110
1103 bool AppendPostInstallTasks(const InstallerState& installer_state, 1111 bool AppendPostInstallTasks(const InstallerState& installer_state,
1104 const base::FilePath& setup_path, 1112 const base::FilePath& setup_path,
1105 const Version* current_version, 1113 const Version* current_version,
1106 const Version& new_version, 1114 const Version& new_version,
1107 const base::FilePath& temp_path, 1115 const base::FilePath& temp_path,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 1149
1142 base::string16 version_key; 1150 base::string16 version_key;
1143 for (size_t i = 0; i < products.size(); ++i) { 1151 for (size_t i = 0; i < products.size(); ++i) {
1144 BrowserDistribution* dist = products[i]->distribution(); 1152 BrowserDistribution* dist = products[i]->distribution();
1145 version_key = dist->GetVersionKey(); 1153 version_key = dist->GetVersionKey();
1146 1154
1147 if (current_version) { 1155 if (current_version) {
1148 in_use_update_work_items->AddSetRegValueWorkItem( 1156 in_use_update_work_items->AddSetRegValueWorkItem(
1149 root, 1157 root,
1150 version_key, 1158 version_key,
1151 WorkItem::kWow64Default, 1159 KEY_WOW64_32KEY,
1152 google_update::kRegOldVersionField, 1160 google_update::kRegOldVersionField,
1153 ASCIIToWide(current_version->GetString()), 1161 ASCIIToWide(current_version->GetString()),
1154 true); 1162 true);
1155 } 1163 }
1156 if (critical_version.IsValid()) { 1164 if (critical_version.IsValid()) {
1157 in_use_update_work_items->AddSetRegValueWorkItem( 1165 in_use_update_work_items->AddSetRegValueWorkItem(
1158 root, 1166 root,
1159 version_key, 1167 version_key,
1160 WorkItem::kWow64Default, 1168 KEY_WOW64_32KEY,
1161 google_update::kRegCriticalVersionField, 1169 google_update::kRegCriticalVersionField,
1162 ASCIIToWide(critical_version.GetString()), 1170 ASCIIToWide(critical_version.GetString()),
1163 true); 1171 true);
1164 } else { 1172 } else {
1165 in_use_update_work_items->AddDeleteRegValueWorkItem( 1173 in_use_update_work_items->AddDeleteRegValueWorkItem(
1166 root, 1174 root,
1167 version_key, 1175 version_key,
1168 WorkItem::kWow64Default, 1176 KEY_WOW64_32KEY,
1169 google_update::kRegCriticalVersionField); 1177 google_update::kRegCriticalVersionField);
1170 } 1178 }
1171 1179
1172 // Adding this registry entry for all products (but the binaries) is 1180 // Adding this registry entry for all products (but the binaries) is
1173 // overkill. However, as it stands, we don't have a way to know which 1181 // overkill. However, as it stands, we don't have a way to know which
1174 // product will check the key and run the command, so we add it for all. 1182 // product will check the key and run the command, so we add it for all.
1175 // The first to run it will perform the operation and clean up the other 1183 // The first to run it will perform the operation and clean up the other
1176 // values. 1184 // values.
1177 if (dist->GetType() != BrowserDistribution::CHROME_BINARIES) { 1185 if (dist->GetType() != BrowserDistribution::CHROME_BINARIES) {
1178 CommandLine product_rename_cmd(rename); 1186 CommandLine product_rename_cmd(rename);
1179 products[i]->AppendRenameFlags(&product_rename_cmd); 1187 products[i]->AppendRenameFlags(&product_rename_cmd);
1180 in_use_update_work_items->AddSetRegValueWorkItem( 1188 in_use_update_work_items->AddSetRegValueWorkItem(
1181 root, 1189 root,
1182 version_key, 1190 version_key,
1183 WorkItem::kWow64Default, 1191 KEY_WOW64_32KEY,
1184 google_update::kRegRenameCmdField, 1192 google_update::kRegRenameCmdField,
1185 product_rename_cmd.GetCommandLineString(), 1193 product_rename_cmd.GetCommandLineString(),
1186 true); 1194 true);
1187 } 1195 }
1188 } 1196 }
1189 1197
1190 post_install_task_list->AddWorkItem(in_use_update_work_items.release()); 1198 post_install_task_list->AddWorkItem(in_use_update_work_items.release());
1191 } 1199 }
1192 1200
1193 // Append work items that will be executed if this was NOT an in-use update. 1201 // Append work items that will be executed if this was NOT an in-use update.
1194 { 1202 {
1195 scoped_ptr<WorkItemList> regular_update_work_items( 1203 scoped_ptr<WorkItemList> regular_update_work_items(
1196 WorkItem::CreateConditionalWorkItemList( 1204 WorkItem::CreateConditionalWorkItemList(
1197 new Not(new ConditionRunIfFileExists(new_chrome_exe)))); 1205 new Not(new ConditionRunIfFileExists(new_chrome_exe))));
1198 regular_update_work_items->set_log_message("RegularUpdateWorkItemList"); 1206 regular_update_work_items->set_log_message("RegularUpdateWorkItemList");
1199 1207
1200 // Since this was not an in-use-update, delete 'opv', 'cpv', and 'cmd' keys. 1208 // Since this was not an in-use-update, delete 'opv', 'cpv', and 'cmd' keys.
1201 for (size_t i = 0; i < products.size(); ++i) { 1209 for (size_t i = 0; i < products.size(); ++i) {
1202 BrowserDistribution* dist = products[i]->distribution(); 1210 BrowserDistribution* dist = products[i]->distribution();
1203 base::string16 version_key(dist->GetVersionKey()); 1211 base::string16 version_key(dist->GetVersionKey());
1204 regular_update_work_items->AddDeleteRegValueWorkItem( 1212 regular_update_work_items->AddDeleteRegValueWorkItem(
1205 root, 1213 root,
1206 version_key, 1214 version_key,
1207 WorkItem::kWow64Default, 1215 KEY_WOW64_32KEY,
1208 google_update::kRegOldVersionField); 1216 google_update::kRegOldVersionField);
1209 regular_update_work_items->AddDeleteRegValueWorkItem( 1217 regular_update_work_items->AddDeleteRegValueWorkItem(
1210 root, 1218 root,
1211 version_key, 1219 version_key,
1212 WorkItem::kWow64Default, 1220 KEY_WOW64_32KEY,
1213 google_update::kRegCriticalVersionField); 1221 google_update::kRegCriticalVersionField);
1214 regular_update_work_items->AddDeleteRegValueWorkItem( 1222 regular_update_work_items->AddDeleteRegValueWorkItem(
1215 root, 1223 root,
1216 version_key, 1224 version_key,
1217 WorkItem::kWow64Default, 1225 KEY_WOW64_32KEY,
1218 google_update::kRegRenameCmdField); 1226 google_update::kRegRenameCmdField);
1219 } 1227 }
1220 1228
1221 post_install_task_list->AddWorkItem(regular_update_work_items.release()); 1229 post_install_task_list->AddWorkItem(regular_update_work_items.release());
1222 } 1230 }
1223 1231
1224 AddRegisterComDllWorkItemsForPackage(installer_state, current_version, 1232 AddRegisterComDllWorkItemsForPackage(installer_state, current_version,
1225 new_version, post_install_task_list); 1233 new_version, post_install_task_list);
1226 1234
1227 // If we're told that we're an MSI install, make sure to set the marker 1235 // If we're told that we're an MSI install, make sure to set the marker
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 1380
1373 void AddSetMsiMarkerWorkItem(const InstallerState& installer_state, 1381 void AddSetMsiMarkerWorkItem(const InstallerState& installer_state,
1374 BrowserDistribution* dist, 1382 BrowserDistribution* dist,
1375 bool set, 1383 bool set,
1376 WorkItemList* work_item_list) { 1384 WorkItemList* work_item_list) {
1377 DCHECK(work_item_list); 1385 DCHECK(work_item_list);
1378 DWORD msi_value = set ? 1 : 0; 1386 DWORD msi_value = set ? 1 : 0;
1379 WorkItem* set_msi_work_item = 1387 WorkItem* set_msi_work_item =
1380 work_item_list->AddSetRegValueWorkItem(installer_state.root_key(), 1388 work_item_list->AddSetRegValueWorkItem(installer_state.root_key(),
1381 dist->GetStateKey(), 1389 dist->GetStateKey(),
1382 WorkItem::kWow64Default, 1390 KEY_WOW64_32KEY,
1383 google_update::kRegMSIField, 1391 google_update::kRegMSIField,
1384 msi_value, 1392 msi_value,
1385 true); 1393 true);
1386 DCHECK(set_msi_work_item); 1394 DCHECK(set_msi_work_item);
1387 set_msi_work_item->set_ignore_failure(true); 1395 set_msi_work_item->set_ignore_failure(true);
1388 set_msi_work_item->set_log_message("Could not write MSI marker!"); 1396 set_msi_work_item->set_log_message("Could not write MSI marker!");
1389 } 1397 }
1390 1398
1391 void AddDelegateExecuteWorkItems(const InstallerState& installer_state, 1399 void AddDelegateExecuteWorkItems(const InstallerState& installer_state,
1392 const base::FilePath& target_path, 1400 const base::FilePath& target_path,
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
1582 const base::FilePath& setup_path, 1590 const base::FilePath& setup_path,
1583 const Version& new_version, 1591 const Version& new_version,
1584 const Product& product, 1592 const Product& product,
1585 WorkItemList* install_list) { 1593 WorkItemList* install_list) {
1586 const HKEY root_key = installer_state.root_key(); 1594 const HKEY root_key = installer_state.root_key();
1587 base::string16 cmd_key( 1595 base::string16 cmd_key(
1588 GetRegCommandKey(product.distribution(), kCmdOnOsUpgrade)); 1596 GetRegCommandKey(product.distribution(), kCmdOnOsUpgrade));
1589 1597
1590 if (installer_state.operation() == InstallerState::UNINSTALL) { 1598 if (installer_state.operation() == InstallerState::UNINSTALL) {
1591 install_list->AddDeleteRegKeyWorkItem( 1599 install_list->AddDeleteRegKeyWorkItem(
1592 root_key, cmd_key, WorkItem::kWow64Default) 1600 root_key, cmd_key, KEY_WOW64_32KEY)
1593 ->set_log_message("Removing OS upgrade command"); 1601 ->set_log_message("Removing OS upgrade command");
1594 } else { 1602 } else {
1595 // Register with Google Update to have setup.exe --on-os-upgrade called on 1603 // Register with Google Update to have setup.exe --on-os-upgrade called on
1596 // OS upgrade. 1604 // OS upgrade.
1597 CommandLine cmd_line(installer_state 1605 CommandLine cmd_line(installer_state
1598 .GetInstallerDirectory(new_version) 1606 .GetInstallerDirectory(new_version)
1599 .Append(setup_path.BaseName())); 1607 .Append(setup_path.BaseName()));
1600 // Add the main option to indicate OS upgrade flow. 1608 // Add the main option to indicate OS upgrade flow.
1601 cmd_line.AppendSwitch(installer::switches::kOnOsUpgrade); 1609 cmd_line.AppendSwitch(installer::switches::kOnOsUpgrade);
1602 // Add product-specific options. 1610 // Add product-specific options.
(...skipping 12 matching lines...) Expand all
1615 void AddQueryEULAAcceptanceWorkItems(const InstallerState& installer_state, 1623 void AddQueryEULAAcceptanceWorkItems(const InstallerState& installer_state,
1616 const base::FilePath& setup_path, 1624 const base::FilePath& setup_path,
1617 const Version& new_version, 1625 const Version& new_version,
1618 const Product& product, 1626 const Product& product,
1619 WorkItemList* work_item_list) { 1627 WorkItemList* work_item_list) {
1620 const HKEY root_key = installer_state.root_key(); 1628 const HKEY root_key = installer_state.root_key();
1621 base::string16 cmd_key( 1629 base::string16 cmd_key(
1622 GetRegCommandKey(product.distribution(), kCmdQueryEULAAcceptance)); 1630 GetRegCommandKey(product.distribution(), kCmdQueryEULAAcceptance));
1623 if (installer_state.operation() == InstallerState::UNINSTALL) { 1631 if (installer_state.operation() == InstallerState::UNINSTALL) {
1624 work_item_list->AddDeleteRegKeyWorkItem( 1632 work_item_list->AddDeleteRegKeyWorkItem(
1625 root_key, cmd_key, WorkItem::kWow64Default) 1633 root_key, cmd_key, KEY_WOW64_32KEY)
1626 ->set_log_message("Removing query EULA acceptance command"); 1634 ->set_log_message("Removing query EULA acceptance command");
1627 } else { 1635 } else {
1628 CommandLine cmd_line(installer_state 1636 CommandLine cmd_line(installer_state
1629 .GetInstallerDirectory(new_version) 1637 .GetInstallerDirectory(new_version)
1630 .Append(setup_path.BaseName())); 1638 .Append(setup_path.BaseName()));
1631 cmd_line.AppendSwitch(switches::kQueryEULAAcceptance); 1639 cmd_line.AppendSwitch(switches::kQueryEULAAcceptance);
1632 if (installer_state.system_install()) 1640 if (installer_state.system_install())
1633 cmd_line.AppendSwitch(installer::switches::kSystemLevel); 1641 cmd_line.AppendSwitch(installer::switches::kSystemLevel);
1634 if (installer_state.verbose_logging()) 1642 if (installer_state.verbose_logging())
1635 cmd_line.AppendSwitch(installer::switches::kVerboseLogging); 1643 cmd_line.AppendSwitch(installer::switches::kVerboseLogging);
(...skipping 10 matching lines...) Expand all
1646 1654
1647 base::string16 cmd_key( 1655 base::string16 cmd_key(
1648 GetRegCommandKey(BrowserDistribution::GetSpecificDistribution( 1656 GetRegCommandKey(BrowserDistribution::GetSpecificDistribution(
1649 BrowserDistribution::CHROME_BINARIES), 1657 BrowserDistribution::CHROME_BINARIES),
1650 kCmdQuickEnableCf)); 1658 kCmdQuickEnableCf));
1651 1659
1652 // Unconditionally remove the legacy Quick Enable command from the binaries. 1660 // Unconditionally remove the legacy Quick Enable command from the binaries.
1653 // Do this even if multi-install Chrome isn't installed to ensure that it is 1661 // Do this even if multi-install Chrome isn't installed to ensure that it is
1654 // not left behind in any case. 1662 // not left behind in any case.
1655 work_item_list->AddDeleteRegKeyWorkItem( 1663 work_item_list->AddDeleteRegKeyWorkItem(
1656 installer_state.root_key(), cmd_key, WorkItem::kWow64Default) 1664 installer_state.root_key(), cmd_key, KEY_WOW64_32KEY)
1657 ->set_log_message("removing " + 1665 ->set_log_message("removing " +
1658 base::UTF16ToASCII(kCmdQuickEnableCf) + " command"); 1666 base::UTF16ToASCII(kCmdQuickEnableCf) + " command");
1659 } 1667 }
1660 1668
1661 } // namespace installer 1669 } // namespace installer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698