OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/mouse_cursor_monitor_proxy.h" | 5 #include "remoting/host/mouse_cursor_monitor_proxy.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/location.h" | 8 #include "base/location.h" |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
11 #include "base/thread_task_runner_handle.h" | 11 #include "base/thread_task_runner_handle.h" |
12 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" | 12 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
13 #include "third_party/webrtc/modules/desktop_capture/mouse_cursor.h" | 13 #include "third_party/webrtc/modules/desktop_capture/mouse_cursor.h" |
14 #include "third_party/webrtc/modules/desktop_capture/mouse_cursor_monitor.h" | 14 #include "third_party/webrtc/modules/desktop_capture/mouse_cursor_monitor.h" |
15 | 15 |
16 namespace remoting { | 16 namespace remoting { |
17 | 17 |
18 class MouseCursorMonitorProxy::Core | 18 class MouseCursorMonitorProxy::Core |
19 : public webrtc::MouseCursorMonitor::Callback { | 19 : public webrtc::MouseCursorMonitor::Callback { |
20 public: | 20 public: |
21 Core(base::WeakPtr<MouseCursorMonitorProxy> proxy, | 21 Core(base::WeakPtr<MouseCursorMonitorProxy> proxy, |
22 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, | 22 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
23 scoped_ptr<webrtc::MouseCursorMonitor> mouse_cursor_monitor); | 23 std::unique_ptr<webrtc::MouseCursorMonitor> mouse_cursor_monitor); |
24 ~Core() override; | 24 ~Core() override; |
25 | 25 |
26 void Init(webrtc::MouseCursorMonitor::Mode mode); | 26 void Init(webrtc::MouseCursorMonitor::Mode mode); |
27 void Capture(); | 27 void Capture(); |
28 | 28 |
29 private: | 29 private: |
30 // webrtc::MouseCursorMonitor::Callback implementation. | 30 // webrtc::MouseCursorMonitor::Callback implementation. |
31 void OnMouseCursor(webrtc::MouseCursor* mouse_cursor) override; | 31 void OnMouseCursor(webrtc::MouseCursor* mouse_cursor) override; |
32 void OnMouseCursorPosition(webrtc::MouseCursorMonitor::CursorState state, | 32 void OnMouseCursorPosition(webrtc::MouseCursorMonitor::CursorState state, |
33 const webrtc::DesktopVector& position) override; | 33 const webrtc::DesktopVector& position) override; |
34 | 34 |
35 base::ThreadChecker thread_checker_; | 35 base::ThreadChecker thread_checker_; |
36 | 36 |
37 base::WeakPtr<MouseCursorMonitorProxy> proxy_; | 37 base::WeakPtr<MouseCursorMonitorProxy> proxy_; |
38 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_; | 38 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_; |
39 scoped_ptr<webrtc::MouseCursorMonitor> mouse_cursor_monitor_; | 39 std::unique_ptr<webrtc::MouseCursorMonitor> mouse_cursor_monitor_; |
40 | 40 |
41 DISALLOW_COPY_AND_ASSIGN(Core); | 41 DISALLOW_COPY_AND_ASSIGN(Core); |
42 }; | 42 }; |
43 | 43 |
44 MouseCursorMonitorProxy::Core::Core( | 44 MouseCursorMonitorProxy::Core::Core( |
45 base::WeakPtr<MouseCursorMonitorProxy> proxy, | 45 base::WeakPtr<MouseCursorMonitorProxy> proxy, |
46 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, | 46 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
47 scoped_ptr<webrtc::MouseCursorMonitor> mouse_cursor_monitor) | 47 std::unique_ptr<webrtc::MouseCursorMonitor> mouse_cursor_monitor) |
48 : proxy_(proxy), | 48 : proxy_(proxy), |
49 caller_task_runner_(caller_task_runner), | 49 caller_task_runner_(caller_task_runner), |
50 mouse_cursor_monitor_(std::move(mouse_cursor_monitor)) { | 50 mouse_cursor_monitor_(std::move(mouse_cursor_monitor)) { |
51 thread_checker_.DetachFromThread(); | 51 thread_checker_.DetachFromThread(); |
52 } | 52 } |
53 | 53 |
54 MouseCursorMonitorProxy::Core::~Core() { | 54 MouseCursorMonitorProxy::Core::~Core() { |
55 DCHECK(thread_checker_.CalledOnValidThread()); | 55 DCHECK(thread_checker_.CalledOnValidThread()); |
56 } | 56 } |
57 | 57 |
58 void MouseCursorMonitorProxy::Core::Init( | 58 void MouseCursorMonitorProxy::Core::Init( |
59 webrtc::MouseCursorMonitor::Mode mode) { | 59 webrtc::MouseCursorMonitor::Mode mode) { |
60 DCHECK(thread_checker_.CalledOnValidThread()); | 60 DCHECK(thread_checker_.CalledOnValidThread()); |
61 | 61 |
62 mouse_cursor_monitor_->Init(this, mode); | 62 mouse_cursor_monitor_->Init(this, mode); |
63 } | 63 } |
64 | 64 |
65 void MouseCursorMonitorProxy::Core::Capture() { | 65 void MouseCursorMonitorProxy::Core::Capture() { |
66 DCHECK(thread_checker_.CalledOnValidThread()); | 66 DCHECK(thread_checker_.CalledOnValidThread()); |
67 | 67 |
68 mouse_cursor_monitor_->Capture(); | 68 mouse_cursor_monitor_->Capture(); |
69 } | 69 } |
70 | 70 |
71 void MouseCursorMonitorProxy::Core::OnMouseCursor(webrtc::MouseCursor* cursor) { | 71 void MouseCursorMonitorProxy::Core::OnMouseCursor(webrtc::MouseCursor* cursor) { |
72 DCHECK(thread_checker_.CalledOnValidThread()); | 72 DCHECK(thread_checker_.CalledOnValidThread()); |
73 | 73 |
74 scoped_ptr<webrtc::MouseCursor> owned_cursor(cursor); | 74 std::unique_ptr<webrtc::MouseCursor> owned_cursor(cursor); |
75 caller_task_runner_->PostTask( | 75 caller_task_runner_->PostTask( |
76 FROM_HERE, base::Bind(&MouseCursorMonitorProxy::OnMouseCursor, proxy_, | 76 FROM_HERE, base::Bind(&MouseCursorMonitorProxy::OnMouseCursor, proxy_, |
77 base::Passed(&owned_cursor))); | 77 base::Passed(&owned_cursor))); |
78 } | 78 } |
79 | 79 |
80 void MouseCursorMonitorProxy::Core::OnMouseCursorPosition( | 80 void MouseCursorMonitorProxy::Core::OnMouseCursorPosition( |
81 webrtc::MouseCursorMonitor::CursorState state, | 81 webrtc::MouseCursorMonitor::CursorState state, |
82 const webrtc::DesktopVector& position) { | 82 const webrtc::DesktopVector& position) { |
83 DCHECK(thread_checker_.CalledOnValidThread()); | 83 DCHECK(thread_checker_.CalledOnValidThread()); |
84 | 84 |
85 caller_task_runner_->PostTask( | 85 caller_task_runner_->PostTask( |
86 FROM_HERE, base::Bind(&MouseCursorMonitorProxy::OnMouseCursorPosition, | 86 FROM_HERE, base::Bind(&MouseCursorMonitorProxy::OnMouseCursorPosition, |
87 proxy_, state, position)); | 87 proxy_, state, position)); |
88 } | 88 } |
89 | 89 |
90 MouseCursorMonitorProxy::MouseCursorMonitorProxy( | 90 MouseCursorMonitorProxy::MouseCursorMonitorProxy( |
91 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner, | 91 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner, |
92 scoped_ptr<webrtc::MouseCursorMonitor> mouse_cursor_monitor) | 92 std::unique_ptr<webrtc::MouseCursorMonitor> mouse_cursor_monitor) |
93 : capture_task_runner_(capture_task_runner), weak_factory_(this) { | 93 : capture_task_runner_(capture_task_runner), weak_factory_(this) { |
94 core_.reset(new Core(weak_factory_.GetWeakPtr(), | 94 core_.reset(new Core(weak_factory_.GetWeakPtr(), |
95 base::ThreadTaskRunnerHandle::Get(), | 95 base::ThreadTaskRunnerHandle::Get(), |
96 std::move(mouse_cursor_monitor))); | 96 std::move(mouse_cursor_monitor))); |
97 } | 97 } |
98 | 98 |
99 MouseCursorMonitorProxy::~MouseCursorMonitorProxy() { | 99 MouseCursorMonitorProxy::~MouseCursorMonitorProxy() { |
100 capture_task_runner_->DeleteSoon(FROM_HERE, core_.release()); | 100 capture_task_runner_->DeleteSoon(FROM_HERE, core_.release()); |
101 } | 101 } |
102 | 102 |
103 void MouseCursorMonitorProxy::Init(Callback* callback, Mode mode) { | 103 void MouseCursorMonitorProxy::Init(Callback* callback, Mode mode) { |
104 DCHECK(thread_checker_.CalledOnValidThread()); | 104 DCHECK(thread_checker_.CalledOnValidThread()); |
105 callback_ = callback; | 105 callback_ = callback; |
106 capture_task_runner_->PostTask( | 106 capture_task_runner_->PostTask( |
107 FROM_HERE, base::Bind(&Core::Init, base::Unretained(core_.get()), mode)); | 107 FROM_HERE, base::Bind(&Core::Init, base::Unretained(core_.get()), mode)); |
108 } | 108 } |
109 | 109 |
110 void MouseCursorMonitorProxy::Capture() { | 110 void MouseCursorMonitorProxy::Capture() { |
111 DCHECK(thread_checker_.CalledOnValidThread()); | 111 DCHECK(thread_checker_.CalledOnValidThread()); |
112 capture_task_runner_->PostTask( | 112 capture_task_runner_->PostTask( |
113 FROM_HERE, base::Bind(&Core::Capture, base::Unretained(core_.get()))); | 113 FROM_HERE, base::Bind(&Core::Capture, base::Unretained(core_.get()))); |
114 } | 114 } |
115 | 115 |
116 void MouseCursorMonitorProxy::OnMouseCursor( | 116 void MouseCursorMonitorProxy::OnMouseCursor( |
117 scoped_ptr<webrtc::MouseCursor> cursor) { | 117 std::unique_ptr<webrtc::MouseCursor> cursor) { |
118 DCHECK(thread_checker_.CalledOnValidThread()); | 118 DCHECK(thread_checker_.CalledOnValidThread()); |
119 callback_->OnMouseCursor(cursor.release()); | 119 callback_->OnMouseCursor(cursor.release()); |
120 } | 120 } |
121 | 121 |
122 void MouseCursorMonitorProxy::OnMouseCursorPosition( | 122 void MouseCursorMonitorProxy::OnMouseCursorPosition( |
123 CursorState state, | 123 CursorState state, |
124 const webrtc::DesktopVector& position) { | 124 const webrtc::DesktopVector& position) { |
125 DCHECK(thread_checker_.CalledOnValidThread()); | 125 DCHECK(thread_checker_.CalledOnValidThread()); |
126 callback_->OnMouseCursorPosition(state, position); | 126 callback_->OnMouseCursorPosition(state, position); |
127 } | 127 } |
128 | 128 |
129 } // namespace remoting | 129 } // namespace remoting |
OLD | NEW |