summaryrefslogtreecommitdiffstats
path: root/cloud_print
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-27 12:14:08 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-27 12:14:08 +0000
commit7fa31dc15967c5135216525641616e6874abcea5 (patch)
tree0070b07439fde41b18106d5a002b15e3a4b7240d /cloud_print
parent60636c5d659d115290bd9d9d12085c3e24c90e8e (diff)
downloadchromium_src-7fa31dc15967c5135216525641616e6874abcea5.zip
chromium_src-7fa31dc15967c5135216525641616e6874abcea5.tar.gz
chromium_src-7fa31dc15967c5135216525641616e6874abcea5.tar.bz2
Make --user-data-dir optional.
BUG=223485 Review URL: https://chromiumcodereview.appspot.com/12521031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@190906 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cloud_print')
-rw-r--r--cloud_print/service/win/cloud_print_service.cc48
-rw-r--r--cloud_print/service/win/service_controller.cc3
2 files changed, 32 insertions, 19 deletions
diff --git a/cloud_print/service/win/cloud_print_service.cc b/cloud_print/service/win/cloud_print_service.cc
index 7c6b289..90773cf 100644
--- a/cloud_print/service/win/cloud_print_service.cc
+++ b/cloud_print/service/win/cloud_print_service.cc
@@ -28,6 +28,7 @@
namespace {
+const wchar_t kAppDataSubDir[] = L"Google\\Cloud Printe Service";
const wchar_t kServiceStateFileName[] = L"Service State";
void InvalidUsage() {
@@ -40,7 +41,7 @@ void InvalidUsage() {
std::cout << "[";
std::cout << "[";
std::cout << " -" << kInstallSwitch;
- std::cout << " -" << switches::kUserDataDir << "=DIRECTORY";
+ std::cout << " [ -" << switches::kUserDataDir << "=DIRECTORY ]";
std::cout << "]";
std::cout << "]";
std::cout << " | -" << kUninstallSwitch;
@@ -179,7 +180,8 @@ class CloudPrintServiceModule
return E_INVALIDARG;
*is_service = false;
- user_data_dir_ = command_line.GetSwitchValuePath(switches::kUserDataDir);
+ user_data_dir_switch_ =
+ command_line.GetSwitchValuePath(switches::kUserDataDir);
if (command_line.HasSwitch(kStopSwitch))
return controller_->StopService();
@@ -187,21 +189,20 @@ class CloudPrintServiceModule
return controller_->UninstallService();
if (command_line.HasSwitch(kInstallSwitch)) {
- if (!command_line.HasSwitch(switches::kUserDataDir)) {
- InvalidUsage();
- return S_FALSE;
- }
-
string16 run_as_user;
string16 run_as_password;
- SelectWindowsAccount(&run_as_user, &run_as_password);
+ base::FilePath user_data_dir;
+ SelectWindowsAccount(&run_as_user, &run_as_password, &user_data_dir);
+ DCHECK(user_data_dir_switch_.empty() ||
+ user_data_dir_switch_ == user_data_dir);
- HRESULT hr = SetupServiceState();
+ HRESULT hr = SetupServiceState(user_data_dir);
if (FAILED(hr))
return hr;
hr = controller_->InstallService(run_as_user, run_as_password,
- kServiceSwitch, user_data_dir_, true);
+ kServiceSwitch, user_data_dir_switch_,
+ true);
if (SUCCEEDED(hr) && command_line.HasSwitch(kStartSwitch))
return controller_->StartService();
@@ -231,7 +232,8 @@ class CloudPrintServiceModule
return S_FALSE;
}
- void SelectWindowsAccount(string16* run_as_user, string16* run_as_password) {
+ void SelectWindowsAccount(string16* run_as_user, string16* run_as_password,
+ base::FilePath* user_data_dir) {
*run_as_user = GetCurrentUserName();
for (;;) {
std::cout << "\nPlease provide Windows account to run service.\n";
@@ -242,7 +244,7 @@ class CloudPrintServiceModule
SetupListener setup(*run_as_user);
if (FAILED(controller_->InstallService(*run_as_user, *run_as_password,
kRequirementsSwitch,
- user_data_dir_, false))) {
+ user_data_dir_switch_, false))) {
LOG(ERROR) << "Failed to install service as " << *run_as_user << ".";
continue;
}
@@ -261,7 +263,7 @@ class CloudPrintServiceModule
continue;
}
if (setup.user_data_dir().empty()) {
- LOG(ERROR) << "Service can't access " << user_data_dir_.value() << ".";
+ LOG(ERROR) << "Service can't access user data dir.";
continue;
}
if (setup.chrome_path().empty()) {
@@ -276,18 +278,20 @@ class CloudPrintServiceModule
std::cout << "\nService requirements check result: \n";
std::cout << "Username: " << setup.user_name()<< "\n";
std::cout << "Chrome: " << setup.chrome_path().value()<< "\n";
+ std::cout << "UserDataDir: " << setup.user_data_dir().value()<< "\n";
std::cout << "Printers:\n ";
std::ostream_iterator<std::string> cout_it(std::cout, "\n ");
std::copy(setup.printers().begin(), setup.printers().end(), cout_it);
std::cout << "\n";
+ *user_data_dir = setup.user_data_dir();
if (AskUser("Do you want to use " + WideToASCII(*run_as_user) + "?"))
return;
}
}
- HRESULT SetupServiceState() {
- base::FilePath file = user_data_dir_.Append(kServiceStateFileName);
+ HRESULT SetupServiceState(const base::FilePath& user_data_dir) {
+ base::FilePath file = user_data_dir.Append(kServiceStateFileName);
for (;;) {
std::string contents;
@@ -338,11 +342,11 @@ class CloudPrintServiceModule
}
void CheckRequirements() {
- setup_listener_.reset(new ServiceListener(user_data_dir_));
+ setup_listener_.reset(new ServiceListener(GetUserDataDir()));
}
HRESULT StartConnector() {
- chrome_.reset(new ChromeLauncher(user_data_dir_));
+ chrome_.reset(new ChromeLauncher(GetUserDataDir()));
return chrome_->Start() ? S_OK : E_FAIL;
}
@@ -353,10 +357,18 @@ class CloudPrintServiceModule
}
}
+ base::FilePath GetUserDataDir() const {
+ if (!user_data_dir_switch_.empty())
+ return user_data_dir_switch_;
+ base::FilePath result;
+ CHECK(PathService::Get(base::DIR_LOCAL_APP_DATA, &result));
+ return result.Append(kAppDataSubDir);
+ }
+
static BOOL WINAPI ConsoleCtrlHandler(DWORD type);
bool check_requirements_;
- base::FilePath user_data_dir_;
+ base::FilePath user_data_dir_switch_;
scoped_ptr<ChromeLauncher> chrome_;
scoped_ptr<ServiceController> controller_;
scoped_ptr<ServiceListener> setup_listener_;
diff --git a/cloud_print/service/win/service_controller.cc b/cloud_print/service/win/service_controller.cc
index 2c441cb..95397ef 100644
--- a/cloud_print/service/win/service_controller.cc
+++ b/cloud_print/service/win/service_controller.cc
@@ -130,7 +130,8 @@ HRESULT ServiceController::InstallService(const string16& user,
CHECK(PathService::Get(base::FILE_EXE, &service_path));
CommandLine command_line(service_path);
command_line.AppendSwitch(run_switch);
- command_line.AppendSwitchPath(switches::kUserDataDir, user_data_dir);
+ if (!user_data_dir.empty())
+ command_line.AppendSwitchPath(switches::kUserDataDir, user_data_dir);
LocalSecurityPolicy local_security_policy;
if (local_security_policy.Open()) {