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

Side by Side Diff: chrome/installer/util/installer_state.cc

Issue 869153004: Support migrating multi-install Chrome to single-install. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: verifier fix Created 5 years, 10 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
« no previous file with comments | « chrome/installer/util/installer_state.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "chrome/installer/util/installer_state.h" 5 #include "chrome/installer/util/installer_state.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 } 569 }
570 } 570 }
571 571
572 void InstallerState::AddComDllList( 572 void InstallerState::AddComDllList(
573 std::vector<base::FilePath>* com_dll_list) const { 573 std::vector<base::FilePath>* com_dll_list) const {
574 std::for_each(products_.begin(), products_.end(), 574 std::for_each(products_.begin(), products_.end(),
575 std::bind2nd(std::mem_fun(&Product::AddComDllList), 575 std::bind2nd(std::mem_fun(&Product::AddComDllList),
576 com_dll_list)); 576 com_dll_list));
577 } 577 }
578 578
579 bool InstallerState::SetChannelFlags(bool set,
580 ChannelInfo* channel_info) const {
581 bool modified = false;
582 for (Products::const_iterator scan = products_.begin(), end = products_.end();
583 scan != end; ++scan) {
584 modified |= (*scan)->SetChannelFlags(set, channel_info);
585 }
586 return modified;
587 }
588
589 void InstallerState::UpdateStage(installer::InstallerStage stage) const { 579 void InstallerState::UpdateStage(installer::InstallerStage stage) const {
590 InstallUtil::UpdateInstallerStage(system_install(), state_key_, stage); 580 InstallUtil::UpdateInstallerStage(system_install(), state_key_, stage);
591 } 581 }
592 582
593 void InstallerState::UpdateChannels() const { 583 void InstallerState::UpdateChannels() const {
594 if (operation_ != MULTI_INSTALL && operation_ != MULTI_UPDATE) { 584 DCHECK_NE(UNINSTALL, operation_);
595 VLOG(1) << "InstallerState::UpdateChannels noop: " << operation_; 585 // Update the "ap" value for the product being installed/updated. Use the
596 return; 586 // current value in the registry since the InstallationState instance used by
597 } 587 // the bulk of the installer does not track changes made by UpdateStage.
598
599 // Update the "ap" value for the product being installed/updated. We get the
600 // current value from the registry since the InstallationState instance used
601 // by the bulk of the installer does not track changes made by UpdateStage.
602 // Create the app's ClientState key if it doesn't exist. 588 // Create the app's ClientState key if it doesn't exist.
603 ChannelInfo channel_info; 589 ChannelInfo channel_info;
604 base::win::RegKey state_key; 590 base::win::RegKey state_key;
605 LONG result = 591 LONG result =
606 state_key.Create(root_key_, 592 state_key.Create(root_key_,
607 state_key_.c_str(), 593 state_key_.c_str(),
608 KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_WOW64_32KEY); 594 KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_WOW64_32KEY);
609 if (result == ERROR_SUCCESS) { 595 if (result == ERROR_SUCCESS) {
610 channel_info.Initialize(state_key); 596 channel_info.Initialize(state_key);
611 597
612 // This is a multi-install product. 598 // This is a multi-install product.
613 bool modified = channel_info.SetMultiInstall(true); 599 bool modified = channel_info.SetMultiInstall(is_multi_install());
614 600
615 // Add the appropriate modifiers for all products and their options. 601 if (is_multi_install()) {
616 modified |= SetChannelFlags(true, &channel_info); 602 // Add the appropriate modifiers for all products and their options.
603 for (auto* product : products_)
604 modified |= product->SetChannelFlags(true, &channel_info);
605 } else {
606 // Remove all multi-install products from the channel name.
607 modified |= channel_info.SetChrome(false);
608 modified |= channel_info.SetChromeFrame(false);
609 modified |= channel_info.SetAppLauncher(false);
610 }
617 611
618 VLOG(1) << "ap: " << channel_info.value(); 612 VLOG(1) << "ap: " << channel_info.value();
619 613
620 // Write the results if needed. 614 // Write the results if needed.
621 if (modified) 615 if (modified)
622 channel_info.Write(&state_key); 616 channel_info.Write(&state_key);
623 617
624 // Remove the -stage: modifier since we don't want to propagate that to the 618 if (is_multi_install()) {
625 // other app_guids. 619 // Remove the -stage: modifier since we don't want to propagate that to
626 channel_info.SetStage(NULL); 620 // the other app_guids.
621 channel_info.SetStage(NULL);
627 622
628 // Synchronize the other products and the package with this one. 623 // Synchronize the other products and the package with this one.
629 ChannelInfo other_info; 624 ChannelInfo other_info;
630 for (int i = 0; i < BrowserDistribution::NUM_TYPES; ++i) { 625 for (int i = 0; i < BrowserDistribution::NUM_TYPES; ++i) {
631 BrowserDistribution::Type type = 626 BrowserDistribution::Type type =
632 static_cast<BrowserDistribution::Type>(i); 627 static_cast<BrowserDistribution::Type>(i);
633 // Skip the app_guid we started with. 628 // Skip the app_guid we started with.
634 if (type == state_type_) 629 if (type == state_type_)
635 continue;
636 BrowserDistribution* dist = NULL;
637 // Always operate on the binaries.
638 if (i == BrowserDistribution::CHROME_BINARIES) {
639 dist = multi_package_distribution_;
640 } else {
641 const Product* product = FindProduct(type);
642 // Skip this one if it's for a product we're not operating on.
643 if (product == NULL)
644 continue; 630 continue;
645 dist = product->distribution(); 631 BrowserDistribution* dist = NULL;
646 } 632 // Always operate on the binaries.
647 result = 633 if (i == BrowserDistribution::CHROME_BINARIES) {
648 state_key.Create(root_key_, 634 dist = multi_package_distribution_;
649 dist->GetStateKey().c_str(), 635 } else {
650 KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_WOW64_32KEY); 636 const Product* product = FindProduct(type);
651 if (result == ERROR_SUCCESS) { 637 // Skip this one if it's for a product we're not operating on.
652 other_info.Initialize(state_key); 638 if (product == NULL)
653 if (!other_info.Equals(channel_info)) 639 continue;
654 channel_info.Write(&state_key); 640 dist = product->distribution();
655 } else { 641 }
656 LOG(ERROR) << "Failed opening key " << dist->GetStateKey() 642 result =
657 << " to update app channels; result: " << result; 643 state_key.Create(root_key_,
644 dist->GetStateKey().c_str(),
645 KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_WOW64_32KEY);
646 if (result == ERROR_SUCCESS) {
647 other_info.Initialize(state_key);
648 if (!other_info.Equals(channel_info))
649 channel_info.Write(&state_key);
650 } else {
651 LOG(ERROR) << "Failed opening key " << dist->GetStateKey()
652 << " to update app channels; result: " << result;
653 }
658 } 654 }
659 } 655 }
660 } else { 656 } else {
661 LOG(ERROR) << "Failed opening key " << state_key_ 657 LOG(ERROR) << "Failed opening key " << state_key_
662 << " to update app channels; result: " << result; 658 << " to update app channels; result: " << result;
663 } 659 }
664 } 660 }
665 661
666 void InstallerState::WriteInstallerResult( 662 void InstallerState::WriteInstallerResult(
667 InstallStatus status, 663 InstallStatus status,
(...skipping 19 matching lines...) Expand all
687 } 683 }
688 if (!install_list->Do()) 684 if (!install_list->Do())
689 LOG(ERROR) << "Failed to record installer error information in registry."; 685 LOG(ERROR) << "Failed to record installer error information in registry.";
690 } 686 }
691 687
692 bool InstallerState::RequiresActiveSetup() const { 688 bool InstallerState::RequiresActiveSetup() const {
693 return system_install() && FindProduct(BrowserDistribution::CHROME_BROWSER); 689 return system_install() && FindProduct(BrowserDistribution::CHROME_BROWSER);
694 } 690 }
695 691
696 } // namespace installer 692 } // namespace installer
OLDNEW
« no previous file with comments | « chrome/installer/util/installer_state.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698