| 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 |