diff options
author | rickcam@chromium.org <rickcam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-28 00:51:09 +0000 |
---|---|---|
committer | rickcam@chromium.org <rickcam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-28 00:51:09 +0000 |
commit | e0ba360bbe5502a91a676dd84cb00ada53bc3fb3 (patch) | |
tree | 665a85a8052b0ed0d3a5858a4e600706887af046 | |
parent | cd105f8b13e94f56514b0881d8c875fab520b026 (diff) | |
download | chromium_src-e0ba360bbe5502a91a676dd84cb00ada53bc3fb3.zip chromium_src-e0ba360bbe5502a91a676dd84cb00ada53bc3fb3.tar.gz chromium_src-e0ba360bbe5502a91a676dd84cb00ada53bc3fb3.tar.bz2 |
Implemented Launch-on-OS-login on Windows
BUG=43382
TEST=none
Review URL: http://codereview.chromium.org/3140033
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57763 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/background_mode_manager.cc | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/chrome/browser/background_mode_manager.cc b/chrome/browser/background_mode_manager.cc index 4fe5e2e..22060c0 100644 --- a/chrome/browser/background_mode_manager.cc +++ b/chrome/browser/background_mode_manager.cc @@ -4,7 +4,10 @@ #include "app/l10n_util.h" #include "app/resource_bundle.h" +#include "base/base_paths.h" #include "base/command_line.h" +#include "base/logging.h" +#include "base/path_service.h" #include "chrome/app/chrome_dll_resource.h" #include "chrome/browser/background_mode_manager.h" #include "chrome/browser/browser_list.h" @@ -31,6 +34,14 @@ #include "chrome/browser/gtk/gtk_util.h" #endif +#if defined(OS_WIN) +#include "base/registry.h" +const HKEY kBackgroundModeRegistryRootKey = HKEY_CURRENT_USER; +const wchar_t* kBackgroundModeRegistrySubkey = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Run"; +const wchar_t* kBackgroundModeRegistryKeyName = L"chromium"; +#endif + BackgroundModeManager::BackgroundModeManager(Profile* profile) : profile_(profile), background_app_count_(0), @@ -191,7 +202,6 @@ void BackgroundModeManager::OnBackgroundAppUninstalled() { void BackgroundModeManager::EnableLaunchOnStartup(bool should_launch) { // TODO(BUG43382): Add code for other platforms to enable/disable launch on // startup. - // This functionality is only defined for default profile, currently. if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kUserDataDir)) return; @@ -220,6 +230,32 @@ void BackgroundModeManager::EnableLaunchOnStartup(bool should_launch) { mac_util::RemoveFromLoginItems(); } +#elif defined(OS_WIN) + // TODO(BUG53597): Make RegKey mockable by adding virtual destructor and + // factory method. + // TODO(BUG53600): Use distinct registry keys per flavor of chromium and + // profile. + const wchar_t* key_name = kBackgroundModeRegistryKeyName; + RegKey read_key(kBackgroundModeRegistryRootKey, + kBackgroundModeRegistrySubkey, KEY_READ); + RegKey write_key(kBackgroundModeRegistryRootKey, + kBackgroundModeRegistrySubkey, KEY_WRITE); + if (should_launch) { + FilePath executable; + if (!PathService::Get(base::FILE_EXE, &executable)) + return; + if (read_key.ValueExists(key_name)) { + std::wstring current_value; + if (read_key.ReadValue(key_name, ¤t_value) && + (current_value == executable.value())) + return; + } + if (!write_key.WriteValue(key_name, executable.value().c_str())) + LOG(WARNING) << "Failed to register launch on login."; + } else { + if (read_key.ValueExists(key_name) && !write_key.DeleteValue(key_name)) + LOG(WARNING) << "Failed to deregister launch on login."; + } #endif } |