OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/test/plugin/plugin_npobject_identity_test.h" | |
6 | |
7 #include "base/basictypes.h" | |
8 #include "base/compiler_specific.h" | |
9 | |
10 namespace { | |
11 | |
12 class NPThingy : public NPObject { | |
13 public: | |
14 NPThingy() : NPObject() {} | |
15 | |
16 static NPObject* Allocate(NPP npp, NPClass* npclass) { | |
17 return new NPThingy(); | |
18 } | |
19 | |
20 static void Deallocate(NPObject* npobject) { | |
21 delete static_cast<NPThingy*>(npobject); | |
22 } | |
23 }; | |
24 | |
25 NPClass* GetNPThingyClass() { | |
26 static NPClass plugin_class = { | |
27 NP_CLASS_STRUCT_VERSION, | |
28 NPThingy::Allocate, | |
29 NPThingy::Deallocate, | |
30 NULL, // Invalidate | |
31 NULL, // HasMethod | |
32 NULL, // Invoke | |
33 NULL, // InvokeDefault | |
34 NULL, // HasProperty | |
35 NULL, // GetProperty | |
36 NULL, // SetProperty | |
37 NULL, // RemoveProperty | |
38 }; | |
39 return &plugin_class; | |
40 } | |
41 | |
42 | |
43 } // namespace | |
44 | |
45 namespace NPAPIClient { | |
46 | |
47 NPObjectIdentityTest::NPObjectIdentityTest(NPP id, | |
48 NPNetscapeFuncs *host_functions) | |
49 : PluginTest(id, host_functions) { | |
50 } | |
51 | |
52 NPError NPObjectIdentityTest::SetWindow(NPWindow* pNPWindow) { | |
53 #if !defined(OS_MACOSX) | |
54 if (pNPWindow->window == NULL) | |
55 return NPERR_NO_ERROR; | |
56 #endif | |
57 | |
58 NPIdentifier are_these_the_same_id = HostFunctions()->getstringidentifier( | |
59 "areTheseTheSame"); | |
60 | |
61 // Get a function from window.areTheseTheSame. | |
62 NPObject* window; | |
63 HostFunctions()->getvalue(id(), NPNVWindowNPObject, &window); | |
64 NPVariant func_var; | |
65 HostFunctions()->getproperty(id(), window, are_these_the_same_id, &func_var); | |
66 NPObject* func = NPVARIANT_TO_OBJECT(func_var); | |
67 | |
68 // Create a custom NPObject and pass it in both arguments to areTheseTheSame. | |
69 NPObject* thingy = HostFunctions()->createobject(id(), GetNPThingyClass()); | |
70 NPVariant func_args[2]; | |
71 OBJECT_TO_NPVARIANT(thingy, func_args[0]); | |
72 OBJECT_TO_NPVARIANT(thingy, func_args[1]); | |
73 NPVariant were_the_same_var; | |
74 HostFunctions()->invokeDefault(id(), func, (const NPVariant*)&func_args, 2, | |
75 &were_the_same_var); | |
76 | |
77 // Confirm that JavaScript could see that the objects were the same. | |
78 bool were_the_same = NPVARIANT_TO_BOOLEAN(were_the_same_var); | |
79 if (!were_the_same) | |
80 SetError("Identity was lost in passing from NPAPI into JavaScript."); | |
81 | |
82 HostFunctions()->releaseobject(thingy); | |
83 | |
84 // If this test failed, then we'd have crashed by now. | |
85 SignalTestCompleted(); | |
86 | |
87 return NPERR_NO_ERROR; | |
88 } | |
89 | |
90 } // namespace NPAPIClient | |
OLD | NEW |