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

Side by Side Diff: ppapi/tests/test_post_message.cc

Issue 6745015: Make PPAPI PostMessage behave asynchronously. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 9 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 | « chrome/test/ui/ppapi_uitest.cc ('k') | webkit/plugins/ppapi/message_channel.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 "ppapi/tests/test_post_message.h" 5 #include "ppapi/tests/test_post_message.h"
6 6
7 #include "ppapi/c/dev/ppb_testing_dev.h" 7 #include "ppapi/c/dev/ppb_testing_dev.h"
8 #include "ppapi/c/pp_var.h" 8 #include "ppapi/c/pp_var.h"
9 #include "ppapi/cpp/dev/scriptable_object_deprecated.h" 9 #include "ppapi/cpp/dev/scriptable_object_deprecated.h"
10 #include "ppapi/cpp/instance.h" 10 #include "ppapi/cpp/instance.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 } 44 }
45 45
46 void TestPostMessage::RunTest() { 46 void TestPostMessage::RunTest() {
47 RUN_TEST(SendingData); 47 RUN_TEST(SendingData);
48 RUN_TEST(MessageEvent); 48 RUN_TEST(MessageEvent);
49 RUN_TEST(NoHandler); 49 RUN_TEST(NoHandler);
50 } 50 }
51 51
52 void TestPostMessage::HandleMessage(const pp::Var& message_data) { 52 void TestPostMessage::HandleMessage(const pp::Var& message_data) {
53 message_data_.push_back(message_data); 53 message_data_.push_back(message_data);
54 testing_interface_->QuitMessageLoop(instance_->pp_instance());
54 } 55 }
55 56
56 bool TestPostMessage::MakeOnMessageEcho(const std::string& expression) { 57 bool TestPostMessage::MakeOnMessageEcho(const std::string& expression) {
57 std::string js_code( 58 std::string js_code(
58 "document.getElementById('plugin').onmessage = function(message_event) {" 59 "document.getElementById('plugin').onmessage = function(message_event) {"
59 " document.getElementById('plugin').postMessage("); 60 " document.getElementById('plugin').postMessage(");
60 js_code += expression; 61 js_code += expression;
61 js_code += ");}"; 62 js_code += ");}";
62 pp::Var exception; 63 pp::Var exception;
63 // TODO(dmichael): Move ExecuteScript to the testing interface. 64 // TODO(dmichael): Move ExecuteScript to the testing interface.
64 instance_->ExecuteScript(js_code, &exception); 65 instance_->ExecuteScript(js_code, &exception);
65 return(exception.is_undefined()); 66 return(exception.is_undefined());
66 } 67 }
67 68
68 std::string TestPostMessage::TestSendingData() { 69 std::string TestPostMessage::TestSendingData() {
69 // Set up the JavaScript onmessage handler to echo the data part of the 70 // Set up the JavaScript onmessage handler to echo the data part of the
70 // message event back to us. 71 // message event back to us.
71 ASSERT_TRUE(MakeOnMessageEcho("message_event.data")); 72 ASSERT_TRUE(MakeOnMessageEcho("message_event.data"));
72 73
73 // Test sending a message to JavaScript for each supported type. The JS sends 74 // Test sending a message to JavaScript for each supported type. The JS sends
74 // the data back to us, and we check that they match. 75 // the data back to us, and we check that they match.
75 message_data_.clear(); 76 message_data_.clear();
76 instance_->PostMessage(pp::Var(kTestString)); 77 instance_->PostMessage(pp::Var(kTestString));
77 // Note that the trusted in-process version is completely synchronous, so we 78 // PostMessage is asynchronous, so we should not receive a response yet.
78 // do not need to use 'RunMessageLoop' to wait. 79 ASSERT_EQ(message_data_.size(), 0);
80
81 testing_interface_->RunMessageLoop(instance_->pp_instance());
79 ASSERT_EQ(message_data_.size(), 1); 82 ASSERT_EQ(message_data_.size(), 1);
80 ASSERT_TRUE(message_data_.back().is_string()); 83 ASSERT_TRUE(message_data_.back().is_string());
81 ASSERT_EQ(message_data_.back().AsString(), kTestString); 84 ASSERT_EQ(message_data_.back().AsString(), kTestString);
82 85
83 message_data_.clear(); 86 message_data_.clear();
84 instance_->PostMessage(pp::Var(kTestBool)); 87 instance_->PostMessage(pp::Var(kTestBool));
88 ASSERT_EQ(message_data_.size(), 0);
89 testing_interface_->RunMessageLoop(instance_->pp_instance());
85 ASSERT_EQ(message_data_.size(), 1); 90 ASSERT_EQ(message_data_.size(), 1);
86 ASSERT_TRUE(message_data_.back().is_bool()); 91 ASSERT_TRUE(message_data_.back().is_bool());
87 ASSERT_EQ(message_data_.back().AsBool(), kTestBool); 92 ASSERT_EQ(message_data_.back().AsBool(), kTestBool);
88 93
89 message_data_.clear(); 94 message_data_.clear();
90 instance_->PostMessage(pp::Var(kTestInt)); 95 instance_->PostMessage(pp::Var(kTestInt));
96 ASSERT_EQ(message_data_.size(), 0);
97 testing_interface_->RunMessageLoop(instance_->pp_instance());
91 ASSERT_EQ(message_data_.size(), 1); 98 ASSERT_EQ(message_data_.size(), 1);
92 ASSERT_TRUE(message_data_.back().is_number()); 99 ASSERT_TRUE(message_data_.back().is_number());
93 ASSERT_DOUBLE_EQ(message_data_.back().AsDouble(), 100 ASSERT_DOUBLE_EQ(message_data_.back().AsDouble(),
94 static_cast<double>(kTestInt)); 101 static_cast<double>(kTestInt));
95 102
96 message_data_.clear(); 103 message_data_.clear();
97 instance_->PostMessage(pp::Var(kTestDouble)); 104 instance_->PostMessage(pp::Var(kTestDouble));
105 ASSERT_EQ(message_data_.size(), 0);
106 testing_interface_->RunMessageLoop(instance_->pp_instance());
98 ASSERT_EQ(message_data_.size(), 1); 107 ASSERT_EQ(message_data_.size(), 1);
99 ASSERT_TRUE(message_data_.back().is_number()); 108 ASSERT_TRUE(message_data_.back().is_number());
100 ASSERT_DOUBLE_EQ(message_data_.back().AsDouble(), kTestDouble); 109 ASSERT_DOUBLE_EQ(message_data_.back().AsDouble(), kTestDouble);
101 110
102 message_data_.clear(); 111 message_data_.clear();
103 instance_->PostMessage(pp::Var()); 112 instance_->PostMessage(pp::Var());
113 ASSERT_EQ(message_data_.size(), 0);
114 testing_interface_->RunMessageLoop(instance_->pp_instance());
104 ASSERT_EQ(message_data_.size(), 1); 115 ASSERT_EQ(message_data_.size(), 1);
105 ASSERT_TRUE(message_data_.back().is_undefined()); 116 ASSERT_TRUE(message_data_.back().is_undefined());
106 117
107 message_data_.clear(); 118 message_data_.clear();
108 instance_->PostMessage(pp::Var(pp::Var::Null())); 119 instance_->PostMessage(pp::Var(pp::Var::Null()));
120 ASSERT_EQ(message_data_.size(), 0);
121 testing_interface_->RunMessageLoop(instance_->pp_instance());
109 ASSERT_EQ(message_data_.size(), 1); 122 ASSERT_EQ(message_data_.size(), 1);
110 ASSERT_TRUE(message_data_.back().is_null()); 123 ASSERT_TRUE(message_data_.back().is_null());
111 124
112 PASS(); 125 PASS();
113 } 126 }
114 127
115 std::string TestPostMessage::TestMessageEvent() { 128 std::string TestPostMessage::TestMessageEvent() {
116 // Set up the JavaScript onmessage handler to pass us some values from the 129 // Set up the JavaScript onmessage handler to pass us some values from the
117 // MessageEvent and make sure they match our expectations. 130 // MessageEvent and make sure they match our expectations.
118 131
119 // Have onmessage pass back the type of message_event and make sure it's 132 // Have onmessage pass back the type of message_event and make sure it's
120 // "object". 133 // "object".
121 ASSERT_TRUE(MakeOnMessageEcho("typeof(message_event)")); 134 ASSERT_TRUE(MakeOnMessageEcho("typeof(message_event)"));
122 message_data_.clear(); 135 message_data_.clear();
123 instance_->PostMessage(pp::Var(kTestInt)); 136 instance_->PostMessage(pp::Var(kTestInt));
137 ASSERT_EQ(message_data_.size(), 0);
138 testing_interface_->RunMessageLoop(instance_->pp_instance());
124 ASSERT_EQ(message_data_.size(), 1); 139 ASSERT_EQ(message_data_.size(), 1);
125 ASSERT_TRUE(message_data_.back().is_string()); 140 ASSERT_TRUE(message_data_.back().is_string());
126 ASSERT_EQ(message_data_.back().AsString(), "object"); 141 ASSERT_EQ(message_data_.back().AsString(), "object");
127 142
128 // Make sure all the non-data properties have the expected values. 143 // Make sure all the non-data properties have the expected values.
129 bool success = MakeOnMessageEcho("((message_event.origin == '')" 144 bool success = MakeOnMessageEcho("((message_event.origin == '')"
130 " && (message_event.lastEventId == '')" 145 " && (message_event.lastEventId == '')"
131 " && (message_event.source == null)" 146 " && (message_event.source == null)"
132 " && (message_event.ports == null)" 147 " && (message_event.ports == null)"
133 " && (message_event.bubbles == false)" 148 " && (message_event.bubbles == false)"
134 " && (message_event.cancelable == false)" 149 " && (message_event.cancelable == false)"
135 ")"); 150 ")");
136 ASSERT_TRUE(success); 151 ASSERT_TRUE(success);
137 message_data_.clear(); 152 message_data_.clear();
138 instance_->PostMessage(pp::Var(kTestInt)); 153 instance_->PostMessage(pp::Var(kTestInt));
139 // Note that the trusted in-process version is completely synchronous, so we 154 ASSERT_EQ(message_data_.size(), 0);
140 // do not need to use 'RunMessageLoop' to wait. 155 testing_interface_->RunMessageLoop(instance_->pp_instance());
141 ASSERT_EQ(message_data_.size(), 1); 156 ASSERT_EQ(message_data_.size(), 1);
142 ASSERT_TRUE(message_data_.back().is_bool()); 157 ASSERT_TRUE(message_data_.back().is_bool());
143 ASSERT_TRUE(message_data_.back().AsBool()); 158 ASSERT_TRUE(message_data_.back().AsBool());
144 159
145 PASS(); 160 PASS();
146 } 161 }
147 162
148 std::string TestPostMessage::TestNoHandler() { 163 std::string TestPostMessage::TestNoHandler() {
149 // Delete the onmessage handler (if it exists) 164 // Delete the onmessage handler (if it exists)
150 std::string js_code( 165 std::string js_code(
151 "if (document.getElementById('plugin').onmessage) {" 166 "if (document.getElementById('plugin').onmessage) {"
152 " delete document.getElementById('plugin').onmessage;" 167 " delete document.getElementById('plugin').onmessage;"
153 "}"); 168 "}");
154 pp::Var exception; 169 pp::Var exception;
155 instance_->ExecuteScript(js_code, &exception); 170 instance_->ExecuteScript(js_code, &exception);
156 ASSERT_TRUE(exception.is_undefined()); 171 ASSERT_TRUE(exception.is_undefined());
157 172
158 // Now send a message and make sure we don't get anything back (and that we 173 // Now send a message and make sure we don't get anything back (and that we
159 // don't crash). 174 // don't crash).
160 message_data_.clear(); 175 message_data_.clear();
161 instance_->PostMessage(pp::Var()); 176 instance_->PostMessage(pp::Var());
177 testing_interface_->RunMessageLoop(instance_->pp_instance());
162 ASSERT_EQ(message_data_.size(), 0); 178 ASSERT_EQ(message_data_.size(), 0);
163 179
164 PASS(); 180 PASS();
165 } 181 }
166 182
OLDNEW
« no previous file with comments | « chrome/test/ui/ppapi_uitest.cc ('k') | webkit/plugins/ppapi/message_channel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698