| Index: chrome/plugin/webplugin_delegate_stub.cc
|
| ===================================================================
|
| --- chrome/plugin/webplugin_delegate_stub.cc (revision 76844)
|
| +++ chrome/plugin/webplugin_delegate_stub.cc (working copy)
|
| @@ -28,6 +28,10 @@
|
| #include "printing/native_metafile.h"
|
| #endif // defined(OS_WIN)
|
|
|
| +#if defined(ENABLE_GPU)
|
| +#include "app/gfx/gl/gl_context.h"
|
| +#endif
|
| +
|
| using WebKit::WebBindings;
|
| using WebKit::WebCursorInfo;
|
| using webkit::npapi::WebPlugin;
|
| @@ -68,6 +72,13 @@
|
| in_destructor_ = true;
|
| child_process_logging::SetActiveURL(page_url_);
|
|
|
| +#if defined(ENABLE_GPU)
|
| + // Make sure there is no command buffer before destroying the window handle.
|
| + // The GPU service code might otherwise asynchronously perform an operation
|
| + // using the window handle.
|
| + command_buffer_stub_.reset();
|
| +#endif
|
| +
|
| if (channel_->in_send()) {
|
| // The delegate or an npobject is in the callstack, so don't delete it
|
| // right away.
|
| @@ -133,6 +144,10 @@
|
| OnHandleURLRequestReply)
|
| IPC_MESSAGE_HANDLER(PluginMsg_HTTPRangeRequestReply,
|
| OnHTTPRangeRequestReply)
|
| + IPC_MESSAGE_HANDLER(PluginMsg_CreateCommandBuffer,
|
| + OnCreateCommandBuffer)
|
| + IPC_MESSAGE_HANDLER(PluginMsg_DestroyCommandBuffer,
|
| + OnDestroyCommandBuffer)
|
| #if defined(OS_MACOSX)
|
| IPC_MESSAGE_HANDLER(PluginMsg_SetFakeAcceleratedSurfaceWindowHandle,
|
| OnSetFakeAcceleratedSurfaceWindowHandle)
|
| @@ -401,6 +416,29 @@
|
| delegate_->InstallMissingPlugin();
|
| }
|
|
|
| +void WebPluginDelegateStub::OnCreateCommandBuffer(int* route_id) {
|
| + *route_id = 0;
|
| +#if defined(ENABLE_GPU)
|
| + // Fail to create the command buffer if some GL implementation cannot be
|
| + // initialized.
|
| + if (!gfx::GLContext::InitializeOneOff())
|
| + return;
|
| +
|
| + command_buffer_stub_.reset(new CommandBufferStub(
|
| + channel_,
|
| + instance_id_,
|
| + delegate_->windowed_handle()));
|
| +
|
| + *route_id = command_buffer_stub_->route_id();
|
| +#endif // ENABLE_GPU
|
| +}
|
| +
|
| +void WebPluginDelegateStub::OnDestroyCommandBuffer() {
|
| +#if defined(ENABLE_GPU)
|
| + command_buffer_stub_.reset();
|
| +#endif
|
| +}
|
| +
|
| void WebPluginDelegateStub::CreateSharedBuffer(
|
| uint32 size,
|
| base::SharedMemory* shared_buf,
|
|
|