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

Side by Side Diff: ppapi/proxy/ppb_image_data_proxy.cc

Issue 10828023: PPAPI/NaCl: Make NaClIPCAdapter transfer handles more generally (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed some proxy changes that aren't necessary now Created 8 years, 4 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 | Annotate | Revision Log
OLDNEW
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 #include "ppapi/proxy/ppb_image_data_proxy.h" 5 #include "ppapi/proxy/ppb_image_data_proxy.h"
6 6
7 #include <string.h> // For memcpy 7 #include <string.h> // For memcpy
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 46
47 ImageData::ImageData(const HostResource& resource, 47 ImageData::ImageData(const HostResource& resource,
48 const PP_ImageDataDesc& desc, 48 const PP_ImageDataDesc& desc,
49 const base::SharedMemoryHandle& handle) 49 const base::SharedMemoryHandle& handle)
50 : Resource(OBJECT_IS_PROXY, resource), 50 : Resource(OBJECT_IS_PROXY, resource),
51 desc_(desc), 51 desc_(desc),
52 shm_(handle, false /* read_only */), 52 shm_(handle, false /* read_only */),
53 size_(desc.size.width * desc.size.height * 4), 53 size_(desc.size.width * desc.size.height * 4),
54 map_count_(0) { 54 map_count_(0) {
55 } 55 }
56 #endif // !defined(OS_NACL) 56 #endif // else, !defined(OS_NACL)
57 57
58 ImageData::~ImageData() { 58 ImageData::~ImageData() {
59 } 59 }
60 60
61 thunk::PPB_ImageData_API* ImageData::AsPPB_ImageData_API() { 61 thunk::PPB_ImageData_API* ImageData::AsPPB_ImageData_API() {
62 return this; 62 return this;
63 } 63 }
64 64
65 PP_Bool ImageData::Describe(PP_ImageDataDesc* desc) { 65 PP_Bool ImageData::Describe(PP_ImageDataDesc* desc) {
66 memcpy(desc, &desc_, sizeof(PP_ImageDataDesc)); 66 memcpy(desc, &desc_, sizeof(PP_ImageDataDesc));
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 PP_ImageDataFormat format, 156 PP_ImageDataFormat format,
157 const PP_Size& size, 157 const PP_Size& size,
158 PP_Bool init_to_zero) { 158 PP_Bool init_to_zero) {
159 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); 159 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance);
160 if (!dispatcher) 160 if (!dispatcher)
161 return 0; 161 return 0;
162 162
163 HostResource result; 163 HostResource result;
164 std::string image_data_desc; 164 std::string image_data_desc;
165 #if defined(OS_NACL) 165 #if defined(OS_NACL)
166 base::SharedMemoryHandle image_handle = base::SharedMemory::NULLHandle(); 166 ppapi::proxy::SerializedHandle image_handle_wrapper;
167 dispatcher->Send(new PpapiHostMsg_PPBImageData_CreateNaCl( 167 dispatcher->Send(new PpapiHostMsg_PPBImageData_CreateNaCl(
168 kApiID, instance, format, size, init_to_zero, 168 kApiID, instance, format, size, init_to_zero,
169 &result, &image_data_desc, &image_handle)); 169 &result, &image_data_desc, &image_handle_wrapper));
170 if (!image_handle_wrapper.is_shmem())
171 return 0;
172 base::SharedMemoryHandle image_handle = image_handle_wrapper.shmem();
170 #else 173 #else
171 ImageHandle image_handle = ImageData::NullHandle(); 174 ImageHandle image_handle = ImageData::NullHandle();
172 dispatcher->Send(new PpapiHostMsg_PPBImageData_Create( 175 dispatcher->Send(new PpapiHostMsg_PPBImageData_Create(
173 kApiID, instance, format, size, init_to_zero, 176 kApiID, instance, format, size, init_to_zero,
174 &result, &image_data_desc, &image_handle)); 177 &result, &image_data_desc, &image_handle));
175 #endif 178 #endif
176 179
177 if (result.is_null() || image_data_desc.size() != sizeof(PP_ImageDataDesc)) 180 if (result.is_null() || image_data_desc.size() != sizeof(PP_ImageDataDesc))
178 return 0; 181 return 0;
179 182
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 #endif // defined(OS_NACL) 245 #endif // defined(OS_NACL)
243 } 246 }
244 247
245 void PPB_ImageData_Proxy::OnHostMsgCreateNaCl( 248 void PPB_ImageData_Proxy::OnHostMsgCreateNaCl(
246 PP_Instance instance, 249 PP_Instance instance,
247 int32_t format, 250 int32_t format,
248 const PP_Size& size, 251 const PP_Size& size,
249 PP_Bool init_to_zero, 252 PP_Bool init_to_zero,
250 HostResource* result, 253 HostResource* result,
251 std::string* image_data_desc, 254 std::string* image_data_desc,
252 base::SharedMemoryHandle* result_image_handle) { 255 ppapi::proxy::SerializedHandle* result_image_handle) {
253 #if defined(OS_NACL) 256 #if defined(OS_NACL)
254 // This message should never be received in untrusted code. To minimize the 257 // This message should never be received in untrusted code. To minimize the
255 // size of the IRT, we just don't handle it. 258 // size of the IRT, we just don't handle it.
256 return; 259 return;
257 #else 260 #else
258 *result_image_handle = base::SharedMemory::NULLHandle(); 261 result_image_handle->set_null_shmem();
259 HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance); 262 HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance);
260 if (!dispatcher) 263 if (!dispatcher)
261 return; 264 return;
262 265
263 thunk::EnterResourceCreation enter(instance); 266 thunk::EnterResourceCreation enter(instance);
264 if (enter.failed()) 267 if (enter.failed())
265 return; 268 return;
266 269
267 PP_Resource resource = enter.functions()->CreateImageDataNaCl( 270 PP_Resource resource = enter.functions()->CreateImageDataNaCl(
268 instance, static_cast<PP_ImageDataFormat>(format), size, init_to_zero); 271 instance, static_cast<PP_ImageDataFormat>(format), size, init_to_zero);
269 if (!resource) 272 if (!resource)
270 return; 273 return;
271 result->SetHostResource(instance, resource); 274 result->SetHostResource(instance, resource);
272 275
273 // Get the description, it's just serialized as a string. 276 // Get the description, it's just serialized as a string.
274 thunk::EnterResourceNoLock<thunk::PPB_ImageData_API> enter_resource( 277 thunk::EnterResourceNoLock<thunk::PPB_ImageData_API> enter_resource(
275 resource, false); 278 resource, false);
276 if (enter_resource.failed()) 279 if (enter_resource.failed())
277 return; 280 return;
278 PP_ImageDataDesc desc; 281 PP_ImageDataDesc desc;
279 if (enter_resource.object()->Describe(&desc) == PP_TRUE) { 282 if (enter_resource.object()->Describe(&desc) == PP_TRUE) {
280 image_data_desc->resize(sizeof(PP_ImageDataDesc)); 283 image_data_desc->resize(sizeof(PP_ImageDataDesc));
281 memcpy(&(*image_data_desc)[0], &desc, sizeof(PP_ImageDataDesc)); 284 memcpy(&(*image_data_desc)[0], &desc, sizeof(PP_ImageDataDesc));
282 } 285 }
283 int local_fd; 286 int local_fd;
284 uint32_t byte_count; 287 uint32_t byte_count;
285 if (enter_resource.object()->GetSharedMemory(&local_fd, &byte_count) != PP_OK) 288 if (enter_resource.object()->GetSharedMemory(&local_fd, &byte_count) != PP_OK)
286 return; 289 return;
287
288 // TODO(dmichael): Change trusted interface to return a PP_FileHandle, those 290 // TODO(dmichael): Change trusted interface to return a PP_FileHandle, those
289 // casts are ugly. 291 // casts are ugly.
290 base::PlatformFile platform_file = 292 base::PlatformFile platform_file =
291 #if defined(OS_WIN) 293 #if defined(OS_WIN)
292 reinterpret_cast<HANDLE>(static_cast<intptr_t>(local_fd)); 294 reinterpret_cast<HANDLE>(static_cast<intptr_t>(local_fd));
293 #elif defined(OS_POSIX) 295 #elif defined(OS_POSIX)
294 local_fd; 296 local_fd;
295 #else 297 #else
296 #error Not implemented. 298 #error Not implemented.
297 #endif // defined(OS_WIN) 299 #endif // defined(OS_WIN)
298 *result_image_handle = 300 result_image_handle->set_shmem(
299 dispatcher->ShareHandleWithRemote(platform_file, false); 301 dispatcher->ShareHandleWithRemote(platform_file, false),
302 byte_count);
300 #endif // defined(OS_NACL) 303 #endif // defined(OS_NACL)
301 } 304 }
302 305
303 } // namespace proxy 306 } // namespace proxy
304 } // namespace ppapi 307 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698