Data store should be readable in dragstart/copy/cut events
[WebKit-https.git] / Source / WebCore / platform / blackberry / ClipboardBlackBerry.cpp
1 /*
2  * Copyright (C) 2010, 2011, 2012 Research In Motion Limited. All rights reserved.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18
19 #include "config.h"
20 #include "ClipboardBlackBerry.h"
21
22 #include "FileList.h"
23 #include "NotImplemented.h"
24
25 #include <BlackBerryPlatformClipboard.h>
26
27 namespace WebCore {
28
29 PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy policy, DragData*, Frame*)
30 {
31     return ClipboardBlackBerry::create(policy, DragAndDrop);
32 }
33
34 ClipboardBlackBerry::ClipboardBlackBerry(ClipboardAccessPolicy policy, ClipboardType type)
35 : Clipboard(policy, type)
36 {
37 }
38
39 ClipboardBlackBerry::~ClipboardBlackBerry()
40 {
41 }
42
43 void ClipboardBlackBerry::clearData(const String& type)
44 {
45     if (!canWriteData())
46         return;
47
48     BlackBerry::Platform::Clipboard::clearClipboardByType(type.utf8().data());
49 }
50
51 void ClipboardBlackBerry::clearAllData()
52 {
53     if (!canWriteData())
54         return;
55
56     BlackBerry::Platform::Clipboard::clearClipboard();
57 }
58
59 String ClipboardBlackBerry::getData(const String& type) const
60 {
61     if (!canReadData())
62         return String();
63
64     return String::fromUTF8(BlackBerry::Platform::Clipboard::readClipboardByType(type.utf8().data()).c_str());
65 }
66
67 bool ClipboardBlackBerry::setData(const String& type, const String& text)
68 {
69     if (!canWriteData())
70         return false;
71
72     if (type == "text/plain")
73         BlackBerry::Platform::Clipboard::writePlainText(text.utf8().data());
74     else if (type == "text/html")
75         BlackBerry::Platform::Clipboard::writeHTML(text.utf8().data());
76     else if (type == "text/url")
77         BlackBerry::Platform::Clipboard::writeURL(text.utf8().data());
78     return true;
79 }
80
81 ListHashSet<String> ClipboardBlackBerry::types() const
82 {
83     if (!canReadTypes())
84         return ListHashSet<String>();
85
86     // We use hardcoded list here since there seems to be no API to get the list.
87     ListHashSet<String> ret;
88     ret.add("text/plain");
89     ret.add("text/html");
90     ret.add("text/url");
91     return ret;
92 }
93
94 PassRefPtr<FileList> ClipboardBlackBerry::files() const
95 {
96     notImplemented();
97     return 0;
98 }
99
100 DragImageRef ClipboardBlackBerry::createDragImage(IntPoint&) const
101 {
102     notImplemented();
103     return 0;
104 }
105
106 void ClipboardBlackBerry::declareAndWriteDragImage(Element*, const KURL&, const String&, Frame*)
107 {
108     notImplemented();
109 }
110
111 void ClipboardBlackBerry::writeURL(const KURL& url, const String&, Frame*)
112 {
113     ASSERT(!url.isEmpty());
114     BlackBerry::Platform::Clipboard::writeURL(url.string().utf8().data());
115 }
116
117 void ClipboardBlackBerry::writeRange(Range*, Frame*)
118 {
119     notImplemented();
120 }
121
122 void ClipboardBlackBerry::writePlainText(const String& text)
123 {
124     BlackBerry::Platform::Clipboard::writePlainText(text.utf8().data());
125 }
126
127 bool ClipboardBlackBerry::hasData()
128 {
129     return BlackBerry::Platform::Clipboard::hasPlainText() || BlackBerry::Platform::Clipboard::hasHTML()
130         || BlackBerry::Platform::Clipboard::hasURL();
131 }
132
133 void ClipboardBlackBerry::setDragImage(CachedImage*, const IntPoint&)
134 {
135     notImplemented();
136 }
137
138 void ClipboardBlackBerry::setDragImageElement(Node*, const IntPoint&)
139 {
140     notImplemented();
141 }
142
143 } // namespace WebCore