| 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/desktop_session_agent.h" | 5 #include "remoting/host/desktop_session_agent.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "ipc/ipc_channel_proxy.h" | 8 #include "ipc/ipc_channel_proxy.h" |
| 9 #include "ipc/ipc_message.h" | 9 #include "ipc/ipc_message.h" |
| 10 #include "ipc/ipc_message_macros.h" | 10 #include "ipc/ipc_message_macros.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 DesktopSesssionClipboardStub::~DesktopSesssionClipboardStub() { | 53 DesktopSesssionClipboardStub::~DesktopSesssionClipboardStub() { |
| 54 } | 54 } |
| 55 | 55 |
| 56 void DesktopSesssionClipboardStub::InjectClipboardEvent( | 56 void DesktopSesssionClipboardStub::InjectClipboardEvent( |
| 57 const protocol::ClipboardEvent& event) { | 57 const protocol::ClipboardEvent& event) { |
| 58 desktop_session_agent_->InjectClipboardEvent(event); | 58 desktop_session_agent_->InjectClipboardEvent(event); |
| 59 } | 59 } |
| 60 | 60 |
| 61 } // namespace | 61 } // namespace |
| 62 | 62 |
| 63 DesktopSessionAgent::Delegate::~Delegate() { |
| 64 } |
| 65 |
| 63 DesktopSessionAgent::~DesktopSessionAgent() { | 66 DesktopSessionAgent::~DesktopSessionAgent() { |
| 64 DCHECK(!network_channel_); | 67 DCHECK(!network_channel_); |
| 65 DCHECK(!video_capturer_); | 68 DCHECK(!video_capturer_); |
| 66 } | 69 } |
| 67 | 70 |
| 68 bool DesktopSessionAgent::OnMessageReceived(const IPC::Message& message) { | 71 bool DesktopSessionAgent::OnMessageReceived(const IPC::Message& message) { |
| 69 DCHECK(caller_task_runner()->BelongsToCurrentThread()); | 72 DCHECK(caller_task_runner()->BelongsToCurrentThread()); |
| 70 | 73 |
| 71 bool handled = true; | 74 bool handled = true; |
| 72 IPC_BEGIN_MESSAGE_MAP(DesktopSessionAgent, message) | 75 IPC_BEGIN_MESSAGE_MAP(DesktopSessionAgent, message) |
| (...skipping 20 matching lines...) Expand all Loading... |
| 93 VLOG(1) << "IPC: desktop <- network (" << peer_pid << ")"; | 96 VLOG(1) << "IPC: desktop <- network (" << peer_pid << ")"; |
| 94 } | 97 } |
| 95 | 98 |
| 96 void DesktopSessionAgent::OnChannelError() { | 99 void DesktopSessionAgent::OnChannelError() { |
| 97 DCHECK(caller_task_runner()->BelongsToCurrentThread()); | 100 DCHECK(caller_task_runner()->BelongsToCurrentThread()); |
| 98 | 101 |
| 99 // Make sure the channel is closed. | 102 // Make sure the channel is closed. |
| 100 network_channel_.reset(); | 103 network_channel_.reset(); |
| 101 | 104 |
| 102 // Notify the caller that the channel has been disconnected. | 105 // Notify the caller that the channel has been disconnected. |
| 103 disconnected_task_.Run(); | 106 if (delegate_.get()) |
| 107 delegate_->OnNetworkProcessDisconnected(); |
| 104 } | 108 } |
| 105 | 109 |
| 106 scoped_refptr<SharedBuffer> DesktopSessionAgent::CreateSharedBuffer( | 110 scoped_refptr<SharedBuffer> DesktopSessionAgent::CreateSharedBuffer( |
| 107 uint32 size) { | 111 uint32 size) { |
| 108 DCHECK(video_capture_task_runner()->BelongsToCurrentThread()); | 112 DCHECK(video_capture_task_runner()->BelongsToCurrentThread()); |
| 109 | 113 |
| 110 scoped_refptr<SharedBuffer> buffer = new SharedBuffer(size); | 114 scoped_refptr<SharedBuffer> buffer = new SharedBuffer(size); |
| 111 if (buffer->ptr() != NULL) { | 115 if (buffer->ptr() != NULL) { |
| 112 buffer->set_id(next_shared_buffer_id_); | 116 buffer->set_id(next_shared_buffer_id_); |
| 113 shared_buffers_.push_back(buffer); | 117 shared_buffers_.push_back(buffer); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 std::string serialized_event; | 185 std::string serialized_event; |
| 182 if (!event.SerializeToString(&serialized_event)) { | 186 if (!event.SerializeToString(&serialized_event)) { |
| 183 LOG(ERROR) << "Failed to serialize protocol::ClipboardEvent."; | 187 LOG(ERROR) << "Failed to serialize protocol::ClipboardEvent."; |
| 184 return; | 188 return; |
| 185 } | 189 } |
| 186 | 190 |
| 187 SendToNetwork( | 191 SendToNetwork( |
| 188 new ChromotingDesktopNetworkMsg_InjectClipboardEvent(serialized_event)); | 192 new ChromotingDesktopNetworkMsg_InjectClipboardEvent(serialized_event)); |
| 189 } | 193 } |
| 190 | 194 |
| 191 bool DesktopSessionAgent::Start(const base::Closure& disconnected_task, | 195 bool DesktopSessionAgent::Start(const base::WeakPtr<Delegate>& delegate, |
| 192 IPC::PlatformFileForTransit* desktop_pipe_out) { | 196 IPC::PlatformFileForTransit* desktop_pipe_out) { |
| 193 DCHECK(caller_task_runner()->BelongsToCurrentThread()); | 197 DCHECK(caller_task_runner()->BelongsToCurrentThread()); |
| 198 DCHECK(delegate_.get() == NULL); |
| 194 | 199 |
| 195 disconnected_task_ = disconnected_task; | 200 delegate_ = delegate; |
| 196 | 201 |
| 197 // Create an IPC channel to communicate with the network process. | 202 // Create an IPC channel to communicate with the network process. |
| 198 if (!CreateChannelForNetworkProcess(desktop_pipe_out, &network_channel_)) | 203 if (!CreateChannelForNetworkProcess(desktop_pipe_out, &network_channel_)) |
| 199 return false; | 204 return false; |
| 200 | 205 |
| 201 // Create and start the event executor. | 206 // Create and start the event executor. |
| 202 event_executor_ = EventExecutor::Create(input_task_runner(), | 207 event_executor_ = CreateEventExecutor(); |
| 203 caller_task_runner()); | |
| 204 scoped_ptr<protocol::ClipboardStub> clipboard_stub( | 208 scoped_ptr<protocol::ClipboardStub> clipboard_stub( |
| 205 new DesktopSesssionClipboardStub(this)); | 209 new DesktopSesssionClipboardStub(this)); |
| 206 event_executor_->Start(clipboard_stub.Pass()); | 210 event_executor_->Start(clipboard_stub.Pass()); |
| 207 | 211 |
| 208 // Start the video capturer. | 212 // Start the video capturer. |
| 209 video_capture_task_runner()->PostTask( | 213 video_capture_task_runner()->PostTask( |
| 210 FROM_HERE, base::Bind(&DesktopSessionAgent::StartVideoCapturer, this)); | 214 FROM_HERE, base::Bind(&DesktopSessionAgent::StartVideoCapturer, this)); |
| 211 return true; | 215 return true; |
| 212 } | 216 } |
| 213 | 217 |
| 214 void DesktopSessionAgent::Stop() { | 218 void DesktopSessionAgent::Stop() { |
| 215 DCHECK(caller_task_runner()->BelongsToCurrentThread()); | 219 DCHECK(caller_task_runner()->BelongsToCurrentThread()); |
| 216 | 220 |
| 221 delegate_.reset(); |
| 222 |
| 217 // Make sure the channel is closed. | 223 // Make sure the channel is closed. |
| 218 network_channel_.reset(); | 224 network_channel_.reset(); |
| 219 | 225 |
| 220 event_executor_.reset(); | 226 event_executor_.reset(); |
| 221 | 227 |
| 222 // Stop the video capturer. | 228 // Stop the video capturer. |
| 223 video_capture_task_runner()->PostTask( | 229 video_capture_task_runner()->PostTask( |
| 224 FROM_HERE, base::Bind(&DesktopSessionAgent::StopVideoCapturer, this)); | 230 FROM_HERE, base::Bind(&DesktopSessionAgent::StopVideoCapturer, this)); |
| 225 } | 231 } |
| 226 | 232 |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner) | 403 scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner) |
| 398 : caller_task_runner_(caller_task_runner), | 404 : caller_task_runner_(caller_task_runner), |
| 399 input_task_runner_(input_task_runner), | 405 input_task_runner_(input_task_runner), |
| 400 io_task_runner_(io_task_runner), | 406 io_task_runner_(io_task_runner), |
| 401 video_capture_task_runner_(video_capture_task_runner), | 407 video_capture_task_runner_(video_capture_task_runner), |
| 402 next_shared_buffer_id_(1) { | 408 next_shared_buffer_id_(1) { |
| 403 DCHECK(caller_task_runner_->BelongsToCurrentThread()); | 409 DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
| 404 } | 410 } |
| 405 | 411 |
| 406 } // namespace remoting | 412 } // namespace remoting |
| OLD | NEW |