Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Side by Side Diff: remoting/host/chromeos/clipboard_aura.cc

Issue 923773003: Revert of Remove dependency on content from remoting_host. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/host/chromeos/clipboard_aura.h" 5 #include "remoting/host/chromeos/clipboard_aura.h"
6 6
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "base/timer/timer.h"
9 #include "content/public/browser/browser_thread.h"
8 #include "remoting/base/constants.h" 10 #include "remoting/base/constants.h"
9 #include "remoting/proto/event.pb.h" 11 #include "remoting/proto/event.pb.h"
10 #include "remoting/protocol/clipboard_stub.h" 12 #include "remoting/protocol/clipboard_stub.h"
11 #include "ui/base/clipboard/clipboard.h" 13 #include "ui/base/clipboard/clipboard.h"
12 #include "ui/base/clipboard/scoped_clipboard_writer.h" 14 #include "ui/base/clipboard/scoped_clipboard_writer.h"
13 15
14 namespace { 16 namespace {
15 17
16 // Clipboard polling interval in milliseconds. 18 // Clipboard polling interval in milliseconds.
17 const int64 kClipboardPollingIntervalMs = 500; 19 const int64 kClipboardPollingIntervalMs = 500;
18 20
19 } // namespace 21 } // namespace
20 22
21 namespace remoting { 23 namespace remoting {
22 24
23 ClipboardAura::ClipboardAura() 25 class ClipboardAura::Core {
26 public:
27 Core();
28
29 // Mirror the public interface.
30 void Start(scoped_ptr<protocol::ClipboardStub> client_clipboard);
31 void InjectClipboardEvent(const protocol::ClipboardEvent& event);
32 void Stop();
33
34 // Overrides the clipboard polling interval for unit test.
35 void SetPollingIntervalForTesting(base::TimeDelta polling_interval);
36
37 private:
38 void CheckClipboardForChanges();
39
40 scoped_ptr<protocol::ClipboardStub> client_clipboard_;
41 scoped_ptr<base::RepeatingTimer<Core>> clipboard_polling_timer_;
42 uint64 current_change_count_;
43 base::TimeDelta polling_interval_;
44
45 DISALLOW_COPY_AND_ASSIGN(Core);
46 };
47
48 ClipboardAura::ClipboardAura(
49 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner)
50 : core_(new Core()),
51 ui_task_runner_(ui_task_runner) {
52 }
53
54 ClipboardAura::~ClipboardAura() {
55 ui_task_runner_->DeleteSoon(FROM_HERE, core_.release());
56 }
57
58 void ClipboardAura::Start(
59 scoped_ptr<protocol::ClipboardStub> client_clipboard) {
60 ui_task_runner_->PostTask(
61 FROM_HERE, base::Bind(&Core::Start, base::Unretained(core_.get()),
62 base::Passed(&client_clipboard)));
63 }
64
65 void ClipboardAura::InjectClipboardEvent(
66 const protocol::ClipboardEvent& event) {
67 ui_task_runner_->PostTask(FROM_HERE,
68 base::Bind(&Core::InjectClipboardEvent,
69 base::Unretained(core_.get()), event));
70 }
71
72 void ClipboardAura::Stop() {
73 ui_task_runner_->PostTask(
74 FROM_HERE, base::Bind(&Core::Stop, base::Unretained(core_.get())));
75 };
76
77 void ClipboardAura::SetPollingIntervalForTesting(
78 base::TimeDelta polling_interval) {
79 core_->SetPollingIntervalForTesting(polling_interval);
80 }
81
82 ClipboardAura::Core::Core()
24 : current_change_count_(0), 83 : current_change_count_(0),
25 polling_interval_( 84 polling_interval_(
26 base::TimeDelta::FromMilliseconds(kClipboardPollingIntervalMs)) { 85 base::TimeDelta::FromMilliseconds(kClipboardPollingIntervalMs)) {
27 } 86 }
28 87
29 ClipboardAura::~ClipboardAura() { 88 void ClipboardAura::Core::Start(
30 }
31
32 void ClipboardAura::Start(
33 scoped_ptr<protocol::ClipboardStub> client_clipboard) { 89 scoped_ptr<protocol::ClipboardStub> client_clipboard) {
34 DCHECK(thread_checker_.CalledOnValidThread()); 90 client_clipboard_.reset(client_clipboard.release());
35
36 client_clipboard_ = client_clipboard.Pass();
37 91
38 // Aura doesn't provide a clipboard-changed notification. The only way to 92 // Aura doesn't provide a clipboard-changed notification. The only way to
39 // detect clipboard changes is by polling. 93 // detect clipboard changes is by polling.
40 clipboard_polling_timer_.Start(FROM_HERE, polling_interval_, this, 94 clipboard_polling_timer_.reset(new base::RepeatingTimer<Core>());
41 &ClipboardAura::CheckClipboardForChanges); 95 clipboard_polling_timer_->Start(
96 FROM_HERE, polling_interval_, this,
97 &ClipboardAura::Core::CheckClipboardForChanges);
42 } 98 }
43 99
44 void ClipboardAura::InjectClipboardEvent( 100 void ClipboardAura::Core::InjectClipboardEvent(
45 const protocol::ClipboardEvent& event) { 101 const protocol::ClipboardEvent& event) {
46 DCHECK(thread_checker_.CalledOnValidThread());
47
48 // Currently we only handle UTF-8 text. 102 // Currently we only handle UTF-8 text.
49 if (event.mime_type().compare(kMimeTypeTextUtf8) != 0) { 103 if (event.mime_type().compare(kMimeTypeTextUtf8) != 0) {
50 return; 104 return;
51 } 105 }
52 106
53 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_COPY_PASTE); 107 ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_COPY_PASTE);
54 clipboard_writer.WriteText(base::UTF8ToUTF16(event.data())); 108 clipboard_writer.WriteText(base::UTF8ToUTF16(event.data()));
55 109
56 // Update local change-count to prevent this change from being picked up by 110 // Update local change-count to prevent this change from being picked up by
57 // CheckClipboardForChanges. 111 // CheckClipboardForChanges.
58 current_change_count_++; 112 current_change_count_++;
59 } 113 }
60 114
61 void ClipboardAura::Stop() { 115 void ClipboardAura::Core::Stop() {
62 DCHECK(thread_checker_.CalledOnValidThread()); 116 clipboard_polling_timer_.reset();
117 client_clipboard_.reset();
118 }
63 119
64 clipboard_polling_timer_.Stop(); 120 void ClipboardAura::Core::SetPollingIntervalForTesting(
65 client_clipboard_.reset();
66 };
67
68 void ClipboardAura::SetPollingIntervalForTesting(
69 base::TimeDelta polling_interval) { 121 base::TimeDelta polling_interval) {
70 DCHECK(thread_checker_.CalledOnValidThread());
71
72 polling_interval_ = polling_interval; 122 polling_interval_ = polling_interval;
73 } 123 }
74 124
75 void ClipboardAura::CheckClipboardForChanges() { 125 void ClipboardAura::Core::CheckClipboardForChanges() {
76 DCHECK(thread_checker_.CalledOnValidThread());
77
78 ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); 126 ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
79 uint64 change_count = 127 uint64 change_count =
80 clipboard->GetSequenceNumber(ui::CLIPBOARD_TYPE_COPY_PASTE); 128 clipboard->GetSequenceNumber(ui::CLIPBOARD_TYPE_COPY_PASTE);
81 129
82 if (change_count == current_change_count_) { 130 if (change_count == current_change_count_) {
83 return; 131 return;
84 } 132 }
85 133
86 current_change_count_ = change_count; 134 current_change_count_ = change_count;
87 135
88 protocol::ClipboardEvent event; 136 protocol::ClipboardEvent event;
89 std::string data; 137 std::string data;
90 138
91 clipboard->ReadAsciiText(ui::CLIPBOARD_TYPE_COPY_PASTE, &data); 139 clipboard->ReadAsciiText(ui::CLIPBOARD_TYPE_COPY_PASTE, &data);
92 event.set_mime_type(kMimeTypeTextUtf8); 140 event.set_mime_type(kMimeTypeTextUtf8);
93 event.set_data(data); 141 event.set_data(data);
94 142
95 client_clipboard_->InjectClipboardEvent(event); 143 client_clipboard_->InjectClipboardEvent(event);
96 } 144 }
97 145
98 scoped_ptr<Clipboard> Clipboard::Create() { 146 scoped_ptr<Clipboard> Clipboard::Create() {
99 return make_scoped_ptr(new ClipboardAura()); 147 return make_scoped_ptr(
148 new ClipboardAura(content::BrowserThread::GetMessageLoopProxyForThread(
149 content::BrowserThread::UI)));
100 } 150 }
101 151
102 } // namespace remoting 152 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/chromeos/clipboard_aura.h ('k') | remoting/host/chromeos/clipboard_aura_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698