OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |