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 #include "content/renderer/pepper/host_array_buffer_var.h" | 5 #include "content/renderer/pepper/host_array_buffer_var.h" |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
12 #include "base/memory/shared_memory.h" | 12 #include "base/memory/shared_memory.h" |
13 #include "base/process/process_handle.h" | 13 #include "base/process/process_handle.h" |
14 #include "content/common/pepper_file_util.h" | 14 #include "content/common/pepper_file_util.h" |
15 #include "content/common/sandbox_util.h" | 15 #include "content/common/sandbox_util.h" |
16 #include "content/renderer/pepper/host_globals.h" | 16 #include "content/renderer/pepper/host_globals.h" |
17 #include "content/renderer/pepper/plugin_module.h" | 17 #include "content/renderer/pepper/plugin_module.h" |
18 #include "content/renderer/pepper/renderer_ppapi_host_impl.h" | 18 #include "content/renderer/pepper/renderer_ppapi_host_impl.h" |
19 #include "content/renderer/render_thread_impl.h" | 19 #include "content/renderer/render_thread_impl.h" |
20 #include "ppapi/c/pp_instance.h" | 20 #include "ppapi/c/pp_instance.h" |
21 | 21 |
22 using ppapi::ArrayBufferVar; | 22 using ppapi::ArrayBufferVar; |
23 using blink::WebArrayBuffer; | 23 using blink::WebArrayBuffer; |
24 | 24 |
25 namespace content { | 25 namespace content { |
26 | 26 |
27 HostArrayBufferVar::HostArrayBufferVar(uint32 size_in_bytes) | 27 HostArrayBufferVar::HostArrayBufferVar(uint32_t size_in_bytes) |
28 : buffer_(WebArrayBuffer::create(size_in_bytes, 1 /* element_size */)), | 28 : buffer_(WebArrayBuffer::create(size_in_bytes, 1 /* element_size */)), |
29 valid_(true) {} | 29 valid_(true) {} |
30 | 30 |
31 HostArrayBufferVar::HostArrayBufferVar(const WebArrayBuffer& buffer) | 31 HostArrayBufferVar::HostArrayBufferVar(const WebArrayBuffer& buffer) |
32 : buffer_(buffer), valid_(true) {} | 32 : buffer_(buffer), valid_(true) {} |
33 | 33 |
34 HostArrayBufferVar::HostArrayBufferVar(uint32 size_in_bytes, | 34 HostArrayBufferVar::HostArrayBufferVar(uint32_t size_in_bytes, |
35 base::SharedMemoryHandle handle) | 35 base::SharedMemoryHandle handle) |
36 : buffer_(WebArrayBuffer::create(size_in_bytes, 1 /* element_size */)) { | 36 : buffer_(WebArrayBuffer::create(size_in_bytes, 1 /* element_size */)) { |
37 base::SharedMemory s(handle, true); | 37 base::SharedMemory s(handle, true); |
38 valid_ = s.Map(size_in_bytes); | 38 valid_ = s.Map(size_in_bytes); |
39 if (valid_) { | 39 if (valid_) { |
40 memcpy(buffer_.data(), s.memory(), size_in_bytes); | 40 memcpy(buffer_.data(), s.memory(), size_in_bytes); |
41 s.Unmap(); | 41 s.Unmap(); |
42 } | 42 } |
43 } | 43 } |
44 | 44 |
45 HostArrayBufferVar::~HostArrayBufferVar() {} | 45 HostArrayBufferVar::~HostArrayBufferVar() {} |
46 | 46 |
47 void* HostArrayBufferVar::Map() { | 47 void* HostArrayBufferVar::Map() { |
48 if (!valid_) | 48 if (!valid_) |
49 return NULL; | 49 return NULL; |
50 return buffer_.data(); | 50 return buffer_.data(); |
51 } | 51 } |
52 | 52 |
53 void HostArrayBufferVar::Unmap() { | 53 void HostArrayBufferVar::Unmap() { |
54 // We do not used shared memory on the host side. Nothing to do. | 54 // We do not used shared memory on the host side. Nothing to do. |
55 } | 55 } |
56 | 56 |
57 uint32 HostArrayBufferVar::ByteLength() { return buffer_.byteLength(); } | 57 uint32_t HostArrayBufferVar::ByteLength() { |
| 58 return buffer_.byteLength(); |
| 59 } |
58 | 60 |
59 bool HostArrayBufferVar::CopyToNewShmem( | 61 bool HostArrayBufferVar::CopyToNewShmem( |
60 PP_Instance instance, | 62 PP_Instance instance, |
61 int* host_shm_handle_id, | 63 int* host_shm_handle_id, |
62 base::SharedMemoryHandle* plugin_shm_handle) { | 64 base::SharedMemoryHandle* plugin_shm_handle) { |
63 scoped_ptr<base::SharedMemory> shm( | 65 scoped_ptr<base::SharedMemory> shm( |
64 RenderThread::Get() | 66 RenderThread::Get() |
65 ->HostAllocateSharedMemoryBuffer(ByteLength()) | 67 ->HostAllocateSharedMemoryBuffer(ByteLength()) |
66 .release()); | 68 .release()); |
67 if (!shm) | 69 if (!shm) |
68 return false; | 70 return false; |
69 | 71 |
70 shm->Map(ByteLength()); | 72 shm->Map(ByteLength()); |
71 memcpy(shm->memory(), Map(), ByteLength()); | 73 memcpy(shm->memory(), Map(), ByteLength()); |
72 shm->Unmap(); | 74 shm->Unmap(); |
73 | 75 |
74 // Duplicate the handle here; the SharedMemory destructor closes | 76 // Duplicate the handle here; the SharedMemory destructor closes |
75 // its handle on us. | 77 // its handle on us. |
76 HostGlobals* hg = HostGlobals::Get(); | 78 HostGlobals* hg = HostGlobals::Get(); |
77 PluginModule* pm = hg->GetModule(hg->GetModuleForInstance(instance)); | 79 PluginModule* pm = hg->GetModule(hg->GetModuleForInstance(instance)); |
78 | 80 |
79 *plugin_shm_handle = | 81 *plugin_shm_handle = |
80 pm->renderer_ppapi_host()->ShareSharedMemoryHandleWithRemote( | 82 pm->renderer_ppapi_host()->ShareSharedMemoryHandleWithRemote( |
81 shm->handle()); | 83 shm->handle()); |
82 *host_shm_handle_id = -1; | 84 *host_shm_handle_id = -1; |
83 return true; | 85 return true; |
84 } | 86 } |
85 | 87 |
86 } // namespace content | 88 } // namespace content |
OLD | NEW |