OLD | NEW |
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 "ppapi/tests/test_post_message.h" | 5 #include "ppapi/tests/test_post_message.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "ppapi/c/dev/ppb_testing_dev.h" | 9 #include "ppapi/c/dev/ppb_testing_dev.h" |
10 #include "ppapi/c/pp_var.h" | 10 #include "ppapi/c/pp_var.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 // string. See Init for where it gets added. | 62 // string. See Init for where it gets added. |
63 std::string js_code; | 63 std::string js_code; |
64 js_code += "var plugin = document.getElementById('plugin');" | 64 js_code += "var plugin = document.getElementById('plugin');" |
65 "plugin.removeEventListener('message'," | 65 "plugin.removeEventListener('message'," |
66 " plugin.wait_for_messages_handler);" | 66 " plugin.wait_for_messages_handler);" |
67 "delete plugin.wait_for_messages_handler;"; | 67 "delete plugin.wait_for_messages_handler;"; |
68 instance_->EvalScript(js_code); | 68 instance_->EvalScript(js_code); |
69 } | 69 } |
70 | 70 |
71 bool TestPostMessage::Init() { | 71 bool TestPostMessage::Init() { |
72 bool success = InitTestingInterface(); | 72 bool success = CheckTestingInterface(); |
73 | 73 |
74 // Set up a special listener that only responds to a FINISHED_WAITING string. | 74 // Set up a special listener that only responds to a FINISHED_WAITING string. |
75 // This is for use by WaitForMessages. | 75 // This is for use by WaitForMessages. |
76 std::string js_code; | 76 std::string js_code; |
77 // Note the following code is dependent on some features of test_case.html. | 77 // Note the following code is dependent on some features of test_case.html. |
78 // E.g., it is assumed that the DOM element where the plugin is embedded has | 78 // E.g., it is assumed that the DOM element where the plugin is embedded has |
79 // an id of 'plugin', and there is a function 'IsTestingMessage' that allows | 79 // an id of 'plugin', and there is a function 'IsTestingMessage' that allows |
80 // us to ignore the messages that are intended for use by the testing | 80 // us to ignore the messages that are intended for use by the testing |
81 // framework itself. | 81 // framework itself. |
82 js_code += "var plugin = document.getElementById('plugin');" | 82 js_code += "var plugin = document.getElementById('plugin');" |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 // received (which may be zero). | 172 // received (which may be zero). |
173 return message_data_.size() - message_size_before; | 173 return message_data_.size() - message_size_before; |
174 } | 174 } |
175 | 175 |
176 std::string TestPostMessage::TestSendInInit() { | 176 std::string TestPostMessage::TestSendInInit() { |
177 ASSERT_EQ(WaitForMessages(), 1); | 177 ASSERT_EQ(WaitForMessages(), 1); |
178 // This test assumes Init already sent a message. | 178 // This test assumes Init already sent a message. |
179 ASSERT_EQ(message_data_.size(), 1); | 179 ASSERT_EQ(message_data_.size(), 1); |
180 ASSERT_TRUE(message_data_.back().is_string()); | 180 ASSERT_TRUE(message_data_.back().is_string()); |
181 ASSERT_EQ(message_data_.back().AsString(), kTestString); | 181 ASSERT_EQ(message_data_.back().AsString(), kTestString); |
| 182 message_data_.clear(); |
182 PASS(); | 183 PASS(); |
183 } | 184 } |
184 | 185 |
185 std::string TestPostMessage::TestSendingData() { | 186 std::string TestPostMessage::TestSendingData() { |
186 // Clean up after previous tests. This also swallows the message sent by Init | 187 // Clean up after previous tests. This also swallows the message sent by Init |
187 // if we didn't run the 'SendInInit' test. All tests other than 'SendInInit' | 188 // if we didn't run the 'SendInInit' test. All tests other than 'SendInInit' |
188 // should start with these. | 189 // should start with these. |
189 WaitForMessages(); | 190 WaitForMessages(); |
190 ASSERT_TRUE(ClearListeners()); | 191 ASSERT_TRUE(ClearListeners()); |
191 // Set up the JavaScript message event listener to echo the data part of the | 192 // Set up the JavaScript message event listener to echo the data part of the |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 ASSERT_EQ(message_data_.size(), 0); | 230 ASSERT_EQ(message_data_.size(), 0); |
230 ASSERT_EQ(WaitForMessages(), 1); | 231 ASSERT_EQ(WaitForMessages(), 1); |
231 ASSERT_TRUE(message_data_.back().is_undefined()); | 232 ASSERT_TRUE(message_data_.back().is_undefined()); |
232 | 233 |
233 message_data_.clear(); | 234 message_data_.clear(); |
234 instance_->PostMessage(pp::Var(pp::Var::Null())); | 235 instance_->PostMessage(pp::Var(pp::Var::Null())); |
235 ASSERT_EQ(message_data_.size(), 0); | 236 ASSERT_EQ(message_data_.size(), 0); |
236 ASSERT_EQ(WaitForMessages(), 1); | 237 ASSERT_EQ(WaitForMessages(), 1); |
237 ASSERT_TRUE(message_data_.back().is_null()); | 238 ASSERT_TRUE(message_data_.back().is_null()); |
238 | 239 |
| 240 message_data_.clear(); |
239 ASSERT_TRUE(ClearListeners()); | 241 ASSERT_TRUE(ClearListeners()); |
240 | 242 |
241 PASS(); | 243 PASS(); |
242 } | 244 } |
243 | 245 |
244 std::string TestPostMessage::TestSendingArrayBuffer() { | 246 std::string TestPostMessage::TestSendingArrayBuffer() { |
245 // Clean up after previous tests. This also swallows the message sent by Init | 247 // Clean up after previous tests. This also swallows the message sent by Init |
246 // if we didn't run the 'SendInInit' test. All tests other than 'SendInInit' | 248 // if we didn't run the 'SendInInit' test. All tests other than 'SendInInit' |
247 // should start with these. | 249 // should start with these. |
248 WaitForMessages(); | 250 WaitForMessages(); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 message_data_.clear(); | 291 message_data_.clear(); |
290 ASSERT_EQ(test_data.ByteLength(), received.ByteLength()); | 292 ASSERT_EQ(test_data.ByteLength(), received.ByteLength()); |
291 unsigned char* received_buff = static_cast<unsigned char*>(received.Map()); | 293 unsigned char* received_buff = static_cast<unsigned char*>(received.Map()); |
292 // The buffer should be copied, so this should be a distinct buffer. When | 294 // The buffer should be copied, so this should be a distinct buffer. When |
293 // 'transferrables' are implemented for PPAPI, we'll also want to test that | 295 // 'transferrables' are implemented for PPAPI, we'll also want to test that |
294 // we get the _same_ buffer back when it's transferred. | 296 // we get the _same_ buffer back when it's transferred. |
295 ASSERT_NE(buff, received_buff); | 297 ASSERT_NE(buff, received_buff); |
296 for (size_t i = 0; i < test_data.ByteLength(); ++i) | 298 for (size_t i = 0; i < test_data.ByteLength(); ++i) |
297 ASSERT_EQ(buff[i], received_buff[i]); | 299 ASSERT_EQ(buff[i], received_buff[i]); |
298 | 300 |
| 301 message_data_.clear(); |
299 ASSERT_TRUE(ClearListeners()); | 302 ASSERT_TRUE(ClearListeners()); |
300 | 303 |
301 PASS(); | 304 PASS(); |
302 } | 305 } |
303 | 306 |
304 std::string TestPostMessage::TestMessageEvent() { | 307 std::string TestPostMessage::TestMessageEvent() { |
305 // Set up the JavaScript message event listener to pass us some values from | 308 // Set up the JavaScript message event listener to pass us some values from |
306 // the MessageEvent and make sure they match our expectations. | 309 // the MessageEvent and make sure they match our expectations. |
307 | 310 |
308 WaitForMessages(); | 311 WaitForMessages(); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 std::vector<double> double_vec; | 357 std::vector<double> double_vec; |
355 for (; iter != the_end; ++iter) { | 358 for (; iter != the_end; ++iter) { |
356 ASSERT_TRUE(iter->is_number()); | 359 ASSERT_TRUE(iter->is_number()); |
357 double_vec.push_back(iter->AsDouble()); | 360 double_vec.push_back(iter->AsDouble()); |
358 } | 361 } |
359 std::sort(double_vec.begin(), double_vec.end()); | 362 std::sort(double_vec.begin(), double_vec.end()); |
360 ASSERT_DOUBLE_EQ(double_vec[0], 1.0); | 363 ASSERT_DOUBLE_EQ(double_vec[0], 1.0); |
361 ASSERT_DOUBLE_EQ(double_vec[1], 2.0); | 364 ASSERT_DOUBLE_EQ(double_vec[1], 2.0); |
362 ASSERT_DOUBLE_EQ(double_vec[2], 3.0); | 365 ASSERT_DOUBLE_EQ(double_vec[2], 3.0); |
363 | 366 |
| 367 message_data_.clear(); |
| 368 ASSERT_TRUE(ClearListeners()); |
| 369 |
364 PASS(); | 370 PASS(); |
365 } | 371 } |
366 | 372 |
367 std::string TestPostMessage::TestNoHandler() { | 373 std::string TestPostMessage::TestNoHandler() { |
368 // Delete any lingering messages and event listeners. | 374 // Delete any lingering messages and event listeners. |
369 WaitForMessages(); | 375 WaitForMessages(); |
370 ASSERT_TRUE(ClearListeners()); | 376 ASSERT_TRUE(ClearListeners()); |
371 | 377 |
372 // Now send a message. We shouldn't get a response. | 378 // Now send a message. We shouldn't get a response. |
373 message_data_.clear(); | 379 message_data_.clear(); |
(...skipping 11 matching lines...) Expand all Loading... |
385 // Add a listener that will respond with 1 and an empty array (where the | 391 // Add a listener that will respond with 1 and an empty array (where the |
386 // message port array would appear if it was Worker postMessage). | 392 // message port array would appear if it was Worker postMessage). |
387 ASSERT_TRUE(AddEchoingListener("1, []")); | 393 ASSERT_TRUE(AddEchoingListener("1, []")); |
388 | 394 |
389 // Now send a message. We shouldn't get a response. | 395 // Now send a message. We shouldn't get a response. |
390 message_data_.clear(); | 396 message_data_.clear(); |
391 instance_->PostMessage(pp::Var()); | 397 instance_->PostMessage(pp::Var()); |
392 ASSERT_EQ(WaitForMessages(), 0); | 398 ASSERT_EQ(WaitForMessages(), 0); |
393 ASSERT_TRUE(message_data_.empty()); | 399 ASSERT_TRUE(message_data_.empty()); |
394 | 400 |
| 401 ASSERT_TRUE(ClearListeners()); |
| 402 |
395 PASS(); | 403 PASS(); |
396 } | 404 } |
397 | 405 |
398 std::string TestPostMessage::TestNonMainThread() { | 406 std::string TestPostMessage::TestNonMainThread() { |
399 WaitForMessages(); | 407 WaitForMessages(); |
400 ASSERT_TRUE(ClearListeners()); | 408 ASSERT_TRUE(ClearListeners()); |
401 ASSERT_TRUE(AddEchoingListener("message_event.data")); | 409 ASSERT_TRUE(AddEchoingListener("message_event.data")); |
402 message_data_.clear(); | 410 message_data_.clear(); |
403 | 411 |
404 // Set up a thread for each integer from 0 to (kThreadsToRun - 1). Make each | 412 // Set up a thread for each integer from 0 to (kThreadsToRun - 1). Make each |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 received_value = latest_var.AsInt(); | 449 received_value = latest_var.AsInt(); |
442 } else if (latest_var.is_double()) { | 450 } else if (latest_var.is_double()) { |
443 received_value = static_cast<int32_t>(latest_var.AsDouble() + 0.5); | 451 received_value = static_cast<int32_t>(latest_var.AsDouble() + 0.5); |
444 } | 452 } |
445 ASSERT_TRUE(received_value >= 0); | 453 ASSERT_TRUE(received_value >= 0); |
446 ASSERT_TRUE(received_value <= kThreadsToRun); | 454 ASSERT_TRUE(received_value <= kThreadsToRun); |
447 ++received_counts[received_value]; | 455 ++received_counts[received_value]; |
448 } | 456 } |
449 ASSERT_EQ(received_counts, expected_counts); | 457 ASSERT_EQ(received_counts, expected_counts); |
450 | 458 |
| 459 message_data_.clear(); |
| 460 ASSERT_TRUE(ClearListeners()); |
| 461 |
451 PASS(); | 462 PASS(); |
452 } | 463 } |
453 | 464 |
OLD | NEW |