summaryrefslogtreecommitdiffstats
path: root/chrome/browser/shell_integration.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/shell_integration.h')
-rw-r--r--chrome/browser/shell_integration.h176
1 files changed, 176 insertions, 0 deletions
diff --git a/chrome/browser/shell_integration.h b/chrome/browser/shell_integration.h
new file mode 100644
index 0000000..a468a46
--- /dev/null
+++ b/chrome/browser/shell_integration.h
@@ -0,0 +1,176 @@
+// Copyright (c) 2010 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.
+
+#ifndef CHROME_BROWSER_SHELL_INTEGRATION_H_
+#define CHROME_BROWSER_SHELL_INTEGRATION_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/ref_counted.h"
+#include "base/string16.h"
+#include "googleurl/src/gurl.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+
+class FilePath;
+
+#if defined(USE_X11)
+namespace base {
+class EnvVarGetter;
+}
+#endif
+
+class ShellIntegration {
+ public:
+ // Sets Chrome as default browser (only for current user). Returns false if
+ // this operation fails.
+ static bool SetAsDefaultBrowser();
+
+ // 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
+ };
+
+ // 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();
+
+ // 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();
+
+ struct ShortcutInfo {
+ GURL url;
+ // If |extension_id| is non-empty, this is short cut is to an extension-app
+ // and the launch url will be detected at start-up. In this case, |url|
+ // is still used to generate the app id (windows app id, not chrome app id).
+ string16 extension_id;
+ string16 title;
+ string16 description;
+ SkBitmap favicon;
+
+ bool create_on_desktop;
+ bool create_in_applications_menu;
+
+ // For Windows, this refers to quick launch bar prior to Win7. In Win7,
+ // this means "pin to taskbar". For Mac/Linux, this could be used for
+ // Mac dock or the gnome/kde application launcher. However, those are not
+ // implemented yet.
+ bool create_in_quick_launch_bar;
+ };
+
+ // Re-implementation of chrome_plugin_utill::CPB_GetCommandLineArgumentsCommon
+ // which is deprecated. If |extension_app_id| is non-empty, an arguments
+ // string is created using the kAppId=<id> flag. Otherwise, the kApp=<url> is
+ // used.
+ // FIXME This function is dangerous, do not use! You cannot treat
+ // command lines as plain strings as there are metacharacters.
+ static std::string GetCommandLineArgumentsCommon(const GURL& url,
+ const string16& extension_app_id);
+
+#if defined(USE_X11)
+ static bool GetDesktopShortcutTemplate(base::EnvVarGetter* env_getter,
+ std::string* output);
+
+ // Returns filename for .desktop file based on |url|, sanitized for security.
+ static FilePath GetDesktopShortcutFilename(const GURL& url);
+
+ // Returns contents for .desktop file based on |template_contents|, |url|
+ // and |title|. The |template_contents| should be contents of .desktop file
+ // used to launch Chrome.
+ static std::string GetDesktopFileContents(
+ const std::string& template_contents, const GURL& url,
+ const string16& extension_id, const string16& title,
+ const std::string& icon_name);
+
+ static void CreateDesktopShortcut(const ShortcutInfo& shortcut_info,
+ const std::string& shortcut_template);
+#endif // defined(USE_X11)
+
+#if defined(OS_WIN)
+ // Generates Win7 app id for given app name and profile path. The returned app
+ // id is in the format of "|app_name|[.<profile_id>]". "profile_id" is
+ // appended when user override the default value.
+ static std::wstring GetAppId(const std::wstring& app_name,
+ const FilePath& profile_path);
+
+ // Generates Win7 app id for Chromium by calling GetAppId with
+ // chrome::kBrowserAppID as app_name.
+ static std::wstring GetChromiumAppId(const FilePath& profile_path);
+
+ // Migrates existing chrome shortcuts by tagging them with correct app id.
+ // see http://crbug.com/28104
+ static void MigrateChromiumShortcuts();
+#endif // defined(OS_WIN)
+
+ // The current default browser UI state
+ enum DefaultBrowserUIState {
+ STATE_PROCESSING,
+ STATE_NOT_DEFAULT,
+ STATE_IS_DEFAULT,
+ STATE_UNKNOWN
+ };
+
+ class DefaultBrowserObserver {
+ public:
+ // Updates the UI state to reflect the current default browser state.
+ virtual void SetDefaultBrowserUIState(DefaultBrowserUIState state) = 0;
+ virtual ~DefaultBrowserObserver() {}
+ };
+ // 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> {
+ public:
+ explicit DefaultBrowserWorker(DefaultBrowserObserver* observer);
+
+ // Checks if Chrome is the default browser.
+ void StartCheckDefaultBrowser();
+
+ // Sets Chrome as the default browser.
+ void StartSetAsDefaultBrowser();
+
+ // Called to notify the worker that the view is gone.
+ void ObserverDestroyed();
+
+ private:
+ friend class base::RefCountedThreadSafe<DefaultBrowserWorker>;
+
+ virtual ~DefaultBrowserWorker() {}
+
+ // 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
+ // UI thread.
+ void ExecuteCheckDefaultBrowser();
+ void CompleteCheckDefaultBrowser(DefaultBrowserState 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
+ // UI thread.
+ void ExecuteSetAsDefaultBrowser();
+ void CompleteSetAsDefaultBrowser();
+
+ // Updates the UI in our associated view with the current default browser
+ // state.
+ void UpdateUI(DefaultBrowserState state);
+
+ DefaultBrowserObserver* observer_;
+
+ DISALLOW_COPY_AND_ASSIGN(DefaultBrowserWorker);
+ };
+};
+
+#endif // CHROME_BROWSER_SHELL_INTEGRATION_H_