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

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

Issue 10703155: Merge 145596 - Use a better registration suffix that will always be unique while respecting the MSD… (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1180/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
« no previous file with comments | « no previous file | chrome/installer/util/shell_util.h » ('j') | 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 // This file defines the methods useful for uninstalling Chrome. 5 // This file defines the methods useful for uninstalling Chrome.
6 6
7 #include "chrome/installer/setup/uninstall.h" 7 #include "chrome/installer/setup/uninstall.h"
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 // well anyways. 526 // well anyways.
527 string16 html_prog_id(ShellUtil::kRegClasses); 527 string16 html_prog_id(ShellUtil::kRegClasses);
528 html_prog_id.push_back(FilePath::kSeparators[0]); 528 html_prog_id.push_back(FilePath::kSeparators[0]);
529 html_prog_id.append(ShellUtil::kChromeHTMLProgId); 529 html_prog_id.append(ShellUtil::kChromeHTMLProgId);
530 html_prog_id.append(browser_entry_suffix); 530 html_prog_id.append(browser_entry_suffix);
531 InstallUtil::DeleteRegistryKey(root, html_prog_id); 531 InstallUtil::DeleteRegistryKey(root, html_prog_id);
532 532
533 // Delete Software\Classes\Chrome (Same comment as above applies for this too) 533 // Delete Software\Classes\Chrome (Same comment as above applies for this too)
534 string16 chrome_app_id(ShellUtil::kRegClasses); 534 string16 chrome_app_id(ShellUtil::kRegClasses);
535 chrome_app_id.push_back(FilePath::kSeparators[0]); 535 chrome_app_id.push_back(FilePath::kSeparators[0]);
536 if (browser_entry_suffix.empty()) { 536 // Append the requested suffix manually here (as ShellUtil::GetBrowserModelId
537 // An unsuffixed appid used to be registered on some user-level install 537 // would otherwise try to figure out the currently installed suffix).
538 // (dev-channel 21.0.1171.0). Make sure it gets cleaned up here. 538 chrome_app_id.append(dist->GetBaseAppId() + browser_entry_suffix);
539 // Note: this couldn't be cleaned on update as a currently running old
540 // chrome might still be using the unsuffixed appid when the registration
541 // update steps run.
542 InstallUtil::DeleteRegistryKey(root, chrome_app_id + dist->GetBaseAppId());
543 }
544 chrome_app_id.append(ShellUtil::GetBrowserModelId(dist, chrome_exe.value()));
545 InstallUtil::DeleteRegistryKey(root, chrome_app_id); 539 InstallUtil::DeleteRegistryKey(root, chrome_app_id);
546 540
547 // Delete all Start Menu Internet registrations that refer to this Chrome. 541 // Delete all Start Menu Internet registrations that refer to this Chrome.
548 { 542 {
549 using base::win::RegistryKeyIterator; 543 using base::win::RegistryKeyIterator;
550 InstallUtil::ProgramCompare open_command_pred(chrome_exe); 544 InstallUtil::ProgramCompare open_command_pred(chrome_exe);
551 string16 client_name; 545 string16 client_name;
552 string16 client_key; 546 string16 client_key;
553 string16 open_key; 547 string16 open_key;
554 for (RegistryKeyIterator iter(root, ShellUtil::kRegStartMenuInternet); 548 for (RegistryKeyIterator iter(root, ShellUtil::kRegStartMenuInternet);
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 // If the user's Chrome is registered with a suffix: it is possible that old 796 // If the user's Chrome is registered with a suffix: it is possible that old
803 // unsuffixed registrations were left in HKCU (e.g. if this install was 797 // unsuffixed registrations were left in HKCU (e.g. if this install was
804 // previously installed with no suffix in HKCU (old suffix rules if the user 798 // previously installed with no suffix in HKCU (old suffix rules if the user
805 // is not an admin (or declined UAC at first run)) and later had to be 799 // is not an admin (or declined UAC at first run)) and later had to be
806 // suffixed when fully registered in HKLM (e.g. when later making Chrome 800 // suffixed when fully registered in HKLM (e.g. when later making Chrome
807 // default through the UI)). 801 // default through the UI)).
808 // Remove remaining HKCU entries with no suffix if any. 802 // Remove remaining HKCU entries with no suffix if any.
809 if (!suffix.empty()) { 803 if (!suffix.empty()) {
810 DeleteChromeRegistrationKeys(browser_dist, HKEY_CURRENT_USER, string16(), 804 DeleteChromeRegistrationKeys(browser_dist, HKEY_CURRENT_USER, string16(),
811 installer_state.target_path(), &ret); 805 installer_state.target_path(), &ret);
806
807 // For similar reasons it is possible in very few installs (from 21.0.1180.0
808 // and fixed shortly after) to be installed with the new-style suffix, but
809 // have some old-style suffix registrations left behind.
810 string16 old_style_suffix;
811 if (ShellUtil::GetOldUserSpecificRegistrySuffix(&old_style_suffix) &&
812 suffix != old_style_suffix) {
813 DeleteChromeRegistrationKeys(browser_dist, HKEY_CURRENT_USER,
814 old_style_suffix,
815 installer_state.target_path(), &ret);
816 }
812 } 817 }
813 818
814 // Chrome is registered in HKLM for all system-level installs and for 819 // Chrome is registered in HKLM for all system-level installs and for
815 // user-level installs for which Chrome has been made the default browser. 820 // user-level installs for which Chrome has been made the default browser.
816 // Always remove the HKLM registration for system-level installs. For 821 // Always remove the HKLM registration for system-level installs. For
817 // user-level installs, only remove it if both: 1) this uninstall isn't a self 822 // user-level installs, only remove it if both: 1) this uninstall isn't a self
818 // destruct following the installation of a system-level Chrome (because the 823 // destruct following the installation of a system-level Chrome (because the
819 // system-level Chrome owns the HKLM registration now), and 2) this user has 824 // system-level Chrome owns the HKLM registration now), and 2) this user has
820 // made Chrome their default browser (i.e. has shell integration entries 825 // made Chrome their default browser (i.e. has shell integration entries
821 // registered with |suffix| (note: |suffix| will be the empty string if 826 // registered with |suffix| (note: |suffix| will be the empty string if
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 962
958 // Try and delete the preserved local state once the post-install 963 // Try and delete the preserved local state once the post-install
959 // operations are complete. 964 // operations are complete.
960 if (!backup_state_file.empty()) 965 if (!backup_state_file.empty())
961 file_util::Delete(backup_state_file, false); 966 file_util::Delete(backup_state_file, false);
962 967
963 return ret; 968 return ret;
964 } 969 }
965 970
966 } // namespace installer 971 } // namespace installer
OLDNEW
« no previous file with comments | « no previous file | chrome/installer/util/shell_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698