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

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

Issue 10806086: Fix multi-install update regression. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 const HKEY root_key = installer_state.root_key(); 375 const HKEY root_key = installer_state.root_key();
376 std::wstring multi_key( 376 std::wstring multi_key(
377 installer_state.multi_package_binaries_distribution()->GetStateKey()); 377 installer_state.multi_package_binaries_distribution()->GetStateKey());
378 378
379 // Copy the value from the product with the greatest value. 379 // Copy the value from the product with the greatest value.
380 bool have_eula_accepted = false; 380 bool have_eula_accepted = false;
381 BrowserDistribution::Type product_type; 381 BrowserDistribution::Type product_type;
382 DWORD eula_accepted; 382 DWORD eula_accepted;
383 const Products& products = installer_state.products(); 383 const Products& products = installer_state.products();
384 for (size_t i = 0, count = products.size(); i != count; ++i) { 384 for (size_t i = 0, count = products.size(); i != count; ++i) {
385 if (products[i]->is_chrome_binaries())
grt (UTC plus 2) 2012/07/24 15:02:03 values are copied from products into the binaries,
386 continue;
385 DWORD dword_value = 0; 387 DWORD dword_value = 0;
386 BrowserDistribution::Type this_type = 388 BrowserDistribution::Type this_type =
387 products[i]->distribution()->GetType(); 389 products[i]->distribution()->GetType();
388 const ProductState* product_state = 390 const ProductState* product_state =
389 original_state.GetNonVersionedProductState( 391 original_state.GetNonVersionedProductState(
390 system_install, this_type); 392 system_install, this_type);
391 if (product_state->GetEulaAccepted(&dword_value) && 393 if (product_state->GetEulaAccepted(&dword_value) &&
392 (!have_eula_accepted || dword_value > eula_accepted)) { 394 (!have_eula_accepted || dword_value > eula_accepted)) {
393 have_eula_accepted = true; 395 have_eula_accepted = true;
394 eula_accepted = dword_value; 396 eula_accepted = dword_value;
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 } 631 }
630 if (critical_version.IsValid()) { 632 if (critical_version.IsValid()) {
631 in_use_update_work_items->AddSetRegValueWorkItem(root, version_key, 633 in_use_update_work_items->AddSetRegValueWorkItem(root, version_key,
632 google_update::kRegCriticalVersionField, 634 google_update::kRegCriticalVersionField,
633 ASCIIToWide(critical_version.GetString()), true); 635 ASCIIToWide(critical_version.GetString()), true);
634 } else { 636 } else {
635 in_use_update_work_items->AddDeleteRegValueWorkItem(root, version_key, 637 in_use_update_work_items->AddDeleteRegValueWorkItem(root, version_key,
636 google_update::kRegCriticalVersionField); 638 google_update::kRegCriticalVersionField);
637 } 639 }
638 640
639 // Adding this registry entry for all products is overkill. 641 // Adding this registry entry for all products (but the binaries) is
640 // However, as it stands, we don't have a way to know which distribution 642 // overkill. However, as it stands, we don't have a way to know which
641 // will check the key and run the command, so we add it for all. The 643 // product will check the key and run the command, so we add it for all.
642 // first to run it will perform the operation and clean up the other 644 // The first to run it will perform the operation and clean up the other
643 // values. 645 // values.
644 CommandLine product_rename_cmd(rename); 646 if (dist->GetType() != BrowserDistribution::CHROME_BINARIES) {
645 products[i]->AppendRenameFlags(&product_rename_cmd); 647 CommandLine product_rename_cmd(rename);
646 in_use_update_work_items->AddSetRegValueWorkItem( 648 products[i]->AppendRenameFlags(&product_rename_cmd);
647 root, version_key, google_update::kRegRenameCmdField,
648 product_rename_cmd.GetCommandLineString(), true);
649 }
650
651 if (current_version != NULL && installer_state.is_multi_install()) {
grt (UTC plus 2) 2012/07/24 15:02:03 the binaries are in the set of products now, so th
652 BrowserDistribution* dist =
653 installer_state.multi_package_binaries_distribution();
654 version_key = dist->GetVersionKey();
655 in_use_update_work_items->AddSetRegValueWorkItem(
656 root, version_key, google_update::kRegOldVersionField,
657 ASCIIToWide(current_version->GetString()), true);
658 if (critical_version.IsValid()) {
659 in_use_update_work_items->AddSetRegValueWorkItem( 649 in_use_update_work_items->AddSetRegValueWorkItem(
660 root, version_key, google_update::kRegCriticalVersionField, 650 root, version_key, google_update::kRegRenameCmdField,
661 ASCIIToWide(critical_version.GetString()), true); 651 product_rename_cmd.GetCommandLineString(), true);
662 } else {
663 in_use_update_work_items->AddDeleteRegValueWorkItem(
664 root, version_key, google_update::kRegCriticalVersionField);
665 } 652 }
666 // TODO(tommi): We should move the rename command here. We also need to
667 // update upgrade_utils::SwapNewChromeExeIfPresent.
668 } 653 }
669 654
670 if (installer_state.FindProduct(BrowserDistribution::CHROME_FRAME)) { 655 if (installer_state.FindProduct(BrowserDistribution::CHROME_FRAME)) {
671 AddCopyIELowRightsPolicyWorkItems(installer_state, 656 AddCopyIELowRightsPolicyWorkItems(installer_state,
672 in_use_update_work_items.get()); 657 in_use_update_work_items.get());
673 } 658 }
674 659
675 post_install_task_list->AddWorkItem(in_use_update_work_items.release()); 660 post_install_task_list->AddWorkItem(in_use_update_work_items.release());
676 } 661 }
677 662
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 if (installer_state.is_msi()) { 695 if (installer_state.is_msi()) {
711 for (size_t i = 0; i < products.size(); ++i) { 696 for (size_t i = 0; i < products.size(); ++i) {
712 const Product* product = products[i]; 697 const Product* product = products[i];
713 AddSetMsiMarkerWorkItem(installer_state, product->distribution(), true, 698 AddSetMsiMarkerWorkItem(installer_state, product->distribution(), true,
714 post_install_task_list); 699 post_install_task_list);
715 700
716 // We want MSI installs to take over the Add/Remove Programs shortcut. 701 // We want MSI installs to take over the Add/Remove Programs shortcut.
717 // Make a best-effort attempt to delete any shortcuts left over from 702 // Make a best-effort attempt to delete any shortcuts left over from
718 // previous non-MSI installations for the same type of install (system or 703 // previous non-MSI installations for the same type of install (system or
719 // per user). 704 // per user).
720 AddDeleteUninstallShortcutsForMSIWorkItems(installer_state, *product, 705 if (product->ShouldCreateUninstallEntry()) {
721 temp_path, 706 AddDeleteUninstallShortcutsForMSIWorkItems(installer_state, *product,
722 post_install_task_list); 707 temp_path,
723 } 708 post_install_task_list);
724 if (installer_state.is_multi_install()) { 709 }
grt (UTC plus 2) 2012/07/24 15:02:03 the binaries are in the set of products now, so th
725 AddSetMsiMarkerWorkItem(installer_state,
726 installer_state.multi_package_binaries_distribution(), true,
727 post_install_task_list);
728 } 710 }
729 } 711 }
730 712
731 return true; 713 return true;
732 } 714 }
733 715
734 void AddChromeWorkItems(const InstallationState& original_state, 716 void AddChromeWorkItems(const InstallationState& original_state,
735 const InstallerState& installer_state, 717 const InstallerState& installer_state,
736 const FilePath& setup_path, 718 const FilePath& setup_path,
737 const FilePath& archive_path, 719 const FilePath& archive_path,
(...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after
1591 machine_state, 1573 machine_state,
1592 setup_path, 1574 setup_path,
1593 new_version, 1575 new_version,
1594 work_item_list, 1576 work_item_list,
1595 false, // have_child_product 1577 false, // have_child_product
1596 cmd_line, 1578 cmd_line,
1597 kCmdQuickEnableApplicationHost); 1579 kCmdQuickEnableApplicationHost);
1598 } 1580 }
1599 1581
1600 } // namespace installer 1582 } // namespace installer
OLDNEW
« no previous file with comments | « no previous file | chrome/installer/setup/setup_main.cc » ('j') | chrome/installer/setup/setup_main.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698