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