16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "remoting/host/ipc_mouse_cursor_monitor.h"
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "remoting/host/desktop_session_proxy.h"
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/webrtc/modules/desktop_capture/mouse_cursor.h"
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace remoting {
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)IpcMouseCursorMonitor::IpcMouseCursorMonitor(
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    scoped_refptr<DesktopSessionProxy> desktop_session_proxy)
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    : callback_(NULL),
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      desktop_session_proxy_(desktop_session_proxy),
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      weak_factory_(this) {
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)IpcMouseCursorMonitor::~IpcMouseCursorMonitor() {}
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void IpcMouseCursorMonitor::Init(Callback* callback, Mode mode) {
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK(!callback_);
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK(callback);
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK_EQ(webrtc::MouseCursorMonitor::SHAPE_ONLY, mode);
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  callback_ = callback;
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  desktop_session_proxy_->SetMouseCursorMonitor(weak_factory_.GetWeakPtr());
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void IpcMouseCursorMonitor::Capture() {
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Ignore. DesktopSessionAgent will capture the cursor at the same time it
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // captures a screen frame when |IpcVideoFrameCapturer::Capture()| is called.
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // This saves an IPC roundtrip.
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void IpcMouseCursorMonitor::OnMouseCursor(
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    scoped_ptr<webrtc::MouseCursor> cursor) {
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK(callback_);
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  callback_->OnMouseCursor(cursor.release());
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace remoting
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
43