summaryrefslogtreecommitdiffstats
path: root/cloud_print
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-27 22:19:49 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-27 22:19:49 +0000
commitac3d98c703d0c3410dfea86c852d469096c9add9 (patch)
treea5ad926c93ab21877c463c36436462adc7924b8d /cloud_print
parent5bd4c4be34fcaec1e41d4753f0734b189ac9563e (diff)
downloadchromium_src-ac3d98c703d0c3410dfea86c852d469096c9add9.zip
chromium_src-ac3d98c703d0c3410dfea86c852d469096c9add9.tar.gz
chromium_src-ac3d98c703d0c3410dfea86c852d469096c9add9.tar.bz2
Remove autorun values if it points to the same user data as service.
BUG=224219 Review URL: https://chromiumcodereview.appspot.com/13042016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@191050 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cloud_print')
-rw-r--r--cloud_print/service/win/chrome_launcher.cc39
-rw-r--r--cloud_print/service/win/cloud_print_service.cc1
2 files changed, 40 insertions, 0 deletions
diff --git a/cloud_print/service/win/chrome_launcher.cc b/cloud_print/service/win/chrome_launcher.cc
index 523b72d..413bf58 100644
--- a/cloud_print/service/win/chrome_launcher.cc
+++ b/cloud_print/service/win/chrome_launcher.cc
@@ -6,8 +6,10 @@
#include "base/base_switches.h"
#include "base/command_line.h"
+#include "base/file_util.h"
#include "base/process.h"
#include "base/process_util.h"
+#include "base/win/registry.h"
#include "base/win/scoped_handle.h"
#include "base/win/scoped_process_information.h"
#include "chrome/common/chrome_switches.h"
@@ -17,6 +19,9 @@ namespace {
const int kShutdownTimeoutMs = 30 * 1000;
+static const char16 kAutoRunKeyPath[] =
+ L"Software\\Microsoft\\Windows\\CurrentVersion\\Run";
+
void ShutdownChrome(HANDLE process, DWORD thread_id) {
if (::PostThreadMessage(thread_id, WM_QUIT, 0, 0) &&
WAIT_OBJECT_0 == ::WaitForSingleObject(process, kShutdownTimeoutMs)) {
@@ -50,6 +55,39 @@ bool LaunchProcess(const CommandLine& cmdline,
return true;
}
+void DeleteAutorunKeys(const base::FilePath& user_data_dir) {
+ base::win::RegKey key(HKEY_CURRENT_USER, kAutoRunKeyPath, KEY_SET_VALUE);
+ if (!key.Valid())
+ return;
+ std::vector<string16> to_delete;
+
+ base::FilePath abs_user_data_dir = user_data_dir;
+ file_util::AbsolutePath(&abs_user_data_dir);
+
+ {
+ base::win::RegistryValueIterator value(HKEY_CURRENT_USER, kAutoRunKeyPath);
+ for (; value.Valid(); ++value) {
+ if (value.Type() == REG_SZ && value.Value()) {
+ CommandLine cmd = CommandLine::FromString(value.Value());
+ if (cmd.GetSwitchValueASCII(switches::kProcessType) ==
+ switches::kServiceProcess &&
+ cmd.HasSwitch(switches::kUserDataDir)) {
+ base::FilePath path_from_reg =
+ cmd.GetSwitchValuePath(switches::kUserDataDir);
+ file_util::AbsolutePath(&path_from_reg);
+ if (path_from_reg == abs_user_data_dir) {
+ to_delete.push_back(value.Name());
+ }
+ }
+ }
+ }
+ }
+
+ for (size_t i = 0; i < to_delete.size(); ++i) {
+ key.DeleteValue(to_delete[i].c_str());
+ }
+}
+
} // namespace
ChromeLauncher::ChromeLauncher(const base::FilePath& user_data)
@@ -61,6 +99,7 @@ ChromeLauncher::~ChromeLauncher() {
}
bool ChromeLauncher::Start() {
+ DeleteAutorunKeys(user_data_);
stop_event_.Reset();
thread_.reset(new base::DelegateSimpleThread(this, "chrome_launcher"));
thread_->Start();
diff --git a/cloud_print/service/win/cloud_print_service.cc b/cloud_print/service/win/cloud_print_service.cc
index 9a04f15..467c247 100644
--- a/cloud_print/service/win/cloud_print_service.cc
+++ b/cloud_print/service/win/cloud_print_service.cc
@@ -182,6 +182,7 @@ class CloudPrintServiceModule
user_data_dir_switch_ =
command_line.GetSwitchValuePath(switches::kUserDataDir);
+ file_util::AbsolutePath(&user_data_dir_switch_);
if (command_line.HasSwitch(kStopSwitch))
return controller_->StopService();