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
3// found in the LICENSE file.
4
5// ClipboardThreadProxy is used to allow a Clipboard on the UI thread to invoke
6// a ClipboardStub on the network thread.
7
8#ifndef REMOTING_PROTOCOL_CLIPBOARD_THREAD_PROXY_H_
9#define REMOTING_PROTOCOL_CLIPBOARD_THREAD_PROXY_H_
10
11#include "base/memory/weak_ptr.h"
12#include "base/task_runner.h"
13#include "remoting/protocol/clipboard_stub.h"
14
15namespace base {
16class MessageLoopProxy;
17}  // namespace base
18
19namespace remoting {
20namespace protocol {
21
22class ClipboardThreadProxy : public ClipboardStub {
23 public:
24  virtual ~ClipboardThreadProxy();
25
26  // Constructs a proxy for |clipboard_stub| which will trampoline invocations
27  // to |clipboard_stub_task_runner|.
28  ClipboardThreadProxy(
29      const base::WeakPtr<ClipboardStub>& clipboard_stub,
30      scoped_refptr<base::TaskRunner> clipboard_stub_task_runner);
31
32  // ClipboardStub implementation.
33  virtual void InjectClipboardEvent(const ClipboardEvent& event) OVERRIDE;
34
35 private:
36  // Injects a clipboard event into a stub, if the given weak pointer to the
37  // stub is valid.
38  static void InjectClipboardEventStatic(
39      const base::WeakPtr<ClipboardStub>& clipboard_stub,
40      const ClipboardEvent& event);
41
42  base::WeakPtr<ClipboardStub> clipboard_stub_;
43  scoped_refptr<base::TaskRunner> clipboard_stub_task_runner_;
44
45  DISALLOW_COPY_AND_ASSIGN(ClipboardThreadProxy);
46};
47
48}  // namespace protocol
49}  // namespace remoting
50
51#endif  // REMOTING_PROTOCOL_CLIPBOARD_THREAD_PROXY_H_
52