| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/service/service_process.h" | 5 #include "chrome/service/service_process.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 static const int64 kShutdownDelay = 60000; | 51 static const int64 kShutdownDelay = 60000; |
| 52 | 52 |
| 53 ServiceProcess::ServiceProcess() | 53 ServiceProcess::ServiceProcess() |
| 54 : shutdown_event_(true, false), | 54 : shutdown_event_(true, false), |
| 55 main_message_loop_(NULL), | 55 main_message_loop_(NULL), |
| 56 enabled_services_(0) { | 56 enabled_services_(0) { |
| 57 DCHECK(!g_service_process); | 57 DCHECK(!g_service_process); |
| 58 g_service_process = this; | 58 g_service_process = this; |
| 59 } | 59 } |
| 60 | 60 |
| 61 bool ServiceProcess::Initialize(MessageLoop* message_loop) { | 61 bool ServiceProcess::Initialize(MessageLoop* message_loop, |
| 62 const CommandLine& command_line) { |
| 62 main_message_loop_ = message_loop; | 63 main_message_loop_ = message_loop; |
| 63 network_change_notifier_.reset(net::NetworkChangeNotifier::Create()); | 64 network_change_notifier_.reset(net::NetworkChangeNotifier::Create()); |
| 64 base::Thread::Options options; | 65 base::Thread::Options options; |
| 65 options.message_loop_type = MessageLoop::TYPE_IO; | 66 options.message_loop_type = MessageLoop::TYPE_IO; |
| 66 io_thread_.reset(new base::Thread("ServiceProcess_IO")); | 67 io_thread_.reset(new base::Thread("ServiceProcess_IO")); |
| 67 file_thread_.reset(new base::Thread("ServiceProcess_File")); | 68 file_thread_.reset(new base::Thread("ServiceProcess_File")); |
| 68 if (!io_thread_->StartWithOptions(options) || | 69 if (!io_thread_->StartWithOptions(options) || |
| 69 !file_thread_->StartWithOptions(options)) { | 70 !file_thread_->StartWithOptions(options)) { |
| 70 NOTREACHED(); | 71 NOTREACHED(); |
| 71 Teardown(); | 72 Teardown(); |
| 72 return false; | 73 return false; |
| 73 } | 74 } |
| 75 |
| 76 // See if we have been suppiled an LSID in the command line. This LSID will |
| 77 // override the credentials we use for Cloud Print. |
| 78 std::string lsid = command_line.GetSwitchValueASCII( |
| 79 switches::kServiceAccountLsid); |
| 80 |
| 74 FilePath user_data_dir; | 81 FilePath user_data_dir; |
| 75 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); | 82 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); |
| 76 FilePath pref_path = user_data_dir.Append(chrome::kServiceStateFileName); | 83 FilePath pref_path = user_data_dir.Append(chrome::kServiceStateFileName); |
| 77 service_prefs_.reset(new JsonPrefStore(pref_path, | 84 service_prefs_.reset(new JsonPrefStore(pref_path, |
| 78 file_thread_->message_loop_proxy())); | 85 file_thread_->message_loop_proxy())); |
| 79 service_prefs_->ReadPrefs(); | 86 service_prefs_->ReadPrefs(); |
| 80 | 87 |
| 81 DictionaryValue* values = service_prefs_->prefs(); | 88 DictionaryValue* values = service_prefs_->prefs(); |
| 82 bool remoting_host_enabled = false; | 89 bool remoting_host_enabled = false; |
| 83 | 90 |
| 84 // Check if remoting host is already enabled. | 91 // Check if remoting host is already enabled. |
| 85 if (values->GetBoolean(prefs::kRemotingHostEnabled, &remoting_host_enabled) && | 92 if (values->GetBoolean(prefs::kRemotingHostEnabled, &remoting_host_enabled) && |
| 86 remoting_host_enabled) { | 93 remoting_host_enabled) { |
| 87 // If true then we start the host. | 94 // If true then we start the host. |
| 88 StartChromotingHost(); | 95 StartChromotingHost(); |
| 89 } | 96 } |
| 97 // Enable Cloud Print if needed. First check the command-line. |
| 98 bool cloud_print_proxy_enabled = |
| 99 command_line.HasSwitch(switches::kEnableCloudPrintProxy); |
| 100 if (!cloud_print_proxy_enabled) { |
| 101 // Then check if the cloud print proxy was previously enabled. |
| 102 values->GetBoolean(prefs::kCloudPrintProxyEnabled, |
| 103 &cloud_print_proxy_enabled); |
| 104 } |
| 90 | 105 |
| 91 bool cloud_print_proxy_enabled = false; | 106 if (cloud_print_proxy_enabled) { |
| 92 | 107 GetCloudPrintProxy()->EnableForUser(lsid); |
| 93 // Check if the cloud print proxy is already enabled. | |
| 94 if (values->GetBoolean(prefs::kCloudPrintProxyEnabled, | |
| 95 &cloud_print_proxy_enabled) && | |
| 96 cloud_print_proxy_enabled) { | |
| 97 GetCloudPrintProxy()->EnableForUser(std::string()); | |
| 98 } | 108 } |
| 99 | 109 |
| 100 LOG(INFO) << "Starting Service Process IPC Server"; | 110 LOG(INFO) << "Starting Service Process IPC Server"; |
| 101 ipc_server_.reset(new ServiceIPCServer(GetServiceProcessChannelName())); | 111 ipc_server_.reset(new ServiceIPCServer(GetServiceProcessChannelName())); |
| 102 ipc_server_->Init(); | 112 ipc_server_->Init(); |
| 103 | 113 |
| 104 // After the IPC server has started we signal that the service process is | 114 // After the IPC server has started we signal that the service process is |
| 105 // running. | 115 // running. |
| 106 SignalServiceProcessRunning(kServiceProcessCloudPrint); | 116 SignalServiceProcessRunning(kServiceProcessCloudPrint); |
| 107 return true; | 117 return true; |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 #endif | 390 #endif |
| 381 | 391 |
| 382 ServiceProcess::~ServiceProcess() { | 392 ServiceProcess::~ServiceProcess() { |
| 383 Teardown(); | 393 Teardown(); |
| 384 g_service_process = NULL; | 394 g_service_process = NULL; |
| 385 } | 395 } |
| 386 | 396 |
| 387 // Disable refcounting for runnable method because it is really not needed | 397 // Disable refcounting for runnable method because it is really not needed |
| 388 // when we post tasks on the main message loop. | 398 // when we post tasks on the main message loop. |
| 389 DISABLE_RUNNABLE_METHOD_REFCOUNT(ServiceProcess); | 399 DISABLE_RUNNABLE_METHOD_REFCOUNT(ServiceProcess); |
| OLD | NEW |