Index: chrome/installer/util/shell_util.cc |
diff --git a/chrome/installer/util/shell_util.cc b/chrome/installer/util/shell_util.cc |
index fd1c0d8e61dfeb468135a7947715fc7d5d24ed70..ba9febf39cf50ba1b85b5e87fb840cf3e0d6b699 100644 |
--- a/chrome/installer/util/shell_util.cc |
+++ b/chrome/installer/util/shell_util.cc |
@@ -240,11 +240,10 @@ class RegistryEntry { |
// <root hkey>\Software\Classes\<app_id>\.exe\shell @=open |
entries->push_back(new RegistryEntry(model_id_shell, |
- ShellUtil::kRegVerbOpen)); |
+ ShellUtil::kRegVerbOpen)); |
const wchar_t* const verbs[] = { ShellUtil::kRegVerbOpen, |
- ShellUtil::kRegVerbOpenNewWindow, |
- ShellUtil::kRegVerbRun }; |
+ ShellUtil::kRegVerbOpenNewWindow }; |
for (size_t i = 0; i < arraysize(verbs); ++i) { |
string16 sub_path(model_id_shell); |
sub_path.push_back(FilePath::kSeparators[0]); |
@@ -1016,6 +1015,30 @@ base::win::ShortcutProperties GetShortcutPropertiesFromChromeShortcutProperties( |
return shortcut_properties; |
} |
+// Cleans up an old verb (run) we used to register in |
+// <root>\Software\Classes\Chrome<.suffix>\.exe\shell\run on Windows 8. |
+// TODO (gab): This was fixed before the general availability of Windows 8 and |
+// thus can safely be removed in February 2013. |
+void RemoveRunVerbOnWindows8( |
+ BrowserDistribution* dist, |
+ const string16& chrome_exe) { |
+ if (IsChromeMetroSupported()) { |
+ bool is_per_user_install =InstallUtil::IsPerUserInstall(chrome_exe.c_str()); |
+ HKEY root_key = DetermineShellIntegrationRoot(is_per_user_install); |
+ // There's no need to rollback, so forgo the usual work item lists and just |
+ // remove the key from the registry. |
+ string16 run_verb_key(ShellUtil::kRegClasses); |
+ run_verb_key.push_back(FilePath::kSeparators[0]); |
+ run_verb_key.append(ShellUtil::GetBrowserModelId( |
+ dist, is_per_user_install)); |
+ run_verb_key.append(ShellUtil::kRegExePath); |
+ run_verb_key.append(ShellUtil::kRegShellPath); |
+ run_verb_key.push_back(FilePath::kSeparators[0]); |
+ run_verb_key.append(ShellUtil::kRegVerbRun); |
+ InstallUtil::DeleteRegistryKey(root_key, run_verb_key); |
+ } |
+} |
+ |
// Gets the short (8.3) form of |path|, putting the result in |short_path| and |
// returning true on success. |short_path| is not modified on failure. |
bool ShortNameFromPath(const FilePath& path, string16* short_path) { |
@@ -1694,6 +1717,9 @@ bool ShellUtil::RegisterChromeBrowser(BrowserDistribution* dist, |
// TODO(grt): remove this on or after 2012-08-01; see impl for details. |
RemoveBadWindows8RegistrationIfNeeded(dist, chrome_exe); |
+ // TODO(gab): remove this on or after 2013-02-01; see impl for details. |
+ RemoveRunVerbOnWindows8(dist, chrome_exe); |
+ |
// Check if Chromium is already registered with this suffix. |
if (IsChromeRegistered(dist, chrome_exe, suffix)) |
return true; |