| Index: webkit/plugins/npapi/test/plugin_npobject_identity_test.cc
|
| diff --git a/webkit/plugins/npapi/test/plugin_npobject_identity_test.cc b/webkit/plugins/npapi/test/plugin_npobject_identity_test.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d6e2c38366f87f160d9ba14d4439d6d800806bd4
|
| --- /dev/null
|
| +++ b/webkit/plugins/npapi/test/plugin_npobject_identity_test.cc
|
| @@ -0,0 +1,84 @@
|
| +// Copyright (c) 2011 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 "base/basictypes.h"
|
| +#include "base/compiler_specific.h"
|
| +
|
| +#include "webkit/plugins/npapi/test/plugin_npobject_identity_test.h"
|
| +
|
| +namespace {
|
| +
|
| +class NPThingy : public NPObject {
|
| + public:
|
| + NPThingy() : NPObject() {}
|
| +
|
| + static NPObject* Allocate(NPP npp, NPClass* npclass) {
|
| + return new NPThingy();
|
| + }
|
| +
|
| + static void Deallocate(NPObject* npobject) {
|
| + delete static_cast<NPThingy*>(npobject);
|
| + }
|
| +};
|
| +
|
| +NPClass* GetNPThingyClass() {
|
| + static NPClass plugin_class = {
|
| + NP_CLASS_STRUCT_VERSION,
|
| + NPThingy::Allocate,
|
| + NPThingy::Deallocate,
|
| + NULL, // Invalidate
|
| + NULL, // HasMethod
|
| + NULL, // Invoke
|
| + NULL, // InvokeDefault
|
| + NULL, // HasProperty
|
| + NULL, // GetProperty
|
| + NULL, // SetProperty
|
| + NULL, // RemoveProperty
|
| + };
|
| + return &plugin_class;
|
| +}
|
| +
|
| +
|
| +} // namespace
|
| +
|
| +namespace NPAPIClient {
|
| +
|
| +NPObjectIdentityTest::NPObjectIdentityTest(NPP id, NPNetscapeFuncs *host_functions)
|
| + : PluginTest(id, host_functions) {
|
| +}
|
| +
|
| +NPError NPObjectIdentityTest::SetWindow(NPWindow* pNPWindow) {
|
| + if (pNPWindow->window == NULL)
|
| + return NPERR_NO_ERROR;
|
| +
|
| + NPIdentifier are_these_the_same_id = HostFunctions()->getstringidentifier("areTheseTheSame");
|
| +
|
| + // Get a function from window.areTheseTheSame.
|
| + NPObject* window;
|
| + HostFunctions()->getvalue(id(), NPNVWindowNPObject, &window);
|
| + NPVariant func_var;
|
| + HostFunctions()->getproperty(id(), window, are_these_the_same_id, &func_var);
|
| + NPObject* func = NPVARIANT_TO_OBJECT(func_var);
|
| +
|
| + // Create a custom NPObject and pass it in both arguments to areTheseTheSame.
|
| + NPObject* thingy = HostFunctions()->createobject(id(), GetNPThingyClass());
|
| + NPVariant func_args[2];
|
| + OBJECT_TO_NPVARIANT(thingy, func_args[0]);
|
| + OBJECT_TO_NPVARIANT(thingy, func_args[1]);
|
| + NPVariant were_the_same_var;
|
| + HostFunctions()->invokeDefault(id(), func, (const NPVariant*)&func_args, 2,
|
| + &were_the_same_var);
|
| +
|
| + // Confirm that JavaScript could see that the objects were the same.
|
| + bool were_the_same = NPVARIANT_TO_BOOLEAN(were_the_same_var);
|
| + if (!were_the_same)
|
| + SetError("Identity was lost in passing from NPAPI into JavaScript.");
|
| +
|
| + // If this test failed, then we'd have crashed by now.
|
| + SignalTestCompleted();
|
| +
|
| + return NPERR_NO_ERROR;
|
| +}
|
| +
|
| +} // namespace NPAPIClient
|
|
|