| Index: webkit/glue/plugins/plugin_host.cc
|
| ===================================================================
|
| --- webkit/glue/plugins/plugin_host.cc (revision 33478)
|
| +++ webkit/glue/plugins/plugin_host.cc (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -20,11 +20,11 @@
|
| #include "webkit/glue/webplugininfo.h"
|
| #include "webkit/glue/webplugin_delegate.h"
|
| #include "webkit/glue/webkit_glue.h"
|
| -#include "webkit/glue/pepper/pepper.h"
|
| #include "webkit/glue/plugins/plugin_instance.h"
|
| #include "webkit/glue/plugins/plugin_lib.h"
|
| #include "webkit/glue/plugins/plugin_list.h"
|
| #include "webkit/glue/plugins/plugin_stream_url.h"
|
| +#include "third_party/npapi/bindings/npapi_extensions.h"
|
| #include "third_party/npapi/bindings/npruntime.h"
|
|
|
| using WebKit::WebBindings;
|
| @@ -666,31 +666,81 @@
|
| }
|
|
|
| #if defined(PEPPER_APIS_ENABLED)
|
| -static NPError InitializeRenderContext(NPP id,
|
| - NPRenderType type,
|
| - NPRenderContext* context) {
|
| +// Pepper 2D device API --------------------------------------------------------
|
| +
|
| +static NPError Device2DQueryCapability(NPP id, int32 capability, int32* value) {
|
| scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
|
| if (plugin) {
|
| - webkit_glue::WebPluginDelegate* delegate = plugin->webplugin()->delegate();
|
| - // Set up the renderer for the specified type.
|
| - return delegate->InitializeRenderContext(type, context);
|
| + plugin->webplugin()->delegate()->Device2DQueryCapability(capability, value);
|
| + return NPERR_NO_ERROR;
|
| + } else {
|
| + return NPERR_GENERIC_ERROR;
|
| }
|
| +}
|
| +
|
| +static NPError Device2DQueryConfig(NPP id,
|
| + const NPDeviceConfig* request,
|
| + NPDeviceConfig* obtain) {
|
| + scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
|
| + if (plugin) {
|
| + return plugin->webplugin()->delegate()->Device2DQueryConfig(
|
| + static_cast<const NPDeviceContext2DConfig*>(request),
|
| + static_cast<NPDeviceContext2DConfig*>(obtain));
|
| + }
|
| return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| -static NPError FlushRenderContext(NPP id,
|
| - NPRenderContext* context,
|
| - NPFlushRenderContextCallbackPtr callback,
|
| - void* user_data) {
|
| +static NPError Device2DInitializeContext(NPP id,
|
| + const NPDeviceConfig* config,
|
| + NPDeviceContext* context) {
|
| scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
|
| if (plugin) {
|
| - webkit_glue::WebPluginDelegate* delegate = plugin->webplugin()->delegate();
|
| - // Do the flush.
|
| - NPError err = delegate->FlushRenderContext(context);
|
| + return plugin->webplugin()->delegate()->Device2DInitializeContext(
|
| + static_cast<const NPDeviceContext2DConfig*>(config),
|
| + static_cast<NPDeviceContext2D*>(context));
|
| + }
|
| + return NPERR_GENERIC_ERROR;
|
| +}
|
|
|
| +static NPError Device2DSetStateContext(NPP id,
|
| + NPDeviceContext* context,
|
| + int32 state,
|
| + int32 value) {
|
| + scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
|
| + if (plugin) {
|
| + return plugin->webplugin()->delegate()->Device2DSetStateContext(
|
| + static_cast<NPDeviceContext2D*>(context), state, value);
|
| + }
|
| + return NPERR_GENERIC_ERROR;
|
| +}
|
| +
|
| +static NPError Device2DGetStateContext(NPP id,
|
| + NPDeviceContext* context,
|
| + int32 state,
|
| + int32* value) {
|
| + scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
|
| + if (plugin) {
|
| + return plugin->webplugin()->delegate()->Device2DGetStateContext(
|
| + static_cast<NPDeviceContext2D*>(context), state, value);
|
| + }
|
| + return NPERR_GENERIC_ERROR;
|
| +}
|
| +
|
| +static NPError Device2DFlushContext(NPP id,
|
| + NPDeviceContext* context,
|
| + NPDeviceFlushContextCallbackPtr callback,
|
| + void* user_data) {
|
| + scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
|
| + if (plugin) {
|
| + NPError err = plugin->webplugin()->delegate()->Device2DFlushContext(
|
| + static_cast<NPDeviceContext2D*>(context), callback, user_data);
|
| +
|
| // Invoke the callback to inform the caller the work was done.
|
| + // TODO(brettw) this is probably not how we want this to work, this should
|
| + // happen when the frame is painted so the plugin knows when it can draw
|
| + // the next frame.
|
| if (callback != NULL)
|
| - (*callback)(context, err, user_data);
|
| + (*callback)(id, context, err, user_data);
|
|
|
| // Return any errors.
|
| return err;
|
| @@ -698,23 +748,36 @@
|
| return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| -static NPError DestroyRenderContext(NPP id,
|
| - NPRenderContext* context) {
|
| +static NPError Device2DDestroyContext(NPP id,
|
| + NPDeviceContext* context) {
|
| scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
|
| if (plugin) {
|
| - webkit_glue::WebPluginDelegate* delegate = plugin->webplugin()->delegate();
|
| - return delegate->DestroyRenderContext(context);
|
| + return plugin->webplugin()->delegate()->Device2DDestroyContext(
|
| + static_cast<NPDeviceContext2D*>(context));
|
| }
|
| return NPERR_GENERIC_ERROR;
|
| }
|
|
|
| -static NPError OpenFileInSandbox(NPP id, const char* file_name, void** handle) {
|
| - scoped_refptr<NPAPI::PluginInstance> plugin = FindInstance(id);
|
| - if (!plugin)
|
| - return NPERR_GENERIC_ERROR;
|
| - webkit_glue::WebPluginDelegate* delegate = plugin->webplugin()->delegate();
|
| - return delegate->OpenFileInSandbox(file_name, handle);
|
| +// -----------------------------------------------------------------------------
|
| +
|
| +static NPDevice* AcquireDevice(NPP id, NPDeviceID device_id) {
|
| + static NPDevice device_2d = {
|
| + Device2DQueryCapability,
|
| + Device2DQueryConfig,
|
| + Device2DInitializeContext,
|
| + Device2DSetStateContext,
|
| + Device2DGetStateContext,
|
| + Device2DFlushContext,
|
| + Device2DDestroyContext,
|
| + };
|
| + switch (device_id) {
|
| + case NPPepper2DDevice:
|
| + return const_cast<NPDevice*>(&device_2d);
|
| + default:
|
| + return NULL;
|
| + }
|
| }
|
| +
|
| #endif // defined(PEPPER_APIS_ENABLED)
|
|
|
| NPError NPN_GetValue(NPP id, NPNVariable variable, void *value) {
|
| @@ -872,16 +935,12 @@
|
| #if defined(PEPPER_APIS_ENABLED)
|
| case NPNVPepperExtensions:
|
| {
|
| - static const NPPepperExtensions kExtensions = {
|
| - InitializeRenderContext,
|
| - FlushRenderContext,
|
| - DestroyRenderContext,
|
| - OpenFileInSandbox,
|
| + static const NPExtensions kExtensions = {
|
| + AcquireDevice,
|
| };
|
| // Return a pointer to the canonical function table.
|
| - NPPepperExtensions* extensions =
|
| - const_cast<NPPepperExtensions*>(&kExtensions);
|
| - NPPepperExtensions** exts = reinterpret_cast<NPPepperExtensions**>(value);
|
| + NPExtensions* extensions = const_cast<NPExtensions*>(&kExtensions);
|
| + NPExtensions** exts = reinterpret_cast<NPExtensions**>(value);
|
| *exts = extensions;
|
| rv = NPERR_NO_ERROR;
|
| break;
|
|
|