OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // This file provides the embedder's side of random webkit glue functions. | 5 // This file provides the embedder's side of random webkit glue functions. |
6 | 6 |
7 #include "content/renderer/renderer_clipboard_client.h" | 7 #include "content/renderer/renderer_clipboard_client.h" |
8 | 8 |
9 #include "base/shared_memory.h" | 9 #include "base/shared_memory.h" |
10 #include "base/string16.h" | 10 #include "base/string16.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 RendererClipboardWriteContext::~RendererClipboardWriteContext() { | 40 RendererClipboardWriteContext::~RendererClipboardWriteContext() { |
41 } | 41 } |
42 | 42 |
43 // This definition of WriteBitmapFromPixels uses shared memory to communicate | 43 // This definition of WriteBitmapFromPixels uses shared memory to communicate |
44 // across processes. | 44 // across processes. |
45 void RendererClipboardWriteContext::WriteBitmapFromPixels( | 45 void RendererClipboardWriteContext::WriteBitmapFromPixels( |
46 ui::Clipboard::ObjectMap* objects, | 46 ui::Clipboard::ObjectMap* objects, |
47 const void* pixels, | 47 const void* pixels, |
48 const gfx::Size& size) { | 48 const gfx::Size& size) { |
49 // Do not try to write a bitmap more than once | 49 // Do not try to write a bitmap more than once |
50 if (shared_buf_.get()) | 50 if (shared_buf_) |
51 return; | 51 return; |
52 | 52 |
53 uint32 buf_size = 4 * size.width() * size.height(); | 53 uint32 buf_size = 4 * size.width() * size.height(); |
54 | 54 |
55 // Allocate a shared memory buffer to hold the bitmap bits. | 55 // Allocate a shared memory buffer to hold the bitmap bits. |
56 shared_buf_.reset(ChildThread::current()->AllocateSharedMemory(buf_size)); | 56 shared_buf_.reset(ChildThread::current()->AllocateSharedMemory(buf_size)); |
57 if (!shared_buf_.get()) | 57 if (!shared_buf_) |
58 return; | 58 return; |
59 | 59 |
60 // Copy the bits into shared memory | 60 // Copy the bits into shared memory |
61 DCHECK(shared_buf_->memory()); | 61 DCHECK(shared_buf_->memory()); |
62 memcpy(shared_buf_->memory(), pixels, buf_size); | 62 memcpy(shared_buf_->memory(), pixels, buf_size); |
63 shared_buf_->Unmap(); | 63 shared_buf_->Unmap(); |
64 | 64 |
65 ui::Clipboard::ObjectMapParam size_param; | 65 ui::Clipboard::ObjectMapParam size_param; |
66 const char* size_data = reinterpret_cast<const char*>(&size); | 66 const char* size_data = reinterpret_cast<const char*>(&size); |
67 for (size_t i = 0; i < sizeof(gfx::Size); ++i) | 67 for (size_t i = 0; i < sizeof(gfx::Size); ++i) |
68 size_param.push_back(size_data[i]); | 68 size_param.push_back(size_data[i]); |
69 | 69 |
70 ui::Clipboard::ObjectMapParams params; | 70 ui::Clipboard::ObjectMapParams params; |
71 | 71 |
72 // The first parameter is replaced on the receiving end with a pointer to | 72 // The first parameter is replaced on the receiving end with a pointer to |
73 // a shared memory object containing the bitmap. We reserve space for it here. | 73 // a shared memory object containing the bitmap. We reserve space for it here. |
74 ui::Clipboard::ObjectMapParam place_holder_param; | 74 ui::Clipboard::ObjectMapParam place_holder_param; |
75 params.push_back(place_holder_param); | 75 params.push_back(place_holder_param); |
76 params.push_back(size_param); | 76 params.push_back(size_param); |
77 (*objects)[ui::Clipboard::CBF_SMBITMAP] = params; | 77 (*objects)[ui::Clipboard::CBF_SMBITMAP] = params; |
78 } | 78 } |
79 | 79 |
80 // Flushes the objects to the clipboard with an IPC. | 80 // Flushes the objects to the clipboard with an IPC. |
81 void RendererClipboardWriteContext::Flush( | 81 void RendererClipboardWriteContext::Flush( |
82 const ui::Clipboard::ObjectMap& objects) { | 82 const ui::Clipboard::ObjectMap& objects) { |
83 if (shared_buf_.get()) { | 83 if (shared_buf_) { |
84 RenderThreadImpl::current()->Send( | 84 RenderThreadImpl::current()->Send( |
85 new ClipboardHostMsg_WriteObjectsSync(objects, shared_buf_->handle())); | 85 new ClipboardHostMsg_WriteObjectsSync(objects, shared_buf_->handle())); |
86 } else { | 86 } else { |
87 RenderThreadImpl::current()->Send( | 87 RenderThreadImpl::current()->Send( |
88 new ClipboardHostMsg_WriteObjectsAsync(objects)); | 88 new ClipboardHostMsg_WriteObjectsAsync(objects)); |
89 } | 89 } |
90 } | 90 } |
91 | 91 |
92 } // anonymous namespace | 92 } // anonymous namespace |
93 | 93 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 RenderThreadImpl::current()->Send( | 183 RenderThreadImpl::current()->Send( |
184 new ClipboardHostMsg_ReadData(format, data)); | 184 new ClipboardHostMsg_ReadData(format, data)); |
185 } | 185 } |
186 | 186 |
187 webkit_glue::ClipboardClient::WriteContext* | 187 webkit_glue::ClipboardClient::WriteContext* |
188 RendererClipboardClient::CreateWriteContext() { | 188 RendererClipboardClient::CreateWriteContext() { |
189 return new RendererClipboardWriteContext; | 189 return new RendererClipboardWriteContext; |
190 } | 190 } |
191 | 191 |
192 } // namespace content | 192 } // namespace content |
OLD | NEW |