Index: content/renderer/render_thread_impl.cc |
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc |
index 32109c0d41ac8dfc4a4456a06aad7e015f458788..e6f725eaa385188651d25c9fc91409149b2be53d 100644 |
--- a/content/renderer/render_thread_impl.cc |
+++ b/content/renderer/render_thread_impl.cc |
@@ -105,6 +105,7 @@ |
#include "webkit/glue/webkit_glue.h" |
#include "webkit/child/worker_task_runner.h" |
#include "webkit/renderer/appcache/appcache_frontend_impl.h" |
+#include "webkit/renderer/compositor_bindings/web_external_bitmap_impl.h" |
#if defined(OS_WIN) |
#include <windows.h> |
@@ -216,6 +217,10 @@ void AddHistogramSample(void* hist, int sample) { |
histogram->Add(sample); |
} |
+scoped_ptr<base::SharedMemory> AllocateSharedMemoryFunction(size_t size) { |
+ return RenderThreadImpl::Get()->HostAllocateSharedMemoryBuffer(size); |
+} |
+ |
} // namespace |
class RenderThreadImpl::GpuVDAContextLostCallback |
@@ -723,6 +728,8 @@ void RenderThreadImpl::EnsureWebKitInitialized() { |
if (GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) |
ScheduleIdleHandler(kLongIdleHandlerDelayMs); |
+ |
+ webkit::SetSharedMemoryAllocationFunction(AllocateSharedMemoryFunction); |
} |
void RenderThreadImpl::RegisterSchemes() { |
@@ -755,6 +762,7 @@ scoped_ptr<base::SharedMemory> |
if (size > static_cast<size_t>(std::numeric_limits<int>::max())) |
return scoped_ptr<base::SharedMemory>(); |
+#if defined(OS_POSIX) |
base::SharedMemoryHandle handle; |
bool success; |
IPC::Message* message = |
@@ -773,6 +781,13 @@ scoped_ptr<base::SharedMemory> |
return scoped_ptr<base::SharedMemory>(); |
return scoped_ptr<base::SharedMemory>(new base::SharedMemory(handle, false)); |
+#else |
+ scoped_ptr<base::SharedMemory> memory(new base::SharedMemory); |
+ |
+ if (!memory->CreateAndMapAnonymous(size)) |
+ return scoped_ptr<base::SharedMemory>(); |
+ return memory.Pass(); |
+#endif |
} |
void RenderThreadImpl::RegisterExtension(v8::Extension* extension) { |