| Index: webkit/glue/plugins/test/plugin_npobject_lifetime_test.cc
|
| ===================================================================
|
| --- webkit/glue/plugins/test/plugin_npobject_lifetime_test.cc (revision 69426)
|
| +++ webkit/glue/plugins/test/plugin_npobject_lifetime_test.cc (working copy)
|
| @@ -1,174 +0,0 @@
|
| -// Copyright (c) 2006-2008 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.
|
| -
|
| -#include "webkit/glue/plugins/test/plugin_npobject_lifetime_test.h"
|
| -
|
| -namespace NPAPIClient {
|
| -
|
| -const int kNPObjectLifetimeTimer = 100;
|
| -const int kNPObjectLifetimeTimerElapse = 2000;
|
| -
|
| -NPObject* NPObjectLifetimeTestInstance2::plugin_instance_object_ = NULL;
|
| -
|
| -NPObjectDeletePluginInNPN_Evaluate*
|
| - NPObjectDeletePluginInNPN_Evaluate::g_npn_evaluate_test_instance_ = NULL;
|
| -
|
| -NPObjectLifetimeTest::NPObjectLifetimeTest(NPP id,
|
| - NPNetscapeFuncs *host_functions)
|
| - : PluginTest(id, host_functions),
|
| - other_plugin_instance_object_(NULL),
|
| - timer_id_(0) {
|
| -}
|
| -
|
| -NPError NPObjectLifetimeTest::SetWindow(NPWindow* pNPWindow) {
|
| - if (pNPWindow->window == NULL)
|
| - return NPERR_NO_ERROR;
|
| -
|
| - HWND window_handle = reinterpret_cast<HWND>(pNPWindow->window);
|
| - if (!::GetProp(window_handle, L"Plugin_Instance")) {
|
| - // TODO: this propery leaks.
|
| - ::SetProp(window_handle, L"Plugin_Instance", this);
|
| - // We attempt to retreive the NPObject for the plugin instance identified
|
| - // by the NPObjectLifetimeTestInstance2 class as it may not have been
|
| - // instantiated yet.
|
| - timer_id_ = SetTimer(window_handle, kNPObjectLifetimeTimer,
|
| - kNPObjectLifetimeTimerElapse, TimerProc);
|
| - }
|
| - return NPERR_NO_ERROR;
|
| -}
|
| -
|
| -void CALLBACK NPObjectLifetimeTest::TimerProc(
|
| - HWND window, UINT message, UINT timer_id,
|
| - unsigned long elapsed_milli_seconds) {
|
| -
|
| - NPObjectLifetimeTest* this_instance =
|
| - reinterpret_cast<NPObjectLifetimeTest*>
|
| - (::GetProp(window, L"Plugin_Instance"));
|
| - KillTimer(window, this_instance->timer_id_);
|
| - ::RemoveProp(window, L"Plugin_Instance");
|
| -
|
| - this_instance->timer_id_ = 0;
|
| -
|
| - this_instance->other_plugin_instance_object_ =
|
| - NPObjectLifetimeTestInstance2::plugin_instance_object_;
|
| - this_instance->HostFunctions()->retainobject(
|
| - this_instance->other_plugin_instance_object_);
|
| -
|
| - NPString script;
|
| - script.UTF8Characters = "javascript:DeleteSecondPluginInstance()";
|
| - script.UTF8Length = static_cast<uint32_t>(strlen(script.UTF8Characters));
|
| -
|
| - this_instance->HostFunctions()->geturlnotify(
|
| - this_instance->id(), "javascript:DeleteSecondPluginInstance()", NULL,
|
| - reinterpret_cast<void*>(1));
|
| -}
|
| -
|
| -void NPObjectLifetimeTest::URLNotify(const char* url, NPReason reason,
|
| - void* data) {
|
| - // Create a "location" identifier.
|
| - NPIdentifier identifier = HostFunctions()->getstringidentifier("location");
|
| - // Declare a local variant value.
|
| - NPVariant variantValue;
|
| - // Get the location property from the window object (which is another object).
|
| - bool b1 = HostFunctions()->getproperty(id(), other_plugin_instance_object_,
|
| - identifier, &variantValue );
|
| - HostFunctions()->releaseobject(other_plugin_instance_object_);
|
| - other_plugin_instance_object_ = NULL;
|
| - // If this test failed, then we'd have crashed by now.
|
| - SignalTestCompleted();
|
| -}
|
| -
|
| -NPObjectLifetimeTestInstance2::NPObjectLifetimeTestInstance2(
|
| - NPP id, NPNetscapeFuncs *host_functions)
|
| - : PluginTest(id, host_functions) {
|
| -}
|
| -
|
| -NPObjectLifetimeTestInstance2::~NPObjectLifetimeTestInstance2() {
|
| - if (plugin_instance_object_) {
|
| - HostFunctions()->releaseobject(plugin_instance_object_);
|
| - plugin_instance_object_ = NULL;
|
| - }
|
| -}
|
| -
|
| -NPError NPObjectLifetimeTestInstance2::SetWindow(NPWindow* pNPWindow) {
|
| - if (pNPWindow->window == NULL)
|
| - return NPERR_NO_ERROR;
|
| -
|
| - if (!plugin_instance_object_) {
|
| - if (!HostFunctions()->getvalue(id(), NPNVWindowNPObject,
|
| - &plugin_instance_object_)) {
|
| - SetError("Failed to get NPObject for plugin instance2");
|
| - SignalTestCompleted();
|
| - return NPERR_GENERIC_ERROR;
|
| - }
|
| - }
|
| -
|
| - return NPERR_NO_ERROR;
|
| -}
|
| -
|
| -
|
| -NPObjectDeletePluginInNPN_Evaluate::NPObjectDeletePluginInNPN_Evaluate(
|
| - NPP id, NPNetscapeFuncs *host_functions)
|
| - : PluginTest(id, host_functions),
|
| - plugin_instance_object_(NULL),
|
| - timer_id_(0) {
|
| - g_npn_evaluate_test_instance_ = this;
|
| -}
|
| -
|
| -NPObjectDeletePluginInNPN_Evaluate::~NPObjectDeletePluginInNPN_Evaluate() {
|
| - if (plugin_instance_object_) {
|
| - HostFunctions()->releaseobject(plugin_instance_object_);
|
| - plugin_instance_object_ = NULL;
|
| - }
|
| -}
|
| -
|
| -NPError NPObjectDeletePluginInNPN_Evaluate::SetWindow(NPWindow* np_window) {
|
| - if (np_window->window == NULL)
|
| - return NPERR_NO_ERROR;
|
| -
|
| - HWND window_handle = reinterpret_cast<HWND>(np_window->window);
|
| - // We setup a timerproc to invoke NPN_Evaluate to destroy this plugin
|
| - // instance. This is to ensure that we don't destroy the plugin instance
|
| - // while it is being used in webkit as this leads to crashes and is a
|
| - // more accurate representation of the renderer crash as described in
|
| - // http://b/issue?id=1134683.
|
| - if (!timer_id_) {
|
| - timer_id_ = SetTimer(window_handle, kNPObjectLifetimeTimer,
|
| - kNPObjectLifetimeTimerElapse, TimerProc);
|
| - }
|
| - return NPERR_NO_ERROR;
|
| -}
|
| -
|
| -void CALLBACK NPObjectDeletePluginInNPN_Evaluate::TimerProc(
|
| - HWND window, UINT message, UINT timer_id,
|
| - unsigned long elapsed_milli_seconds) {
|
| -
|
| - KillTimer(window, g_npn_evaluate_test_instance_->timer_id_);
|
| - g_npn_evaluate_test_instance_->timer_id_ = 0;
|
| - NPObject *window_obj = NULL;
|
| - g_npn_evaluate_test_instance_->HostFunctions()->getvalue(
|
| - g_npn_evaluate_test_instance_->id(), NPNVWindowNPObject,
|
| - &window_obj);
|
| -
|
| - if (!window_obj) {
|
| - g_npn_evaluate_test_instance_->SetError(
|
| - "Failed to get NPObject for plugin instance2");
|
| - g_npn_evaluate_test_instance_->SignalTestCompleted();
|
| - return;
|
| - }
|
| -
|
| - std::string script = "javascript:DeletePluginWithinScript()";
|
| - NPString script_string;
|
| - script_string.UTF8Characters = script.c_str();
|
| - script_string.UTF8Length =
|
| - static_cast<unsigned int>(script.length());
|
| -
|
| - NPVariant result_var;
|
| - bool result = g_npn_evaluate_test_instance_->HostFunctions()->evaluate(
|
| - g_npn_evaluate_test_instance_->id(), window_obj,
|
| - &script_string, &result_var);
|
| - // If this test failed we would have crashed by now.
|
| -}
|
| -
|
| -} // namespace NPAPIClient
|
|
|