diff options
author | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 00:56:36 +0000 |
---|---|---|
committer | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 00:56:36 +0000 |
commit | 8ef4d59eff51761c3d2243fb813d088eb2511989 (patch) | |
tree | 0a0398e3523a218eee7501710baf2348bd864172 /gpu | |
parent | 0b537a44c49a3ce217d7e21befd84224d089d588 (diff) | |
download | chromium_src-8ef4d59eff51761c3d2243fb813d088eb2511989.zip chromium_src-8ef4d59eff51761c3d2243fb813d088eb2511989.tar.gz chromium_src-8ef4d59eff51761c3d2243fb813d088eb2511989.tar.bz2 |
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
Diffstat (limited to 'gpu')
-rw-r--r-- | gpu/gpu_plugin/gpu_plugin.cc | 144 | ||||
-rw-r--r-- | gpu/gpu_plugin/gpu_plugin.h | 31 |
2 files changed, 175 insertions, 0 deletions
diff --git a/gpu/gpu_plugin/gpu_plugin.cc b/gpu/gpu_plugin/gpu_plugin.cc new file mode 100644 index 0000000..89be438 --- /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 <windows.h> +#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<HANDLE>(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<PluginObject*>(instance->pdata); +#endif + + return NPERR_NO_ERROR; +} + +NPError NPP_SetWindow(NPP instance, NPWindow* window) { +#if defined(OS_WIN) + PluginObject* plugin_object = static_cast<PluginObject*>(instance->pdata); + plugin_object->SetWindow(reinterpret_cast<HWND>(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<NPBool *>(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 0000000..05c98a9 --- /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_ |