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

Unified Diff: chrome/browser/shell_integration.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: 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/browser/shell_integration.h
diff --git a/chrome/browser/shell_integration.h b/chrome/browser/shell_integration.h
index 575575e9175ecc92cc9f805e1c3f5acca2e4febd..b91d7db6fc0be05e1a31486fd84fa29fde06dfd4 100644
--- a/chrome/browser/shell_integration.h
+++ b/chrome/browser/shell_integration.h
@@ -30,26 +30,35 @@ class ShellIntegration {
// this operation fails.
static bool SetAsDefaultBrowser();
+ // Sets Chrome as client application for the given protocol (only for
+ // current user). Returns false if this operation fails.
+ static bool SetAsDefaultProtocolClient(const std::string& protocol);
+
// On Linux, it may not be possible to determine or set the default browser
// on some desktop environments or configurations. So, we use this enum and
// not a plain bool. (Note however that if used like a bool, this enum will
// have reasonable behavior.)
- enum DefaultBrowserState {
- NOT_DEFAULT_BROWSER = 0,
- IS_DEFAULT_BROWSER,
- UNKNOWN_DEFAULT_BROWSER
+ enum DefaultClientAppState {
Mark Mentovai 2011/05/23 00:23:52 In isolation, DefaultClientAppState doesn’t tell m
benwells 2011/05/23 06:08:37 Agreed, it doesn't say enough. I avoided the word
benwells 2011/05/24 06:10:38 Done.
+ NOT_DEFAULT_CLIENT_APP = 0,
+ IS_DEFAULT_CLIENT_APP,
+ UNKNOWN_DEFAULT_CLIENT_APP
Mark Mentovai 2011/05/23 00:23:52 My own preference would be for the UNKNOWN element
benwells 2011/05/24 06:10:38 Done.
};
// Attempt to determine if this instance of Chrome is the default browser and
// return the appropriate state. (Defined as being the handler for HTTP/HTTPS
// protocols; we don't want to report "no" here if the user has simply chosen
// to open HTML files in a text editor and FTP links with an FTP client.)
- static DefaultBrowserState IsDefaultBrowser();
+ static DefaultClientAppState IsDefaultBrowser();
// Returns true if Firefox is likely to be the default browser for the current
// user. This method is very fast so it can be invoked in the UI thread.
static bool IsFirefoxDefaultBrowser();
+ // Attempt to determine if this instance of Chrome is the default client
+ // application for the given protocol and return the appropriate state.
+ static DefaultClientAppState
+ IsDefaultProtocolClient(const std::string& protocol);
+
struct ShortcutInfo {
ShortcutInfo();
~ShortcutInfo();
@@ -123,65 +132,70 @@ class ShellIntegration {
static void MigrateChromiumShortcuts();
#endif // defined(OS_WIN)
- // The current default browser UI state
- enum DefaultBrowserUIState {
+ // The current default browser / client application UI state
+ enum DefaultClientAppUIState {
STATE_PROCESSING,
STATE_NOT_DEFAULT,
STATE_IS_DEFAULT,
STATE_UNKNOWN
};
- class DefaultBrowserObserver {
+ class DefaultClientAppObserver {
public:
// Updates the UI state to reflect the current default browser state.
- virtual void SetDefaultBrowserUIState(DefaultBrowserUIState state) = 0;
- virtual ~DefaultBrowserObserver() {}
+ virtual void SetDefaultClientAppUIState(DefaultClientAppUIState state) = 0;
+ virtual ~DefaultClientAppObserver() {}
};
- // A helper object that handles checking if Chrome is the default browser on
- // Windows and also setting it as the default browser. These operations are
- // performed asynchronously on the file thread since registry access is
- // involved and this can be slow.
- //
- class DefaultBrowserWorker
- : public base::RefCountedThreadSafe<DefaultBrowserWorker> {
+ // A helper object that handles checking if Chrome is the default browser
+ // or application for a url protocol on Windows and Linux, and also setting
+ // it as the default. These operations are performed asynchronously on the
+ // file thread since registry access is involved and this can be slow.
Mark Mentovai 2011/05/23 00:23:52 Any comment in this file that mentions the “regist
benwells 2011/05/24 06:10:38 Done.
+ class DefaultClientAppWorker
Mark Mentovai 2011/05/23 00:23:52 I believe that this interface is now too cumbersom
benwells 2011/05/23 06:08:37 Yes, there would be some hazard if you tried to re
benwells 2011/05/24 06:10:38 Done.
+ : public base::RefCountedThreadSafe<DefaultClientAppWorker> {
public:
- explicit DefaultBrowserWorker(DefaultBrowserObserver* observer);
+ explicit DefaultClientAppWorker(DefaultClientAppObserver* observer);
- // Checks if Chrome is the default browser.
+ // Checks to see if Chrome is the default browser or protocol client.
void StartCheckDefaultBrowser();
+ void StartCheckDefaultProtocolClient(const std::string& protocol);
- // Sets Chrome as the default browser.
+ // Sets Chrome as the default browser or protocol client.
void StartSetAsDefaultBrowser();
+ void StartSetAsDefaultProtocolClient(const std::string& protocol);
// Called to notify the worker that the view is gone.
void ObserverDestroyed();
private:
- friend class base::RefCountedThreadSafe<DefaultBrowserWorker>;
+ friend class base::RefCountedThreadSafe<DefaultClientAppWorker>;
- virtual ~DefaultBrowserWorker() {}
+ virtual ~DefaultClientAppWorker() {}
// Functions that track the process of checking if Chrome is the default
- // browser. |ExecuteCheckDefaultBrowser| checks the registry on the file
- // thread. |CompleteCheckDefaultBrowser| notifies the view to update on the
+ // browser. |ExecuteCheckDefault*| checks the registry on the file thread.
+ // |CompleteCheckDefaultApplication| notifies the view to update on the
// UI thread.
void ExecuteCheckDefaultBrowser();
- void CompleteCheckDefaultBrowser(DefaultBrowserState state);
+ void ExecuteCheckDefaultProtocolClient();
+ void CompleteCheckDefaultApplication(DefaultClientAppState state);
// Functions that track the process of setting Chrome as the default
- // browser. |ExecuteSetAsDefaultBrowser| updates the registry on the file
- // thread. |CompleteSetAsDefaultBrowser| notifies the view to update on the
+ // browser. |ExecuteSetAsDefault*| updates the registry on the file
+ // thread. |CompleteSetAsDefault*| notifies the view to update on the
// UI thread.
void ExecuteSetAsDefaultBrowser();
+ void ExecuteSetAsDefaultProtocolClient();
void CompleteSetAsDefaultBrowser();
+ void CompleteSetAsDefaultProtocolClient();
// Updates the UI in our associated view with the current default browser
// state.
- void UpdateUI(DefaultBrowserState state);
+ void UpdateUI(DefaultClientAppState state);
- DefaultBrowserObserver* observer_;
+ DefaultClientAppObserver* observer_;
+ std::string protocol_;
- DISALLOW_COPY_AND_ASSIGN(DefaultBrowserWorker);
+ DISALLOW_COPY_AND_ASSIGN(DefaultClientAppWorker);
};
};

Powered by Google App Engine
This is Rietveld 408576698