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 15 namespace base { 16 class MessageLoopProxy; 17 } // namespace base 18 19 namespace remoting { 20 namespace protocol { 21 22 class 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