| Index: gpu/gpu_plugin/gpu_plugin.cc
|
| ===================================================================
|
| --- gpu/gpu_plugin/gpu_plugin.cc (revision 36167)
|
| +++ gpu/gpu_plugin/gpu_plugin.cc (working copy)
|
| @@ -2,6 +2,12 @@
|
| // 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 "base/logging.h"
|
| +#include "build/build_config.h"
|
| #include "gpu/gpu_plugin/gpu_plugin.h"
|
| #include "webkit/glue/plugins/nphostapi.h"
|
|
|
| @@ -11,12 +17,54 @@
|
|
|
| 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_) {
|
| + // 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;
|
| }
|
|
|
| @@ -24,10 +72,19 @@
|
| 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;
|
| }
|
|
|
|
|