diff options
author | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-27 22:19:49 +0000 |
---|---|---|
committer | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-27 22:19:49 +0000 |
commit | ac3d98c703d0c3410dfea86c852d469096c9add9 (patch) | |
tree | a5ad926c93ab21877c463c36436462adc7924b8d /cloud_print/service | |
parent | 5bd4c4be34fcaec1e41d4753f0734b189ac9563e (diff) | |
download | chromium_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/service')
-rw-r--r-- | cloud_print/service/win/chrome_launcher.cc | 39 | ||||
-rw-r--r-- | cloud_print/service/win/cloud_print_service.cc | 1 |
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(); |