Chromium Code Reviews| 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 "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 22 #include "remoting/protocol/transport.h" | 22 #include "remoting/protocol/transport.h" |
| 23 | 23 |
| 24 namespace remoting { | 24 namespace remoting { |
| 25 | 25 |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 // This is used for tagging system event logs. | 28 // This is used for tagging system event logs. |
| 29 const char kApplicationName[] = "chromoting"; | 29 const char kApplicationName[] = "chromoting"; |
| 30 | 30 |
| 31 std::ostream& operator<<(std::ostream& os, const ScreenResolution& resolution) { | 31 std::ostream& operator<<(std::ostream& os, const ScreenResolution& resolution) { |
| 32 return os << resolution.dimensions_.width() << "x" | 32 return os << resolution.dimensions().width() << "x" |
| 33 << resolution.dimensions_.height() << " at " | 33 << resolution.dimensions().height() << " at " |
| 34 << resolution.dpi_.x() << "x" << resolution.dpi_.y() << " DPI"; | 34 << resolution.dpi().x() << "x" << resolution.dpi().y() << " DPI"; |
| 35 } | 35 } |
| 36 | 36 |
| 37 } // namespace | 37 } // namespace |
| 38 | 38 |
| 39 DaemonProcess::~DaemonProcess() { | 39 DaemonProcess::~DaemonProcess() { |
| 40 DCHECK(!config_watcher_.get()); | 40 DCHECK(!config_watcher_.get()); |
| 41 DCHECK(desktop_sessions_.empty()); | 41 DCHECK(desktop_sessions_.empty()); |
| 42 } | 42 } |
| 43 | 43 |
| 44 void DaemonProcess::OnConfigUpdated(const std::string& serialized_config) { | 44 void DaemonProcess::OnConfigUpdated(const std::string& serialized_config) { |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 181 // a protocol error and the network process will be restarted. | 181 // a protocol error and the network process will be restarted. |
| 182 if (WasTerminalIdAllocated(terminal_id)) { | 182 if (WasTerminalIdAllocated(terminal_id)) { |
| 183 LOG(ERROR) << "Invalid terminal ID: " << terminal_id; | 183 LOG(ERROR) << "Invalid terminal ID: " << terminal_id; |
| 184 CrashNetworkProcess(FROM_HERE); | 184 CrashNetworkProcess(FROM_HERE); |
| 185 return; | 185 return; |
| 186 } | 186 } |
| 187 | 187 |
| 188 // Terminal IDs cannot be reused. Update the expected next terminal ID. | 188 // Terminal IDs cannot be reused. Update the expected next terminal ID. |
| 189 next_terminal_id_ = std::max(next_terminal_id_, terminal_id + 1); | 189 next_terminal_id_ = std::max(next_terminal_id_, terminal_id + 1); |
| 190 | 190 |
| 191 // Validate |resolution| and restart the sender if it is not valid. | |
| 192 if (!resolution.IsValid()) { | |
|
alexeypa (please no reviews)
2013/04/26 21:33:58
|resolution| is received from less privileged proc
Sergey Ulanov
2013/05/07 22:25:50
There is a check in chromoting_param_traits.cc whe
| |
| 193 LOG(ERROR) << "Invalid resolution specified: " << resolution; | |
| 194 CrashNetworkProcess(FROM_HERE); | |
| 195 return; | |
| 196 } | |
| 197 | |
| 198 // Create the desktop session. | 191 // Create the desktop session. |
| 199 scoped_ptr<DesktopSession> session = DoCreateDesktopSession( | 192 scoped_ptr<DesktopSession> session = DoCreateDesktopSession( |
| 200 terminal_id, resolution, virtual_terminal); | 193 terminal_id, resolution, virtual_terminal); |
| 201 if (!session) { | 194 if (!session) { |
| 202 LOG(ERROR) << "Failed to create a desktop session."; | 195 LOG(ERROR) << "Failed to create a desktop session."; |
| 203 SendToNetwork( | 196 SendToNetwork( |
| 204 new ChromotingDaemonNetworkMsg_TerminalDisconnected(terminal_id)); | 197 new ChromotingDaemonNetworkMsg_TerminalDisconnected(terminal_id)); |
| 205 return; | 198 return; |
| 206 } | 199 } |
| 207 | 200 |
| 208 VLOG(1) << "Daemon: opened desktop session " << terminal_id; | 201 VLOG(1) << "Daemon: opened desktop session " << terminal_id; |
| 209 desktop_sessions_.push_back(session.release()); | 202 desktop_sessions_.push_back(session.release()); |
| 210 } | 203 } |
| 211 | 204 |
| 212 void DaemonProcess::SetScreenResolution(int terminal_id, | 205 void DaemonProcess::SetScreenResolution(int terminal_id, |
| 213 const ScreenResolution& resolution) { | 206 const ScreenResolution& resolution) { |
| 214 DCHECK(caller_task_runner()->BelongsToCurrentThread()); | 207 DCHECK(caller_task_runner()->BelongsToCurrentThread()); |
| 215 | 208 |
| 216 // Validate the supplied terminal ID. An attempt to use a desktop session ID | 209 // Validate the supplied terminal ID. An attempt to use a desktop session ID |
| 217 // that couldn't possibly have been allocated is considered a protocol error | 210 // that couldn't possibly have been allocated is considered a protocol error |
| 218 // and the network process will be restarted. | 211 // and the network process will be restarted. |
| 219 if (!WasTerminalIdAllocated(terminal_id)) { | 212 if (!WasTerminalIdAllocated(terminal_id)) { |
| 220 LOG(ERROR) << "Invalid terminal ID: " << terminal_id; | 213 LOG(ERROR) << "Invalid terminal ID: " << terminal_id; |
| 221 CrashNetworkProcess(FROM_HERE); | 214 CrashNetworkProcess(FROM_HERE); |
| 222 return; | 215 return; |
| 223 } | 216 } |
| 224 | 217 |
| 225 // Validate |resolution| and restart the sender if it is not valid. | 218 // Validate |resolution| and restart the sender if it is not valid. |
| 226 if (!resolution.IsValid()) { | 219 if (resolution.IsEmpty()) { |
|
alexeypa (please no reviews)
2013/04/26 21:33:58
nit: IsEmpty() seems to be OK in this case since y
Sergey Ulanov
2013/05/07 22:25:50
Yes, I understand that there is a difference. Inte
| |
| 227 LOG(ERROR) << "Invalid resolution specified: " << resolution; | 220 LOG(ERROR) << "Invalid resolution specified: " << resolution; |
| 228 CrashNetworkProcess(FROM_HERE); | 221 CrashNetworkProcess(FROM_HERE); |
| 229 return; | 222 return; |
| 230 } | 223 } |
| 231 | 224 |
| 232 DesktopSessionList::iterator i; | 225 DesktopSessionList::iterator i; |
| 233 for (i = desktop_sessions_.begin(); i != desktop_sessions_.end(); ++i) { | 226 for (i = desktop_sessions_.begin(); i != desktop_sessions_.end(); ++i) { |
| 234 if ((*i)->id() == terminal_id) { | 227 if ((*i)->id() == terminal_id) { |
| 235 break; | 228 break; |
| 236 } | 229 } |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 372 } | 365 } |
| 373 | 366 |
| 374 void DaemonProcess::DeleteAllDesktopSessions() { | 367 void DaemonProcess::DeleteAllDesktopSessions() { |
| 375 while (!desktop_sessions_.empty()) { | 368 while (!desktop_sessions_.empty()) { |
| 376 delete desktop_sessions_.front(); | 369 delete desktop_sessions_.front(); |
| 377 desktop_sessions_.pop_front(); | 370 desktop_sessions_.pop_front(); |
| 378 } | 371 } |
| 379 } | 372 } |
| 380 | 373 |
| 381 } // namespace remoting | 374 } // namespace remoting |
| OLD | NEW |