Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Side by Side Diff: ppapi/proxy/ppp_instance_proxy_test.cc

Issue 7362012: Remove untrusted scripting support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/proxy/ppp_instance_proxy.cc ('k') | ppapi/shared_impl/ppp_instance_combined.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/synchronization/waitable_event.h" 5 #include "base/synchronization/waitable_event.h"
6 #include "ipc/ipc_message_utils.h" 6 #include "ipc/ipc_message_utils.h"
7 #include "ppapi/c/dev/ppb_fullscreen_dev.h" 7 #include "ppapi/c/dev/ppb_fullscreen_dev.h"
8 #include "ppapi/c/pp_var.h" 8 #include "ppapi/c/pp_var.h"
9 #include "ppapi/c/ppb_core.h" 9 #include "ppapi/c/ppb_core.h"
10 #include "ppapi/c/ppb_url_loader.h" 10 #include "ppapi/c/ppb_url_loader.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 received_instance = 0; 88 received_instance = 0;
89 received_argc = 0; 89 received_argc = 0;
90 received_argn.clear(); 90 received_argn.clear();
91 received_argv.clear(); 91 received_argv.clear();
92 memset(&received_position, 0, sizeof(received_position)); 92 memset(&received_position, 0, sizeof(received_position));
93 memset(&received_clip, 0, sizeof(received_clip)); 93 memset(&received_clip, 0, sizeof(received_clip));
94 received_has_focus = PP_FALSE; 94 received_has_focus = PP_FALSE;
95 memset(&received_event, 0, sizeof(received_event)); 95 memset(&received_event, 0, sizeof(received_event));
96 } 96 }
97 97
98 PPP_Instance_0_4 ppp_instance_0_4 = {
99 &DidCreate,
100 &DidDestroy,
101 &DidChangeView,
102 &DidChangeFocus,
103 &HandleInputEvent,
104 &HandleDocumentLoad,
105 &GetInstanceObject
106 };
107
108 PPP_Instance_0_5 ppp_instance_0_5 = { 98 PPP_Instance_0_5 ppp_instance_0_5 = {
109 &DidCreate, 99 &DidCreate,
110 &DidDestroy, 100 &DidDestroy,
111 &DidChangeView, 101 &DidChangeView,
112 &DidChangeFocus, 102 &DidChangeFocus,
113 &HandleInputEvent, 103 &HandleInputEvent,
114 &HandleDocumentLoad 104 &HandleDocumentLoad
115 }; 105 };
116 106
117 // PPP_Instance_Proxy::DidChangeView relies on PPB_FullscreenDev being 107 // PPP_Instance_Proxy::DidChangeView relies on PPB_FullscreenDev being
118 // available with a valid implementation of IsFullScreen, so we mock it. 108 // available with a valid implementation of IsFullScreen, so we mock it.
119 PP_Bool IsFullscreen(PP_Instance instance) { 109 PP_Bool IsFullscreen(PP_Instance instance) {
120 return PP_FALSE; 110 return PP_FALSE;
121 } 111 }
122 PPB_Fullscreen_Dev ppb_fullscreen_dev = { &IsFullscreen }; 112 PPB_Fullscreen_Dev ppb_fullscreen_dev = { &IsFullscreen };
123 113
124 } // namespace 114 } // namespace
125 115
126 class PPP_Instance_ProxyTest : public TwoWayTest { 116 class PPP_Instance_ProxyTest : public TwoWayTest {
127 public: 117 public:
128 PPP_Instance_ProxyTest() 118 PPP_Instance_ProxyTest()
129 : TwoWayTest(TwoWayTest::TEST_PPP_INTERFACE) { 119 : TwoWayTest(TwoWayTest::TEST_PPP_INTERFACE) {
130 } 120 }
131 }; 121 };
132 122
133 TEST_F(PPP_Instance_ProxyTest, PPPInstance0_4) {
134 plugin().RegisterTestInterface(PPP_INSTANCE_INTERFACE_0_4, &ppp_instance_0_4);
135 host().RegisterTestInterface(PPB_FULLSCREEN_DEV_INTERFACE,
136 &ppb_fullscreen_dev);
137
138 // Try requesting the 0.5 version, like the browser does. This should come
139 // back NULL, since we're not registering 0.5. But this ensures that the
140 // behavior through the proxy code reflects more closely what happens for a
141 // real plug-in.
142 const void* interface =
143 host().host_dispatcher()->GetProxiedInterface(PPP_INSTANCE_INTERFACE_0_5);
144 EXPECT_EQ(NULL, interface);
145
146 // Grab the host-side proxy for the 0.4 interface.
147 const PPP_Instance_0_4* ppp_instance = static_cast<const PPP_Instance_0_4*>(
148 host().host_dispatcher()->GetProxiedInterface(
149 PPP_INSTANCE_INTERFACE_0_4));
150
151 // Call each function in turn, make sure we get the expected values and
152 // returns.
153 //
154 // We don't test DidDestroy, because it has the side-effect of removing the
155 // PP_Instance from the PluginDispatcher, which will cause a failure later
156 // when the test is torn down.
157 PP_Instance expected_instance = pp_instance();
158 std::vector<std::string> expected_argn, expected_argv;
159 expected_argn.push_back("Hello");
160 expected_argn.push_back("world.");
161 expected_argv.push_back("elloHay");
162 expected_argv.push_back("orldway.");
163 std::vector<const char*> argn_to_pass, argv_to_pass;
164 CHECK(expected_argn.size() == expected_argv.size());
165 for (size_t i = 0; i < expected_argn.size(); ++i) {
166 argn_to_pass.push_back(expected_argn[i].c_str());
167 argv_to_pass.push_back(expected_argv[i].c_str());
168 }
169 uint32_t expected_argc = expected_argn.size();
170 bool_to_return = PP_TRUE;
171 ResetReceived();
172 EXPECT_EQ(bool_to_return, ppp_instance->DidCreate(expected_instance,
173 expected_argc,
174 &argn_to_pass[0],
175 &argv_to_pass[0]));
176 EXPECT_EQ(received_instance, expected_instance);
177 EXPECT_EQ(received_argc, expected_argc);
178 EXPECT_EQ(received_argn, expected_argn);
179 EXPECT_EQ(received_argv, expected_argv);
180
181 PP_Rect expected_position = { {1, 2}, {3, 4} };
182 PP_Rect expected_clip = { {5, 6}, {7, 8} };
183 ResetReceived();
184 ppp_instance->DidChangeView(expected_instance, &expected_position,
185 &expected_clip);
186 did_change_view_called.Wait();
187 EXPECT_EQ(received_instance, expected_instance);
188 // If I define operator== for PP_Rect, it has to come before gtest's template
189 // definitions in the translation unit, or else it's not found. So instead of
190 // defining operator== before the #include that brings in gtest, I compare the
191 // individual parts.
192 EXPECT_EQ(received_position.point.x, expected_position.point.x);
193 EXPECT_EQ(received_position.point.y, expected_position.point.y);
194 EXPECT_EQ(received_position.size.width, expected_position.size.width);
195 EXPECT_EQ(received_position.size.height, expected_position.size.height);
196 EXPECT_EQ(received_clip.point.x, expected_clip.point.x);
197 EXPECT_EQ(received_clip.point.y, expected_clip.point.y);
198 EXPECT_EQ(received_clip.size.width, expected_clip.size.width);
199 EXPECT_EQ(received_clip.size.height, expected_clip.size.height);
200
201 PP_Bool expected_has_focus = PP_TRUE;
202 ResetReceived();
203 ppp_instance->DidChangeFocus(expected_instance, expected_has_focus);
204 did_change_focus_called.Wait();
205 EXPECT_EQ(received_instance, expected_instance);
206 EXPECT_EQ(received_has_focus, expected_has_focus);
207
208 PP_InputEvent expected_event = { PP_INPUTEVENT_TYPE_KEYDOWN, // type
209 0, // padding
210 1.0, // time_stamp
211 { { 2, 3 } } }; // u (as PP_InputEvent_Key)
212 ResetReceived();
213 EXPECT_EQ(bool_to_return,
214 ppp_instance->HandleInputEvent(expected_instance, &expected_event));
215 EXPECT_EQ(received_instance, expected_instance);
216 ASSERT_EQ(received_event.type, expected_event.type);
217 // Ignore padding; it's okay if it's not serialized.
218 EXPECT_EQ(received_event.time_stamp, expected_event.time_stamp);
219 EXPECT_EQ(received_event.u.key.modifier, expected_event.u.key.modifier);
220 EXPECT_EQ(received_event.u.key.key_code, expected_event.u.key.key_code);
221
222 // TODO(dmichael): Need to mock out a resource Tracker to be able to test
223 // HandleResourceLoad. It also requires
224 // PPB_Core.AddRefResource and for PPB_URLLoader to be
225 // registered.
226
227 var_to_return = PP_MakeInt32(100);
228 ResetReceived();
229 PP_Var result(ppp_instance->GetInstanceObject(expected_instance));
230 ASSERT_EQ(var_to_return.type, result.type);
231 EXPECT_EQ(var_to_return.value.as_int, result.value.as_int);
232 EXPECT_EQ(received_instance, expected_instance);
233 }
234
235 TEST_F(PPP_Instance_ProxyTest, PPPInstance0_5) { 123 TEST_F(PPP_Instance_ProxyTest, PPPInstance0_5) {
236 plugin().RegisterTestInterface(PPP_INSTANCE_INTERFACE_0_5, &ppp_instance_0_5); 124 plugin().RegisterTestInterface(PPP_INSTANCE_INTERFACE_0_5, &ppp_instance_0_5);
237 host().RegisterTestInterface(PPB_FULLSCREEN_DEV_INTERFACE, 125 host().RegisterTestInterface(PPB_FULLSCREEN_DEV_INTERFACE,
238 &ppb_fullscreen_dev); 126 &ppb_fullscreen_dev);
239 127
240 // Grab the host-side proxy for the 0.5 interface. 128 // Grab the host-side proxy for the 0.5 interface.
241 const PPP_Instance_0_5* ppp_instance = static_cast<const PPP_Instance_0_5*>( 129 const PPP_Instance_0_5* ppp_instance = static_cast<const PPP_Instance_0_5*>(
242 host().host_dispatcher()->GetProxiedInterface( 130 host().host_dispatcher()->GetProxiedInterface(
243 PPP_INSTANCE_INTERFACE_0_5)); 131 PPP_INSTANCE_INTERFACE_0_5));
244 132
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 199
312 // TODO(dmichael): Need to mock out a resource Tracker to be able to test 200 // TODO(dmichael): Need to mock out a resource Tracker to be able to test
313 // HandleResourceLoad. It also requires 201 // HandleResourceLoad. It also requires
314 // PPB_Core.AddRefResource and for PPB_URLLoader to be 202 // PPB_Core.AddRefResource and for PPB_URLLoader to be
315 // registered. 203 // registered.
316 } 204 }
317 205
318 } // namespace proxy 206 } // namespace proxy
319 } // namespace pp 207 } // namespace pp
320 208
OLDNEW
« no previous file with comments | « ppapi/proxy/ppp_instance_proxy.cc ('k') | ppapi/shared_impl/ppp_instance_combined.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698