| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "remoting/host/daemon_process.h" | 5 #include "remoting/host/daemon_process.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> |
| 9 #include <utility> | 10 #include <utility> |
| 10 | 11 |
| 11 #include "base/base_switches.h" | 12 #include "base/base_switches.h" |
| 12 #include "base/bind.h" | 13 #include "base/bind.h" |
| 13 #include "base/bind_helpers.h" | 14 #include "base/bind_helpers.h" |
| 14 #include "base/location.h" | 15 #include "base/location.h" |
| 15 #include "base/logging.h" | 16 #include "base/logging.h" |
| 16 #include "base/macros.h" | 17 #include "base/macros.h" |
| 17 #include "base/memory/ref_counted.h" | 18 #include "base/memory/ref_counted.h" |
| 18 #include "base/memory/scoped_ptr.h" | |
| 19 #include "base/process/process.h" | 19 #include "base/process/process.h" |
| 20 #include "base/single_thread_task_runner.h" | 20 #include "base/single_thread_task_runner.h" |
| 21 #include "base/strings/utf_string_conversions.h" | 21 #include "base/strings/utf_string_conversions.h" |
| 22 #include "base/time/time.h" | 22 #include "base/time/time.h" |
| 23 #include "base/win/registry.h" | 23 #include "base/win/registry.h" |
| 24 #include "base/win/scoped_handle.h" | 24 #include "base/win/scoped_handle.h" |
| 25 #include "base/win/win_util.h" | 25 #include "base/win/win_util.h" |
| 26 #include "ipc/ipc_message.h" | 26 #include "ipc/ipc_message.h" |
| 27 #include "ipc/ipc_message_macros.h" | 27 #include "ipc/ipc_message_macros.h" |
| 28 #include "remoting/base/auto_thread_task_runner.h" | 28 #include "remoting/base/auto_thread_task_runner.h" |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 | 81 |
| 82 // DaemonProcess overrides. | 82 // DaemonProcess overrides. |
| 83 void SendToNetwork(IPC::Message* message) override; | 83 void SendToNetwork(IPC::Message* message) override; |
| 84 bool OnDesktopSessionAgentAttached( | 84 bool OnDesktopSessionAgentAttached( |
| 85 int terminal_id, | 85 int terminal_id, |
| 86 base::ProcessHandle desktop_process, | 86 base::ProcessHandle desktop_process, |
| 87 IPC::PlatformFileForTransit desktop_pipe) override; | 87 IPC::PlatformFileForTransit desktop_pipe) override; |
| 88 | 88 |
| 89 protected: | 89 protected: |
| 90 // DaemonProcess implementation. | 90 // DaemonProcess implementation. |
| 91 scoped_ptr<DesktopSession> DoCreateDesktopSession( | 91 std::unique_ptr<DesktopSession> DoCreateDesktopSession( |
| 92 int terminal_id, | 92 int terminal_id, |
| 93 const ScreenResolution& resolution, | 93 const ScreenResolution& resolution, |
| 94 bool virtual_terminal) override; | 94 bool virtual_terminal) override; |
| 95 void DoCrashNetworkProcess( | 95 void DoCrashNetworkProcess( |
| 96 const tracked_objects::Location& location) override; | 96 const tracked_objects::Location& location) override; |
| 97 void LaunchNetworkProcess() override; | 97 void LaunchNetworkProcess() override; |
| 98 | 98 |
| 99 // Changes the service start type to 'manual'. | 99 // Changes the service start type to 'manual'. |
| 100 void DisableAutoStart(); | 100 void DisableAutoStart(); |
| 101 | 101 |
| 102 // Initializes the pairing registry on the host side by sending | 102 // Initializes the pairing registry on the host side by sending |
| 103 // ChromotingDaemonNetworkMsg_InitializePairingRegistry message. | 103 // ChromotingDaemonNetworkMsg_InitializePairingRegistry message. |
| 104 bool InitializePairingRegistry(); | 104 bool InitializePairingRegistry(); |
| 105 | 105 |
| 106 // Opens the pairing registry keys. | 106 // Opens the pairing registry keys. |
| 107 bool OpenPairingRegistry(); | 107 bool OpenPairingRegistry(); |
| 108 | 108 |
| 109 private: | 109 private: |
| 110 scoped_ptr<WorkerProcessLauncher> network_launcher_; | 110 std::unique_ptr<WorkerProcessLauncher> network_launcher_; |
| 111 | 111 |
| 112 // Handle of the network process. | 112 // Handle of the network process. |
| 113 ScopedHandle network_process_; | 113 ScopedHandle network_process_; |
| 114 | 114 |
| 115 base::win::RegKey pairing_registry_privileged_key_; | 115 base::win::RegKey pairing_registry_privileged_key_; |
| 116 base::win::RegKey pairing_registry_unprivileged_key_; | 116 base::win::RegKey pairing_registry_unprivileged_key_; |
| 117 | 117 |
| 118 DISALLOW_COPY_AND_ASSIGN(DaemonProcessWin); | 118 DISALLOW_COPY_AND_ASSIGN(DaemonProcessWin); |
| 119 }; | 119 }; |
| 120 | 120 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 return false; | 185 return false; |
| 186 } | 186 } |
| 187 | 187 |
| 188 // |desktop_pipe| is a handle in the desktop process. It will be duplicated | 188 // |desktop_pipe| is a handle in the desktop process. It will be duplicated |
| 189 // by the network process directly from the desktop process. | 189 // by the network process directly from the desktop process. |
| 190 SendToNetwork(new ChromotingDaemonNetworkMsg_DesktopAttached( | 190 SendToNetwork(new ChromotingDaemonNetworkMsg_DesktopAttached( |
| 191 terminal_id, desktop_process_for_transit, desktop_pipe)); | 191 terminal_id, desktop_process_for_transit, desktop_pipe)); |
| 192 return true; | 192 return true; |
| 193 } | 193 } |
| 194 | 194 |
| 195 scoped_ptr<DesktopSession> DaemonProcessWin::DoCreateDesktopSession( | 195 std::unique_ptr<DesktopSession> DaemonProcessWin::DoCreateDesktopSession( |
| 196 int terminal_id, | 196 int terminal_id, |
| 197 const ScreenResolution& resolution, | 197 const ScreenResolution& resolution, |
| 198 bool virtual_terminal) { | 198 bool virtual_terminal) { |
| 199 DCHECK(caller_task_runner()->BelongsToCurrentThread()); | 199 DCHECK(caller_task_runner()->BelongsToCurrentThread()); |
| 200 | 200 |
| 201 if (virtual_terminal) { | 201 if (virtual_terminal) { |
| 202 return DesktopSessionWin::CreateForVirtualTerminal( | 202 return DesktopSessionWin::CreateForVirtualTerminal( |
| 203 caller_task_runner(), io_task_runner(), this, terminal_id, resolution); | 203 caller_task_runner(), io_task_runner(), this, terminal_id, resolution); |
| 204 } else { | 204 } else { |
| 205 return DesktopSessionWin::CreateForConsole( | 205 return DesktopSessionWin::CreateForConsole( |
| (...skipping 12 matching lines...) Expand all Loading... |
| 218 DCHECK(caller_task_runner()->BelongsToCurrentThread()); | 218 DCHECK(caller_task_runner()->BelongsToCurrentThread()); |
| 219 DCHECK(!network_launcher_); | 219 DCHECK(!network_launcher_); |
| 220 | 220 |
| 221 // Construct the host binary name. | 221 // Construct the host binary name. |
| 222 base::FilePath host_binary; | 222 base::FilePath host_binary; |
| 223 if (!GetInstalledBinaryPath(kHostBinaryName, &host_binary)) { | 223 if (!GetInstalledBinaryPath(kHostBinaryName, &host_binary)) { |
| 224 Stop(); | 224 Stop(); |
| 225 return; | 225 return; |
| 226 } | 226 } |
| 227 | 227 |
| 228 scoped_ptr<base::CommandLine> target(new base::CommandLine(host_binary)); | 228 std::unique_ptr<base::CommandLine> target(new base::CommandLine(host_binary)); |
| 229 target->AppendSwitchASCII(kProcessTypeSwitchName, kProcessTypeHost); | 229 target->AppendSwitchASCII(kProcessTypeSwitchName, kProcessTypeHost); |
| 230 target->CopySwitchesFrom(*base::CommandLine::ForCurrentProcess(), | 230 target->CopySwitchesFrom(*base::CommandLine::ForCurrentProcess(), |
| 231 kCopiedSwitchNames, arraysize(kCopiedSwitchNames)); | 231 kCopiedSwitchNames, arraysize(kCopiedSwitchNames)); |
| 232 | 232 |
| 233 scoped_ptr<UnprivilegedProcessDelegate> delegate( | 233 std::unique_ptr<UnprivilegedProcessDelegate> delegate( |
| 234 new UnprivilegedProcessDelegate(io_task_runner(), std::move(target))); | 234 new UnprivilegedProcessDelegate(io_task_runner(), std::move(target))); |
| 235 network_launcher_.reset(new WorkerProcessLauncher(std::move(delegate), this)); | 235 network_launcher_.reset(new WorkerProcessLauncher(std::move(delegate), this)); |
| 236 } | 236 } |
| 237 | 237 |
| 238 scoped_ptr<DaemonProcess> DaemonProcess::Create( | 238 std::unique_ptr<DaemonProcess> DaemonProcess::Create( |
| 239 scoped_refptr<AutoThreadTaskRunner> caller_task_runner, | 239 scoped_refptr<AutoThreadTaskRunner> caller_task_runner, |
| 240 scoped_refptr<AutoThreadTaskRunner> io_task_runner, | 240 scoped_refptr<AutoThreadTaskRunner> io_task_runner, |
| 241 const base::Closure& stopped_callback) { | 241 const base::Closure& stopped_callback) { |
| 242 scoped_ptr<DaemonProcessWin> daemon_process( | 242 std::unique_ptr<DaemonProcessWin> daemon_process(new DaemonProcessWin( |
| 243 new DaemonProcessWin(caller_task_runner, io_task_runner, | 243 caller_task_runner, io_task_runner, stopped_callback)); |
| 244 stopped_callback)); | |
| 245 daemon_process->Initialize(); | 244 daemon_process->Initialize(); |
| 246 return std::move(daemon_process); | 245 return std::move(daemon_process); |
| 247 } | 246 } |
| 248 | 247 |
| 249 void DaemonProcessWin::DisableAutoStart() { | 248 void DaemonProcessWin::DisableAutoStart() { |
| 250 ScopedScHandle scmanager( | 249 ScopedScHandle scmanager( |
| 251 OpenSCManager(nullptr, SERVICES_ACTIVE_DATABASE, | 250 OpenSCManager(nullptr, SERVICES_ACTIVE_DATABASE, |
| 252 SC_MANAGER_CONNECT | SC_MANAGER_ENUMERATE_SERVICE)); | 251 SC_MANAGER_CONNECT | SC_MANAGER_ENUMERATE_SERVICE)); |
| 253 if (!scmanager.IsValid()) { | 252 if (!scmanager.IsValid()) { |
| 254 PLOG(INFO) << "Failed to connect to the service control manager"; | 253 PLOG(INFO) << "Failed to connect to the service control manager"; |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 << "\\" << kPairingRegistrySecretsKeyName; | 381 << "\\" << kPairingRegistrySecretsKeyName; |
| 383 return false; | 382 return false; |
| 384 } | 383 } |
| 385 | 384 |
| 386 pairing_registry_privileged_key_.Set(privileged.Take()); | 385 pairing_registry_privileged_key_.Set(privileged.Take()); |
| 387 pairing_registry_unprivileged_key_.Set(unprivileged.Take()); | 386 pairing_registry_unprivileged_key_.Set(unprivileged.Take()); |
| 388 return true; | 387 return true; |
| 389 } | 388 } |
| 390 | 389 |
| 391 } // namespace remoting | 390 } // namespace remoting |
| OLD | NEW |