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/render_thread_impl.h" | 19 #include "content/renderer/render_thread_impl.h" |
19 #include "ppapi/c/pp_instance.h" | 20 #include "ppapi/c/pp_instance.h" |
20 | 21 |
21 using ppapi::ArrayBufferVar; | 22 using ppapi::ArrayBufferVar; |
22 using blink::WebArrayBuffer; | 23 using blink::WebArrayBuffer; |
23 | 24 |
24 namespace content { | 25 namespace content { |
25 | 26 |
26 HostArrayBufferVar::HostArrayBufferVar(uint32 size_in_bytes) | 27 HostArrayBufferVar::HostArrayBufferVar(uint32 size_in_bytes) |
27 : buffer_(WebArrayBuffer::create(size_in_bytes, 1 /* element_size */)), | 28 : buffer_(WebArrayBuffer::create(size_in_bytes, 1 /* element_size */)), |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 return false; | 68 return false; |
68 | 69 |
69 shm->Map(ByteLength()); | 70 shm->Map(ByteLength()); |
70 memcpy(shm->memory(), Map(), ByteLength()); | 71 memcpy(shm->memory(), Map(), ByteLength()); |
71 shm->Unmap(); | 72 shm->Unmap(); |
72 | 73 |
73 // Duplicate the handle here; the SharedMemory destructor closes | 74 // Duplicate the handle here; the SharedMemory destructor closes |
74 // its handle on us. | 75 // its handle on us. |
75 HostGlobals* hg = HostGlobals::Get(); | 76 HostGlobals* hg = HostGlobals::Get(); |
76 PluginModule* pm = hg->GetModule(hg->GetModuleForInstance(instance)); | 77 PluginModule* pm = hg->GetModule(hg->GetModuleForInstance(instance)); |
77 base::ProcessId p = pm->GetPeerProcessId(); | |
78 if (p == base::kNullProcessId) { | |
79 // In-process, clone for ourselves. | |
80 p = base::GetCurrentProcId(); | |
81 } | |
82 | 78 |
83 base::PlatformFile platform_file = | 79 *plugin_shm_handle = |
84 PlatformFileFromSharedMemoryHandle(shm->handle()); | 80 pm->renderer_ppapi_host()->ShareSharedMemoryHandleWithRemote( |
85 | 81 shm->handle()); |
86 *plugin_shm_handle = BrokerGetFileHandleForProcess(platform_file, p, false); | |
87 *host_shm_handle_id = -1; | 82 *host_shm_handle_id = -1; |
88 return true; | 83 return true; |
89 } | 84 } |
90 | 85 |
91 } // namespace content | 86 } // namespace content |
OLD | NEW |