- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / protocol / clipboard_echo_filter.h
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 #ifndef REMOTING_PROTOCOL_CLIPBOARD_ECHO_FILTER_H_
6 #define REMOTING_PROTOCOL_CLIPBOARD_ECHO_FILTER_H_
7
8 #include <map>
9 #include <string>
10
11 #include "base/compiler_specific.h"
12 #include "remoting/protocol/clipboard_stub.h"
13
14 namespace remoting {
15 namespace protocol {
16
17 // ClipboardEchoFilter stops the host sending a clipboard item to the
18 // client, if that item was the latest item received from the client.
19 class ClipboardEchoFilter {
20  public:
21   ClipboardEchoFilter();
22   ~ClipboardEchoFilter();
23
24   // Sets the ClipboardStub that sends events to the client.
25   void set_client_stub(ClipboardStub* client_stub);
26
27   // Sets the ClipboardStub that sends events to the host.
28   void set_host_stub(ClipboardStub* host_stub);
29
30   // Gets the ClipboardStub that sends events through this filter and on to the
31   // client.
32   ClipboardStub* client_filter();
33
34   // Gets the ClipboardStub that sends events through this filter and on to the
35   // host.
36   ClipboardStub* host_filter();
37
38  private:
39   class ClientFilter : public ClipboardStub {
40    public:
41     ClientFilter(ClipboardEchoFilter* filter);
42     virtual void InjectClipboardEvent(const ClipboardEvent& event) OVERRIDE;
43
44    private:
45     ClipboardEchoFilter* filter_;
46   };
47
48   class HostFilter : public ClipboardStub {
49    public:
50     HostFilter(ClipboardEchoFilter* filter);
51     virtual void InjectClipboardEvent(const ClipboardEvent& event) OVERRIDE;
52
53    private:
54     ClipboardEchoFilter* filter_;
55   };
56
57   void InjectClipboardEventToHost(const ClipboardEvent& event);
58   void InjectClipboardEventToClient(const ClipboardEvent& event);
59
60   ClipboardStub* host_stub_;
61   ClipboardStub* client_stub_;
62   ClientFilter client_filter_;
63   HostFilter host_filter_;
64
65   // The latest item received from the client.
66   std::string client_latest_mime_type_;
67   std::string client_latest_data_;
68
69   DISALLOW_COPY_AND_ASSIGN(ClipboardEchoFilter);
70 };
71
72 }  // namespace protocol
73 }  // namespace remoting
74
75 #endif  // REMOTING_PROTOCOL_CLIPBOARD_ECHO_FILTER_H_