blob: 0e6f1e686c95dd50f9841b94c9c6fb8fbc94358c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/arc/clipboard/arc_clipboard_bridge.h"
#include "base/logging.h"
#include "base/strings/utf_string_conversions.h"
#include "base/threading/thread_checker.h"
#include "components/arc/arc_bridge_service.h"
#include "ui/base/clipboard/clipboard.h"
#include "ui/base/clipboard/clipboard_types.h"
#include "ui/base/clipboard/scoped_clipboard_writer.h"
namespace arc {
ArcClipboardBridge::ArcClipboardBridge(ArcBridgeService* bridge_service)
: ArcService(bridge_service), binding_(this) {
arc_bridge_service()->clipboard()->AddObserver(this);
}
ArcClipboardBridge::~ArcClipboardBridge() {
DCHECK(CalledOnValidThread());
arc_bridge_service()->clipboard()->RemoveObserver(this);
}
void ArcClipboardBridge::OnInstanceReady() {
mojom::ClipboardInstance* clipboard_instance =
ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service()->clipboard(), Init);
DCHECK(clipboard_instance);
clipboard_instance->Init(binding_.CreateInterfacePtrAndBind());
}
void ArcClipboardBridge::SetTextContent(const std::string& text) {
DCHECK(CalledOnValidThread());
ui::ScopedClipboardWriter writer(ui::CLIPBOARD_TYPE_COPY_PASTE);
writer.WriteText(base::UTF8ToUTF16(text));
}
void ArcClipboardBridge::GetTextContent() {
DCHECK(CalledOnValidThread());
base::string16 text;
ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
clipboard->ReadText(ui::CLIPBOARD_TYPE_COPY_PASTE, &text);
mojom::ClipboardInstance* clipboard_instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service()->clipboard(), OnGetTextContent);
if (!clipboard_instance)
return;
clipboard_instance->OnGetTextContent(base::UTF16ToUTF8(text));
}
bool ArcClipboardBridge::CalledOnValidThread() {
// Make sure access to the Chrome clipboard is happening in the UI thread.
return thread_checker_.CalledOnValidThread();
}
} // namespace arc
|