| Index: content/common/child_thread.cc
|
| ===================================================================
|
| --- content/common/child_thread.cc (revision 104763)
|
| +++ content/common/child_thread.cc (working copy)
|
| @@ -125,6 +125,39 @@
|
| return resource_dispatcher()->CreateBridge(request_info);
|
| }
|
|
|
| +base::SharedMemory* ChildThread::AllocateSharedMemory(
|
| + size_t buf_size) {
|
| + scoped_ptr<base::SharedMemory> shared_buf;
|
| +#if defined(OS_WIN)
|
| + shared_buf.reset(new base::SharedMemory);
|
| + if (!shared_buf->CreateAndMapAnonymous(buf_size)) {
|
| + NOTREACHED();
|
| + return NULL;
|
| + }
|
| +#else
|
| + // On POSIX, we need to ask the browser to create the shared memory for us,
|
| + // since this is blocked by the sandbox.
|
| + base::SharedMemoryHandle shared_mem_handle;
|
| + if (Send(new ChildProcessHostMsg_SyncAllocateSharedMemory(
|
| + buf_size, &shared_mem_handle)))) {
|
| + if (base::SharedMemory::IsHandleValid(shared_mem_handle)) {
|
| + shared_buf.reset(new base::SharedMemory(shared_mem_handle, false));
|
| + if (!shared_buf->Map(buf_size)) {
|
| + NOTREACHED() << "Map failed";
|
| + return NULL;
|
| + }
|
| + } else {
|
| + NOTREACHED() << "Browser failed to allocate shared memory";
|
| + return NULL;
|
| + }
|
| + } else {
|
| + NOTREACHED() << "Browser allocation request message failed";
|
| + return NULL;
|
| + }
|
| +#endif
|
| + return shared_buf.release();
|
| +}
|
| +
|
| ResourceDispatcher* ChildThread::resource_dispatcher() {
|
| return resource_dispatcher_.get();
|
| }
|
|
|