| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 | 8 |
| 9 #if defined(OS_WIN) | |
| 10 #include <windows.h> | |
| 11 #endif | |
| 12 | |
| 13 #include <vector> | 9 #include <vector> |
| 14 | 10 |
| 15 #include "base/command_line.h" | 11 #include "base/string16.h" |
| 16 #include "base/memory/ref_counted.h" | 12 #include "base/string_piece.h" |
| 17 #include "base/shared_memory.h" | |
| 18 #include "base/string_util.h" | |
| 19 #include "content/common/clipboard_messages.h" | |
| 20 #include "content/common/npobject_util.h" | |
| 21 #include "content/common/socket_stream_dispatcher.h" | 13 #include "content/common/socket_stream_dispatcher.h" |
| 22 #include "content/common/view_messages.h" | 14 #include "content/common/view_messages.h" |
| 23 #include "content/public/common/content_switches.h" | |
| 24 #include "content/public/common/url_constants.h" | 15 #include "content/public/common/url_constants.h" |
| 25 #include "content/public/renderer/content_renderer_client.h" | 16 #include "content/public/renderer/content_renderer_client.h" |
| 26 #include "content/renderer/render_thread_impl.h" | 17 #include "content/renderer/render_thread_impl.h" |
| 27 #include "googleurl/src/url_util.h" | 18 #include "googleurl/src/url_util.h" |
| 28 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" | |
| 29 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKitPlatformSupport
.h" | |
| 30 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" | |
| 31 #include "third_party/skia/include/core/SkBitmap.h" | |
| 32 #include "ui/base/clipboard/clipboard.h" | |
| 33 #include "ui/base/ui_base_switches.h" | |
| 34 #include "webkit/glue/scoped_clipboard_writer_glue.h" | |
| 35 #include "webkit/glue/webkit_glue.h" | 19 #include "webkit/glue/webkit_glue.h" |
| 36 #include "webkit/glue/websocketstreamhandle_bridge.h" | 20 #include "webkit/glue/websocketstreamhandle_bridge.h" |
| 37 | 21 |
| 38 // This definition of WriteBitmapFromPixels uses shared memory to communicate | |
| 39 // across processes. | |
| 40 void ScopedClipboardWriterGlue::WriteBitmapFromPixels(const void* pixels, | |
| 41 const gfx::Size& size) { | |
| 42 // Do not try to write a bitmap more than once | |
| 43 if (shared_buf_) | |
| 44 return; | |
| 45 | |
| 46 uint32 buf_size = 4 * size.width() * size.height(); | |
| 47 | |
| 48 // Allocate a shared memory buffer to hold the bitmap bits. | |
| 49 shared_buf_ = ChildThread::current()->AllocateSharedMemory(buf_size); | |
| 50 if (!shared_buf_) | |
| 51 return; | |
| 52 | |
| 53 // Copy the bits into shared memory | |
| 54 DCHECK(shared_buf_->memory()); | |
| 55 memcpy(shared_buf_->memory(), pixels, buf_size); | |
| 56 shared_buf_->Unmap(); | |
| 57 | |
| 58 ui::Clipboard::ObjectMapParam size_param; | |
| 59 const char* size_data = reinterpret_cast<const char*>(&size); | |
| 60 for (size_t i = 0; i < sizeof(gfx::Size); ++i) | |
| 61 size_param.push_back(size_data[i]); | |
| 62 | |
| 63 ui::Clipboard::ObjectMapParams params; | |
| 64 | |
| 65 // The first parameter is replaced on the receiving end with a pointer to | |
| 66 // a shared memory object containing the bitmap. We reserve space for it here. | |
| 67 ui::Clipboard::ObjectMapParam place_holder_param; | |
| 68 params.push_back(place_holder_param); | |
| 69 params.push_back(size_param); | |
| 70 objects_[ui::Clipboard::CBF_SMBITMAP] = params; | |
| 71 } | |
| 72 | |
| 73 // Define a destructor that makes IPCs to flush the contents to the | |
| 74 // system clipboard. | |
| 75 ScopedClipboardWriterGlue::~ScopedClipboardWriterGlue() { | |
| 76 if (objects_.empty()) | |
| 77 return; | |
| 78 | |
| 79 if (shared_buf_) { | |
| 80 RenderThreadImpl::current()->Send( | |
| 81 new ClipboardHostMsg_WriteObjectsSync(objects_, | |
| 82 shared_buf_->handle())); | |
| 83 delete shared_buf_; | |
| 84 return; | |
| 85 } | |
| 86 | |
| 87 RenderThreadImpl::current()->Send( | |
| 88 new ClipboardHostMsg_WriteObjectsAsync(objects_)); | |
| 89 } | |
| 90 | |
| 91 namespace webkit_glue { | 22 namespace webkit_glue { |
| 92 | 23 |
| 93 // Clipboard glue | |
| 94 | |
| 95 ui::Clipboard* ClipboardGetClipboard() { | |
| 96 return NULL; | |
| 97 } | |
| 98 | |
| 99 uint64 ClipboardGetSequenceNumber(ui::Clipboard::Buffer buffer) { | |
| 100 uint64 sequence_number = 0; | |
| 101 RenderThreadImpl::current()->Send( | |
| 102 new ClipboardHostMsg_GetSequenceNumber(buffer, | |
| 103 &sequence_number)); | |
| 104 return sequence_number; | |
| 105 } | |
| 106 | |
| 107 bool ClipboardIsFormatAvailable(const ui::Clipboard::FormatType& format, | |
| 108 ui::Clipboard::Buffer buffer) { | |
| 109 bool result; | |
| 110 RenderThreadImpl::current()->Send( | |
| 111 new ClipboardHostMsg_IsFormatAvailable(format, buffer, &result)); | |
| 112 return result; | |
| 113 } | |
| 114 | |
| 115 void ClipboardReadAvailableTypes(ui::Clipboard::Buffer buffer, | |
| 116 std::vector<string16>* types, | |
| 117 bool* contains_filenames) { | |
| 118 RenderThreadImpl::current()->Send(new ClipboardHostMsg_ReadAvailableTypes( | |
| 119 buffer, types, contains_filenames)); | |
| 120 } | |
| 121 | |
| 122 void ClipboardReadText(ui::Clipboard::Buffer buffer, string16* result) { | |
| 123 RenderThreadImpl::current()->Send( | |
| 124 new ClipboardHostMsg_ReadText(buffer, result)); | |
| 125 } | |
| 126 | |
| 127 void ClipboardReadAsciiText(ui::Clipboard::Buffer buffer, std::string* result) { | |
| 128 RenderThreadImpl::current()->Send( | |
| 129 new ClipboardHostMsg_ReadAsciiText(buffer, result)); | |
| 130 } | |
| 131 | |
| 132 void ClipboardReadHTML(ui::Clipboard::Buffer buffer, string16* markup, | |
| 133 GURL* url, uint32* fragment_start, | |
| 134 uint32* fragment_end) { | |
| 135 RenderThreadImpl::current()->Send( | |
| 136 new ClipboardHostMsg_ReadHTML(buffer, markup, url, fragment_start, | |
| 137 fragment_end)); | |
| 138 } | |
| 139 | |
| 140 void ClipboardReadImage(ui::Clipboard::Buffer buffer, std::string* data) { | |
| 141 base::SharedMemoryHandle image_handle; | |
| 142 uint32 image_size; | |
| 143 RenderThreadImpl::current()->Send( | |
| 144 new ClipboardHostMsg_ReadImage(buffer, &image_handle, &image_size)); | |
| 145 if (base::SharedMemory::IsHandleValid(image_handle)) { | |
| 146 base::SharedMemory buffer(image_handle, true); | |
| 147 buffer.Map(image_size); | |
| 148 data->append(static_cast<char*>(buffer.memory()), image_size); | |
| 149 } | |
| 150 } | |
| 151 | |
| 152 void GetPlugins(bool refresh, | 24 void GetPlugins(bool refresh, |
| 153 std::vector<webkit::WebPluginInfo>* plugins) { | 25 std::vector<webkit::WebPluginInfo>* plugins) { |
| 154 if (!RenderThreadImpl::current()->plugin_refresh_allowed()) | 26 if (!RenderThreadImpl::current()->plugin_refresh_allowed()) |
| 155 refresh = false; | 27 refresh = false; |
| 156 RenderThreadImpl::current()->Send( | 28 RenderThreadImpl::current()->Send( |
| 157 new ViewHostMsg_GetPlugins(refresh, plugins)); | 29 new ViewHostMsg_GetPlugins(refresh, plugins)); |
| 158 } | 30 } |
| 159 | 31 |
| 160 bool IsProtocolSupportedForMedia(const GURL& url) { | 32 bool IsProtocolSupportedForMedia(const GURL& url) { |
| 161 // If new protocol is to be added here, we need to make sure the response is | 33 // If new protocol is to be added here, we need to make sure the response is |
| (...skipping 25 matching lines...) Expand all Loading... |
| 187 | 59 |
| 188 string16 GetLocalizedString(int message_id) { | 60 string16 GetLocalizedString(int message_id) { |
| 189 return content::GetContentClient()->GetLocalizedString(message_id); | 61 return content::GetContentClient()->GetLocalizedString(message_id); |
| 190 } | 62 } |
| 191 | 63 |
| 192 base::StringPiece GetDataResource(int resource_id) { | 64 base::StringPiece GetDataResource(int resource_id) { |
| 193 return content::GetContentClient()->GetDataResource(resource_id); | 65 return content::GetContentClient()->GetDataResource(resource_id); |
| 194 } | 66 } |
| 195 | 67 |
| 196 } // namespace webkit_glue | 68 } // namespace webkit_glue |
| OLD | NEW |