Index: remoting/host/desktop_session_proxy.cc |
diff --git a/remoting/host/desktop_session_proxy.cc b/remoting/host/desktop_session_proxy.cc |
index 058a2f46a6be24cc6757f0ef96ae721105fd1bc7..982870a2d43f999fe01d9a294493317ed5a10afc 100644 |
--- a/remoting/host/desktop_session_proxy.cc |
+++ b/remoting/host/desktop_session_proxy.cc |
@@ -19,6 +19,7 @@ |
#include "remoting/host/desktop_session_connector.h" |
#include "remoting/host/ipc_audio_capturer.h" |
#include "remoting/host/ipc_input_injector.h" |
+#include "remoting/host/ipc_mouse_cursor_monitor.h" |
#include "remoting/host/ipc_screen_controls.h" |
#include "remoting/host/ipc_video_frame_capturer.h" |
#include "remoting/proto/audio.pb.h" |
@@ -26,6 +27,7 @@ |
#include "remoting/proto/event.pb.h" |
#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" |
+#include "third_party/webrtc/modules/desktop_capture/mouse_cursor.h" |
#include "third_party/webrtc/modules/desktop_capture/shared_memory.h" |
#if defined(OS_WIN) |
@@ -144,6 +146,12 @@ scoped_ptr<webrtc::ScreenCapturer> DesktopSessionProxy::CreateVideoCapturer() { |
return scoped_ptr<webrtc::ScreenCapturer>(new IpcVideoFrameCapturer(this)); |
} |
+scoped_ptr<webrtc::MouseCursorMonitor> |
+ DesktopSessionProxy::CreateMouseCursorMonitor() { |
+ return scoped_ptr<webrtc::MouseCursorMonitor>( |
+ new IpcMouseCursorMonitor(this)); |
+} |
+ |
std::string DesktopSessionProxy::GetCapabilities() const { |
std::string result = kRateLimitResizeRequests; |
// Ask the client to send its resolution unconditionally. |
@@ -183,8 +191,8 @@ bool DesktopSessionProxy::OnMessageReceived(const IPC::Message& message) { |
OnAudioPacket) |
IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_CaptureCompleted, |
OnCaptureCompleted) |
- IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_CursorShapeChanged, |
- OnCursorShapeChanged) |
+ IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_MouseCursor, |
+ OnMouseCursor) |
IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_CreateSharedBuffer, |
OnCreateSharedBuffer) |
IPC_MESSAGE_HANDLER(ChromotingDesktopNetworkMsg_ReleaseSharedBuffer, |
@@ -318,6 +326,13 @@ void DesktopSessionProxy::SetVideoCapturer( |
video_capturer_ = video_capturer; |
} |
+void DesktopSessionProxy::SetMouseCursorMonitor( |
+ const base::WeakPtr<IpcMouseCursorMonitor>& mouse_cursor_monitor) { |
+ DCHECK(video_capture_task_runner_->BelongsToCurrentThread()); |
+ |
+ mouse_cursor_monitor_ = mouse_cursor_monitor; |
+} |
+ |
void DesktopSessionProxy::DisconnectSession() { |
DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
@@ -491,11 +506,12 @@ void DesktopSessionProxy::OnCaptureCompleted( |
PostCaptureCompleted(frame.Pass()); |
} |
-void DesktopSessionProxy::OnCursorShapeChanged( |
- const webrtc::MouseCursorShape& cursor_shape) { |
+void DesktopSessionProxy::OnMouseCursor( |
+ const webrtc::MouseCursor& mouse_cursor) { |
DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
- PostCursorShape(scoped_ptr<webrtc::MouseCursorShape>( |
- new webrtc::MouseCursorShape(cursor_shape))); |
+ scoped_ptr<webrtc::MouseCursor> cursor( |
+ webrtc::MouseCursor::CopyOf(mouse_cursor)); |
+ PostMouseCursor(cursor.Pass()); |
} |
void DesktopSessionProxy::OnInjectClipboardEvent( |
@@ -523,14 +539,14 @@ void DesktopSessionProxy::PostCaptureCompleted( |
base::Passed(&frame))); |
} |
-void DesktopSessionProxy::PostCursorShape( |
- scoped_ptr<webrtc::MouseCursorShape> cursor_shape) { |
+void DesktopSessionProxy::PostMouseCursor( |
+ scoped_ptr<webrtc::MouseCursor> mouse_cursor) { |
DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
video_capture_task_runner_->PostTask( |
FROM_HERE, |
- base::Bind(&IpcVideoFrameCapturer::OnCursorShapeChanged, video_capturer_, |
- base::Passed(&cursor_shape))); |
+ base::Bind(&IpcMouseCursorMonitor::OnMouseCursor, mouse_cursor_monitor_, |
+ base::Passed(&mouse_cursor))); |
} |
void DesktopSessionProxy::SendToDesktop(IPC::Message* message) { |