Index: remoting/protocol/clipboard_duplicate_filter.cc |
diff --git a/remoting/protocol/clipboard_duplicate_filter.cc b/remoting/protocol/clipboard_duplicate_filter.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5526d768e439a72254aae4466502285f08db5e31 |
--- /dev/null |
+++ b/remoting/protocol/clipboard_duplicate_filter.cc |
@@ -0,0 +1,72 @@ |
+#include "remoting/protocol/clipboard_duplicate_filter.h" |
+ |
+#include "remoting/proto/event.pb.h" |
+ |
+namespace remoting { |
+namespace protocol { |
+ |
+ClipboardDuplicateFilter::ClipboardDuplicateFilter() |
+ : to_host_(NULL), |
+ to_client_(NULL), |
+ filter_to_client_(this), |
+ filter_to_host_(this) { |
+} |
+ |
+void ClipboardDuplicateFilter::set_to_client(ClipboardStub* clipboard_stub) { |
+ to_client_ = clipboard_stub; |
+} |
+ |
+void ClipboardDuplicateFilter::set_to_host(ClipboardStub* clipboard_stub) { |
+ to_host_ = clipboard_stub; |
+} |
+ |
+ClipboardStub* ClipboardDuplicateFilter::get_filter_to_client() { |
+ return &filter_to_client_; |
+} |
+ |
+ClipboardStub* ClipboardDuplicateFilter::get_filter_to_host() { |
+ return &filter_to_host_; |
+} |
+ |
+void ClipboardDuplicateFilter::InjectClipboardEventToClient( |
+ const ClipboardEvent& event) { |
+ if (!to_client_) { |
+ return; |
+ } |
+ if (event.mime_type() == recent_mime_type_ && event.data() == recent_data_) { |
+ return; |
+ } |
+ to_client_->InjectClipboardEvent(event); |
+ recent_mime_type_ = event.mime_type(); |
+ recent_data_ = event.data(); |
+} |
+ |
+void ClipboardDuplicateFilter::InjectClipboardEventToHost( |
+ const ClipboardEvent& event) { |
+ recent_mime_type_ = event.mime_type(); |
+ recent_data_ = event.data(); |
+ if (to_host_) { |
+ to_host_->InjectClipboardEvent(event); |
+ } |
+} |
+ |
+ClipboardDuplicateFilter::FilterToClient::FilterToClient( |
+ ClipboardDuplicateFilter* filter) : filter_(filter) { |
+} |
+ |
+void ClipboardDuplicateFilter::FilterToClient::InjectClipboardEvent( |
+ const ClipboardEvent& event) { |
+ filter_->InjectClipboardEventToClient(event); |
+} |
+ |
+ClipboardDuplicateFilter::FilterToHost::FilterToHost( |
+ ClipboardDuplicateFilter* filter) : filter_(filter) { |
+} |
+ |
+void ClipboardDuplicateFilter::FilterToHost::InjectClipboardEvent( |
+ const ClipboardEvent& event) { |
+ filter_->InjectClipboardEventToHost(event); |
+} |
+ |
+} // namespace protocol |
+} // namespace remoting |