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

Unified Diff: chrome/installer/util/shell_util.h

Issue 6961013: Allow chrome to become the os default handler for arbitrary protocols on mac/win. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More changes for comments; fix for a bug introduced with DefaultWebClientWorker refactoring Created 9 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/installer/util/shell_util.h
diff --git a/chrome/installer/util/shell_util.h b/chrome/installer/util/shell_util.h
index b34f4f6da36f3d2898d6902f25332b3935ae78e6..fcb0fb8880c81de45ced4f6325a9ef2dff2e92de 100644
--- a/chrome/installer/util/shell_util.h
+++ b/chrome/installer/util/shell_util.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
@@ -30,6 +30,9 @@ class ShellUtil {
SYSTEM_LEVEL = 0x2 // Make any shell changes only at the system level
};
+ // Relative path of the URL Protocol registry entry (prefixed with '\').
+ static const wchar_t* kRegURLProtocol;
+
// Relative path of DefaultIcon registry entry (prefixed with '\').
static const wchar_t* kRegDefaultIcon;
@@ -69,8 +72,12 @@ class ShellUtil {
// File extensions that Chrome registers itself for.
static const wchar_t* kFileAssociations[];
- // Protocols that Chrome registers itself for.
- static const wchar_t* kProtocolAssociations[];
+ // Protocols that Chrome registers itself as the default handler for
+ // when the user makes Chrome the default browser.
+ static const wchar_t* kBrowserProtocolAssociations[];
+
+ // Protocols that Chrome registers itself as being capable of handling.
+ static const wchar_t* kPotentialProtocolAssociations[];
// Registry value name that is needed for ChromeHTML ProgId
static const wchar_t* kRegUrlProtocol;
@@ -156,7 +163,18 @@ class ShellUtil {
static bool GetUserSpecificDefaultBrowserSuffix(BrowserDistribution* dist,
std::wstring* entry);
- // Make Chrome default browser.
+ // Make Chrome the default browser. This function works by going through
+ // the url protocols and file associations that are related to general
+ // browsing, e.g. http, https, .html etc., and requesting to become the
+ // default handler for each. If any of these fails the operation will return
+ // false to indicate failure, which is consistent with the return value of
+ // ShellIntegration::IsDefaultBrowser.
+ //
+ // In the case of failure any successful changes will be left, however no
+ // more changes will be attempted.
+ // TODO(benwells): Attempt to undo any changes that were successfully made.
+ // http://crbug.com/83970
+ //
// shell_change: Defined whether to register as default browser at system
// level or user level. If value has ShellChange::SYSTEM_LEVEL
// we should be running as admin user.
@@ -168,6 +186,13 @@ class ShellUtil {
const std::wstring& chrome_exe,
bool elevate_if_not_admin);
+ // Make Chrome the default application for a protocol.
+ // chrome_exe: The chrome.exe path to register as default browser.
+ // protocol: The protocol to register as the default handler for.
+ static bool MakeChromeDefaultProtocolClient(BrowserDistribution* dist,
+ const std::wstring& chrome_exe,
+ const std::wstring& protocol);
+
// This method adds Chrome to the list that shows up in Add/Remove Programs->
// Set Program Access and Defaults and also creates Chrome ProgIds under
// Software\Classes. This method requires write access to HKLM so is just
@@ -194,6 +219,29 @@ class ShellUtil {
const std::wstring& unique_suffix,
bool elevate_if_not_admin);
+ // This method declares to Windows that Chrome is capable of handling the
+ // given protocol. This function will call the RegisterChromeBrowser function
+ // to register with Windows as capable of handling the protocol, if it isn't
+ // currently registered as capable.
+ // Declaring the capability of handling a protocol is necessary to register
+ // as the default handler for the protocol in Vista and later versions of
+ // Windows.
+ //
+ // If called by the browser and elevation is required, it will elevate by
+ // calling setup.exe which will again call this function with elevate false.
+ //
+ // |chrome_exe| full path to chrome.exe.
+ // |unique_suffix| Optional input. If given, this function appends the value
+ // to default browser entries names that it creates in the registry.
+ // |protocol| The protocol to register as being capable of handling.s
+ // |elevate_if_not_admin| if true will make this method try alternate methods
+ // as described above.
+ static bool RegisterChromeForProtocol(BrowserDistribution* dist,
+ const std::wstring& chrome_exe,
+ const std::wstring& unique_suffix,
+ const std::wstring& protocol,
+ bool elevate_if_not_admin);
+
// Remove Chrome shortcut from Desktop.
// If shell_change is CURRENT_USER, the shortcut is removed from the
// Desktop folder of current user's profile.

Powered by Google App Engine
This is Rietveld 408576698