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

Side by Side Diff: content/test/mock_webclipboard_impl.cc

Issue 1876653003: Register clipboard image blob in the browser process to copy data less. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 8 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 2013 The Chromium Authors. All rights reserved. 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 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 "content/test/mock_webclipboard_impl.h" 5 #include "content/test/mock_webclipboard_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
11 #include "base/guid.h"
11 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
12 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
13 #include "build/build_config.h" 14 #include "build/build_config.h"
14 #include "content/renderer/clipboard_utils.h" 15 #include "content/renderer/clipboard_utils.h"
16 #include "third_party/WebKit/public/platform/Platform.h"
17 #include "third_party/WebKit/public/platform/WebBlobRegistry.h"
15 #include "third_party/WebKit/public/platform/WebCommon.h" 18 #include "third_party/WebKit/public/platform/WebCommon.h"
16 #include "third_party/WebKit/public/platform/WebDragData.h" 19 #include "third_party/WebKit/public/platform/WebDragData.h"
17 #include "third_party/WebKit/public/platform/WebImage.h" 20 #include "third_party/WebKit/public/platform/WebImage.h"
21 #include "third_party/WebKit/public/platform/WebThreadSafeData.h"
18 #include "third_party/WebKit/public/platform/WebURL.h" 22 #include "third_party/WebKit/public/platform/WebURL.h"
19 #include "ui/base/clipboard/clipboard.h" 23 #include "ui/base/clipboard/clipboard.h"
20 #include "ui/gfx/codec/png_codec.h" 24 #include "ui/gfx/codec/png_codec.h"
21 #include "ui/gfx/geometry/size.h" 25 #include "ui/gfx/geometry/size.h"
22 26
23 using blink::WebDragData; 27 using blink::WebDragData;
24 using blink::WebString; 28 using blink::WebString;
25 using blink::WebURL; 29 using blink::WebURL;
26 using blink::WebVector; 30 using blink::WebVector;
27 31
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 blink::WebString MockWebClipboardImpl::readHTML( 91 blink::WebString MockWebClipboardImpl::readHTML(
88 blink::WebClipboard::Buffer buffer, 92 blink::WebClipboard::Buffer buffer,
89 blink::WebURL* url, 93 blink::WebURL* url,
90 unsigned* fragmentStart, 94 unsigned* fragmentStart,
91 unsigned* fragmentEnd) { 95 unsigned* fragmentEnd) {
92 *fragmentStart = 0; 96 *fragmentStart = 0;
93 *fragmentEnd = static_cast<unsigned>(m_htmlText.string().length()); 97 *fragmentEnd = static_cast<unsigned>(m_htmlText.string().length());
94 return m_htmlText; 98 return m_htmlText;
95 } 99 }
96 100
97 blink::WebData MockWebClipboardImpl::readImage( 101 blink::WebBlobInfo MockWebClipboardImpl::readImage(
98 blink::WebClipboard::Buffer buffer) { 102 blink::WebClipboard::Buffer buffer) {
99 std::string data; 103 std::vector<unsigned char> output;
100 std::vector<unsigned char> encoded_image;
101 // TODO(dcheng): Verify that we can assume the image is ARGB8888. Note that
102 // for endianess reasons, it will be BGRA8888 on Windows.
103 const SkBitmap& bitmap = m_image.getSkBitmap(); 104 const SkBitmap& bitmap = m_image.getSkBitmap();
104 SkAutoLockPixels lock(bitmap); 105 if (!gfx::PNGCodec::FastEncodeBGRASkBitmap(
105 gfx::PNGCodec::Encode(static_cast<unsigned char*>(bitmap.getPixels()), 106 bitmap, false /* discard_transparency */, &output)) {
106 #if defined(OS_ANDROID) 107 return blink::WebBlobInfo();
107 gfx::PNGCodec::FORMAT_RGBA, 108 }
108 #else 109 const WebString& uuid = base::ASCIIToUTF16(base::GenerateGUID());
109 gfx::PNGCodec::FORMAT_BGRA, 110 std::unique_ptr<blink::WebBlobRegistry::Builder> blob_builder(
110 #endif 111 blink::Platform::current()->blobRegistry()->createBuilder(
111 gfx::Size(bitmap.width(), bitmap.height()), 112 uuid, blink::WebString()));
112 static_cast<int>(bitmap.rowBytes()), 113 blob_builder->appendData(blink::WebThreadSafeData(
113 false /* discard_transparency */, 114 reinterpret_cast<char*>(output.data()), output.size()));
114 std::vector<gfx::PNGCodec::Comment>(), 115 blob_builder->build();
115 &encoded_image); 116 return blink::WebBlobInfo(
116 data.assign(reinterpret_cast<char*>(encoded_image.data()), 117 uuid, base::ASCIIToUTF16(ui::Clipboard::kMimeTypePNG), output.size());
117 encoded_image.size()); 118 }
118 return data; 119
120 blink::WebImage MockWebClipboardImpl::readRawImage(
121 blink::WebClipboard::Buffer buffer) {
122 return m_image;
119 } 123 }
120 124
121 blink::WebString MockWebClipboardImpl::readCustomData( 125 blink::WebString MockWebClipboardImpl::readCustomData(
122 blink::WebClipboard::Buffer buffer, 126 blink::WebClipboard::Buffer buffer,
123 const blink::WebString& type) { 127 const blink::WebString& type) {
124 std::map<base::string16, base::string16>::const_iterator it = 128 std::map<base::string16, base::string16>::const_iterator it =
125 m_customData.find(type); 129 m_customData.find(type);
126 if (it != m_customData.end()) 130 if (it != m_customData.end())
127 return it->second; 131 return it->second;
128 return blink::WebString(); 132 return blink::WebString();
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 203
200 void MockWebClipboardImpl::clear() { 204 void MockWebClipboardImpl::clear() {
201 m_plainText = base::NullableString16(); 205 m_plainText = base::NullableString16();
202 m_htmlText = base::NullableString16(); 206 m_htmlText = base::NullableString16();
203 m_image.reset(); 207 m_image.reset();
204 m_customData.clear(); 208 m_customData.clear();
205 m_writeSmartPaste = false; 209 m_writeSmartPaste = false;
206 } 210 }
207 211
208 } // namespace content 212 } // namespace content
OLDNEW
« no previous file with comments | « content/test/mock_webclipboard_impl.h ('k') | third_party/WebKit/Source/core/clipboard/DataObjectItem.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698