From 8ef4d59eff51761c3d2243fb813d088eb2511989 Mon Sep 17 00:00:00 2001 From: "apatrick@chromium.org" Date: Fri, 4 Mar 2011 00:56:36 +0000 Subject: [PATCH] Complete the revert of r76825 attempted in r76845. Drover did not add the deleted gpu_plugin directory. TEST=none BUG=none git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76846 0039d316-1c4b-4281-b951-d872f2087c98 --- gpu/gpu_plugin/gpu_plugin.cc | 144 +++++++++++++++++++++++++++++++++++ gpu/gpu_plugin/gpu_plugin.h | 31 ++++++++ 2 files changed, 175 insertions(+) create mode 100644 gpu/gpu_plugin/gpu_plugin.cc create mode 100644 gpu/gpu_plugin/gpu_plugin.h diff --git a/gpu/gpu_plugin/gpu_plugin.cc b/gpu/gpu_plugin/gpu_plugin.cc new file mode 100644 index 000000000000..89be4382d4b4 --- /dev/null +++ b/gpu/gpu_plugin/gpu_plugin.cc @@ -0,0 +1,144 @@ +// 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. + +#if defined(OS_WIN) +#include +#endif + +#include "build/build_config.h" +#include "gpu/gpu_plugin/gpu_plugin.h" +#include "third_party/npapi/bindings/nphostapi.h" + +namespace gpu_plugin { + +// Definitions of NPAPI plugin entry points. + +namespace { + +// TODO(apatrick): move this to platform specific source files. +#if defined(OS_WIN) +class PluginObject { + public: + PluginObject(); + ~PluginObject(); + + void SetWindow(HWND hwnd); + + private: + HWND hwnd_; + + DISALLOW_COPY_AND_ASSIGN(PluginObject); +}; + +const wchar_t* const kPluginObject = L"GPUPluginObject"; + +PluginObject::PluginObject() : hwnd_(NULL) { +} + +PluginObject::~PluginObject() { +} + +void PluginObject::SetWindow(HWND hwnd) { + hwnd_ = hwnd; + if (hwnd_) { + // TODO: convert this to using app::win::ScopedProp. + // Store plugin object in window property. + SetProp(hwnd_, kPluginObject, reinterpret_cast(this)); + + // Disable plugin window so mouse messages are passed to the parent window. + EnableWindow(hwnd_, false); + } else { + // Clean up properties. + RemoveProp(hwnd_, kPluginObject); + } +} + +#endif // defined(OS_WIN) + +NPError NPP_New(NPMIMEType plugin_type, NPP instance, + uint16 mode, int16 argc, char* argn[], + char* argv[], NPSavedData* saved) { + if (!instance) + return NPERR_INVALID_INSTANCE_ERROR; + +#if defined(OS_WIN) + instance->pdata = new PluginObject; +#endif + + return NPERR_NO_ERROR; +} + +NPError NPP_Destroy(NPP instance, NPSavedData** saved) { + if (!instance) + return NPERR_INVALID_INSTANCE_ERROR; + +#if defined(OS_WIN) + delete static_cast(instance->pdata); +#endif + + return NPERR_NO_ERROR; +} + +NPError NPP_SetWindow(NPP instance, NPWindow* window) { +#if defined(OS_WIN) + PluginObject* plugin_object = static_cast(instance->pdata); + plugin_object->SetWindow(reinterpret_cast(window->window)); +#endif + + return NPERR_NO_ERROR; +} + +int16 NPP_HandleEvent(NPP instance, void* event) { + return 0; +} + +NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value) { + if (!instance) + return NPERR_INVALID_INSTANCE_ERROR; + switch (variable) { + case NPPVpluginNeedsXEmbed: + *static_cast(value) = 1; + return NPERR_NO_ERROR; + default: + return NPERR_INVALID_PARAM; + } +} + +NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value) { + return NPERR_NO_ERROR; +} + +} // namespace + +NPError API_CALL NP_GetEntryPoints(NPPluginFuncs* funcs) { + funcs->newp = NPP_New; + funcs->destroy = NPP_Destroy; + funcs->setwindow = NPP_SetWindow; + funcs->event = NPP_HandleEvent; + funcs->getvalue = NPP_GetValue; + funcs->setvalue = NPP_SetValue; + return NPERR_NO_ERROR; +} + +#if defined(OS_POSIX) && !defined(OS_MACOSX) +NPError API_CALL NP_Initialize(NPNetscapeFuncs *browser_funcs, + NPPluginFuncs* plugin_funcs) { +#else +NPError API_CALL NP_Initialize(NPNetscapeFuncs *browser_funcs) { +#endif + if (!browser_funcs) + return NPERR_INVALID_FUNCTABLE_ERROR; + +#if defined(OS_POSIX) && !defined(OS_MACOSX) + NP_GetEntryPoints(plugin_funcs); +#endif + + return NPERR_NO_ERROR; +} + +NPError API_CALL NP_Shutdown() { + return NPERR_NO_ERROR; +} + +} // namespace gpu_plugin diff --git a/gpu/gpu_plugin/gpu_plugin.h b/gpu/gpu_plugin/gpu_plugin.h new file mode 100644 index 000000000000..05c98a9069ec --- /dev/null +++ b/gpu/gpu_plugin/gpu_plugin.h @@ -0,0 +1,31 @@ +// 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. + +#ifndef GPU_GPU_PLUGIN_GPU_PLUGIN_H_ +#define GPU_GPU_PLUGIN_GPU_PLUGIN_H_ + +#include "third_party/npapi/bindings/npapi.h" +#include "third_party/npapi/bindings/npruntime.h" + +typedef struct _NPPluginFuncs NPPluginFuncs; +typedef struct _NPNetscapeFuncs NPNetscapeFuncs; + +namespace gpu_plugin { + +// Declarations of NPAPI plugin entry points. + +NPError API_CALL NP_GetEntryPoints(NPPluginFuncs* funcs); + +#if defined(OS_POSIX) && !defined(OS_MACOSX) +NPError API_CALL NP_Initialize(NPNetscapeFuncs *browser_funcs, + NPPluginFuncs* plugin_funcs); +#else +NPError API_CALL NP_Initialize(NPNetscapeFuncs* browser_funcs); +#endif + +NPError API_CALL NP_Shutdown(); + +} // namespace gpu_plugin + +#endif // GPU_GPU_PLUGIN_GPU_PLUGIN_H_