summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrickcam@chromium.org <rickcam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-28 00:51:09 +0000
committerrickcam@chromium.org <rickcam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-28 00:51:09 +0000
commite0ba360bbe5502a91a676dd84cb00ada53bc3fb3 (patch)
tree665a85a8052b0ed0d3a5858a4e600706887af046
parentcd105f8b13e94f56514b0881d8c875fab520b026 (diff)
downloadchromium_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.cc38
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, &current_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
}