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

Side by Side Diff: components/arc/clipboard/arc_clipboard_bridge.cc

Issue 1495723004: Minimum implementation of ARC clipboard Bridge (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
(Empty)
1 // Copyright 2015 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 #include "components/arc/clipboard/arc_clipboard_bridge.h"
6
7 #include <utility>
8
9 #include "base/logging.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "base/threading/thread_checker.h"
12 #include "ui/base/clipboard/clipboard.h"
13 #include "ui/base/clipboard/clipboard_types.h"
14 #include "ui/base/clipboard/scoped_clipboard_writer.h"
15
16 namespace mojo {
17
18 template <>
19 struct TypeConverter<base::string16, String> {
20 static base::string16 Convert(const String& input) {
21 return base::UTF8ToUTF16(input.get());
22 }
23 };
24
25 template <>
26 struct TypeConverter<String, base::string16> {
27 static String Convert(const base::string16& input) {
28 return String(base::UTF16ToUTF8(input));
29 }
30 };
31
32 } // namespace mojo
33
34 namespace arc {
35
36 ArcClipboardBridge::ArcClipboardBridge(ArcBridgeService* bridge_service)
37 : bridge_service_(bridge_service), binding_(this) {
38 bridge_service_->AddObserver(this);
39 }
40
41 ArcClipboardBridge::~ArcClipboardBridge() {
42 DCHECK(CalledOnValidThread());
43 bridge_service_->RemoveObserver(this);
44 }
45
46 void ArcClipboardBridge::OnClipboardInstanceReady() {
47 ClipboardInstance* clipboard_instance = bridge_service_->clipboard_instance();
48 if (!clipboard_instance) {
49 LOG(ERROR) << "OnClipboardInstanceReady called, "
50 << "but no clipboard instance found";
51 return;
52 }
53
54 ClipboardHostPtr host;
55 binding_.Bind(mojo::GetProxy(&host));
56 clipboard_instance->Init(std::move(host));
57 }
58
59 void ArcClipboardBridge::SetTextContent(const mojo::String& text) {
60 DCHECK(CalledOnValidThread());
61 ui::ScopedClipboardWriter writer(ui::CLIPBOARD_TYPE_COPY_PASTE);
62 writer.WriteText(text.To<base::string16>());
63 }
64
65 void ArcClipboardBridge::GetTextContent() {
66 DCHECK(CalledOnValidThread());
67
68 base::string16 text;
69 ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
70 clipboard->ReadText(ui::CLIPBOARD_TYPE_COPY_PASTE, &text);
71
72 ClipboardInstance* clipboard_instance = bridge_service_->clipboard_instance();
73 clipboard_instance->OnGetTextContent(mojo::String::From(text));
74 }
75
76 bool ArcClipboardBridge::CalledOnValidThread() {
77 // Make sure access to the Chrome clipboard is happening in the UI thread.
78 return thread_checker_.CalledOnValidThread();
79 }
80
81 } // namespace arc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698