Reland: Add browser_test for extension app API with missing schema
[chromium-blink-merge.git] / content / test / mock_webclipboard_impl.cc
blob8aa8c307d2c4e83dd079ac9b56c5f04b378bbec2
1 // Copyright 2013 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.
5 #include "content/test/mock_webclipboard_impl.h"
7 #include <algorithm>
9 #include "base/logging.h"
10 #include "base/stl_util.h"
11 #include "base/strings/string_util.h"
12 #include "base/strings/utf_string_conversions.h"
13 #include "content/renderer/clipboard_utils.h"
14 #include "third_party/WebKit/public/platform/WebCommon.h"
15 #include "third_party/WebKit/public/platform/WebDragData.h"
16 #include "third_party/WebKit/public/platform/WebImage.h"
17 #include "third_party/WebKit/public/platform/WebURL.h"
18 #include "ui/base/clipboard/clipboard.h"
19 #include "ui/gfx/codec/png_codec.h"
20 #include "ui/gfx/size.h"
22 using blink::WebDragData;
23 using blink::WebString;
24 using blink::WebURL;
25 using blink::WebVector;
27 namespace content {
29 MockWebClipboardImpl::MockWebClipboardImpl() {}
31 MockWebClipboardImpl::~MockWebClipboardImpl() {}
33 bool MockWebClipboardImpl::isFormatAvailable(Format format, Buffer buffer) {
34 switch (format) {
35 case FormatPlainText:
36 return !m_plainText.is_null();
38 case FormatHTML:
39 return !m_htmlText.is_null();
41 case FormatSmartPaste:
42 return m_writeSmartPaste;
44 default:
45 NOTREACHED();
46 return false;
50 WebVector<WebString> MockWebClipboardImpl::readAvailableTypes(
51 Buffer buffer,
52 bool* containsFilenames) {
53 *containsFilenames = false;
54 std::vector<WebString> results;
55 if (!m_plainText.string().empty()) {
56 results.push_back(WebString("text/plain"));
58 if (!m_htmlText.string().empty()) {
59 results.push_back(WebString("text/html"));
61 if (!m_image.isNull()) {
62 results.push_back(WebString("image/png"));
64 for (std::map<base::string16, base::string16>::const_iterator it =
65 m_customData.begin();
66 it != m_customData.end(); ++it) {
67 CHECK(std::find(results.begin(), results.end(), it->first) ==
68 results.end());
69 results.push_back(it->first);
71 return results;
74 blink::WebString MockWebClipboardImpl::readPlainText(
75 blink::WebClipboard::Buffer buffer) {
76 return m_plainText;
79 // TODO(wtc): set output argument *url.
80 blink::WebString MockWebClipboardImpl::readHTML(
81 blink::WebClipboard::Buffer buffer,
82 blink::WebURL* url,
83 unsigned* fragmentStart,
84 unsigned* fragmentEnd) {
85 *fragmentStart = 0;
86 *fragmentEnd = static_cast<unsigned>(m_htmlText.string().length());
87 return m_htmlText;
90 blink::WebData MockWebClipboardImpl::readImage(
91 blink::WebClipboard::Buffer buffer) {
92 std::string data;
93 std::vector<unsigned char> encoded_image;
94 // TODO(dcheng): Verify that we can assume the image is ARGB8888. Note that
95 // for endianess reasons, it will be BGRA8888 on Windows.
96 const SkBitmap& bitmap = m_image.getSkBitmap();
97 SkAutoLockPixels lock(bitmap);
98 gfx::PNGCodec::Encode(static_cast<unsigned char*>(bitmap.getPixels()),
99 #if defined(OS_ANDROID)
100 gfx::PNGCodec::FORMAT_RGBA,
101 #else
102 gfx::PNGCodec::FORMAT_BGRA,
103 #endif
104 gfx::Size(bitmap.width(), bitmap.height()),
105 static_cast<int>(bitmap.rowBytes()),
106 false /* discard_transparency */,
107 std::vector<gfx::PNGCodec::Comment>(),
108 &encoded_image);
109 data.assign(reinterpret_cast<char*>(vector_as_array(&encoded_image)),
110 encoded_image.size());
111 return data;
114 blink::WebString MockWebClipboardImpl::readCustomData(
115 blink::WebClipboard::Buffer buffer,
116 const blink::WebString& type) {
117 std::map<base::string16, base::string16>::const_iterator it =
118 m_customData.find(type);
119 if (it != m_customData.end())
120 return it->second;
121 return blink::WebString();
124 void MockWebClipboardImpl::writeHTML(const blink::WebString& htmlText,
125 const blink::WebURL& url,
126 const blink::WebString& plainText,
127 bool writeSmartPaste) {
128 clear();
130 m_htmlText = htmlText;
131 m_plainText = plainText;
132 m_writeSmartPaste = writeSmartPaste;
135 void MockWebClipboardImpl::writePlainText(const blink::WebString& plain_text) {
136 clear();
138 m_plainText = plain_text;
141 void MockWebClipboardImpl::writeURL(const blink::WebURL& url,
142 const blink::WebString& title) {
143 clear();
145 m_htmlText = WebString::fromUTF8(URLToMarkup(url, title));
146 m_plainText = url.spec().utf16();
149 void MockWebClipboardImpl::writeImage(const blink::WebImage& image,
150 const blink::WebURL& url,
151 const blink::WebString& title) {
152 if (!image.isNull()) {
153 clear();
155 m_plainText = m_htmlText;
156 m_htmlText = WebString::fromUTF8(URLToImageMarkup(url, title));
157 m_image = image;
161 void MockWebClipboardImpl::writeDataObject(const WebDragData& data) {
162 clear();
164 const WebVector<WebDragData::Item>& itemList = data.items();
165 for (size_t i = 0; i < itemList.size(); ++i) {
166 const WebDragData::Item& item = itemList[i];
167 switch (item.storageType) {
168 case WebDragData::Item::StorageTypeString: {
169 if (EqualsASCII(item.stringType, ui::Clipboard::kMimeTypeText)) {
170 m_plainText = item.stringData;
171 continue;
173 if (EqualsASCII(item.stringType, ui::Clipboard::kMimeTypeHTML)) {
174 m_htmlText = item.stringData;
175 continue;
177 m_customData.insert(std::make_pair(item.stringType, item.stringData));
178 continue;
180 default:
181 // Currently other types are unused by the clipboard implementation.
182 NOTREACHED();
187 void MockWebClipboardImpl::clear() {
188 m_plainText = base::NullableString16();
189 m_htmlText = base::NullableString16();
190 m_image.reset();
191 m_customData.clear();
192 m_writeSmartPaste = false;
195 } // namespace content