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

Side by Side Diff: components/html_viewer/html_frame_apptest.cc

Issue 1675083002: Rename ApplicationDelegate to ShellClient (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@delegate
Patch Set: . Created 4 years, 10 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 const char kAddFrameWithEmptyPageScript[] = 45 const char kAddFrameWithEmptyPageScript[] =
46 "var iframe = document.createElement(\"iframe\");" 46 "var iframe = document.createElement(\"iframe\");"
47 "iframe.src = \"http://127.0.0.1:%u/empty_page.html\";" 47 "iframe.src = \"http://127.0.0.1:%u/empty_page.html\";"
48 "document.body.appendChild(iframe);"; 48 "document.body.appendChild(iframe);";
49 49
50 void OnGotContentHandlerForRoot(bool* got_callback) { 50 void OnGotContentHandlerForRoot(bool* got_callback) {
51 *got_callback = true; 51 *got_callback = true;
52 ignore_result(WindowServerTestBase::QuitRunLoop()); 52 ignore_result(WindowServerTestBase::QuitRunLoop());
53 } 53 }
54 54
55 mojo::ApplicationConnection* ApplicationConnectionForFrame(Frame* frame) { 55 mojo::Connection* ConnectionForFrame(Frame* frame) {
56 return static_cast<FrameConnection*>(frame->user_data()) 56 return static_cast<FrameConnection*>(frame->user_data())->connection();
57 ->application_connection();
58 } 57 }
59 58
60 std::string GetFrameText(ApplicationConnection* connection) { 59 std::string GetFrameText(Connection* connection) {
61 html_viewer::TestHTMLViewerPtr test_html_viewer; 60 html_viewer::TestHTMLViewerPtr test_html_viewer;
62 connection->ConnectToService(&test_html_viewer); 61 connection->ConnectToService(&test_html_viewer);
63 std::string result; 62 std::string result;
64 test_html_viewer->GetContentAsText([&result](const String& mojo_string) { 63 test_html_viewer->GetContentAsText([&result](const String& mojo_string) {
65 result = mojo_string; 64 result = mojo_string;
66 ASSERT_TRUE(WindowServerTestBase::QuitRunLoop()); 65 ASSERT_TRUE(WindowServerTestBase::QuitRunLoop());
67 }); 66 });
68 if (!WindowServerTestBase::DoRunLoopWithTimeout()) 67 if (!WindowServerTestBase::DoRunLoopWithTimeout())
69 ADD_FAILURE() << "Timed out waiting for execute to complete"; 68 ADD_FAILURE() << "Timed out waiting for execute to complete";
70 // test_html_viewer.WaitForIncomingResponse(); 69 // test_html_viewer.WaitForIncomingResponse();
71 return result; 70 return result;
72 } 71 }
73 72
74 scoped_ptr<base::Value> ExecuteScript(ApplicationConnection* connection, 73 scoped_ptr<base::Value> ExecuteScript(Connection* connection,
75 const std::string& script) { 74 const std::string& script) {
76 html_viewer::TestHTMLViewerPtr test_html_viewer; 75 html_viewer::TestHTMLViewerPtr test_html_viewer;
77 connection->ConnectToService(&test_html_viewer); 76 connection->ConnectToService(&test_html_viewer);
78 scoped_ptr<base::Value> result; 77 scoped_ptr<base::Value> result;
79 test_html_viewer->ExecuteScript(script, [&result](const String& json_string) { 78 test_html_viewer->ExecuteScript(script, [&result](const String& json_string) {
80 result = base::JSONReader::Read(json_string.To<std::string>()); 79 result = base::JSONReader::Read(json_string.To<std::string>());
81 ASSERT_TRUE(WindowServerTestBase::QuitRunLoop()); 80 ASSERT_TRUE(WindowServerTestBase::QuitRunLoop());
82 }); 81 });
83 if (!WindowServerTestBase::DoRunLoopWithTimeout()) 82 if (!WindowServerTestBase::DoRunLoopWithTimeout())
84 ADD_FAILURE() << "Timed out waiting for execute to complete"; 83 ADD_FAILURE() << "Timed out waiting for execute to complete";
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 // script) a frame showing the same empty page. 174 // script) a frame showing the same empty page.
176 Frame* LoadEmptyPageAndCreateFrame() { 175 Frame* LoadEmptyPageAndCreateFrame() {
177 mus::Window* embed_window = window_manager()->NewWindow(); 176 mus::Window* embed_window = window_manager()->NewWindow();
178 frame_tree_delegate_.reset(new TestFrameTreeDelegateImpl(shell())); 177 frame_tree_delegate_.reset(new TestFrameTreeDelegateImpl(shell()));
179 FrameConnection* root_connection = InitFrameTree( 178 FrameConnection* root_connection = InitFrameTree(
180 embed_window, "http://127.0.0.1:%u/empty_page2.html"); 179 embed_window, "http://127.0.0.1:%u/empty_page2.html");
181 if (!root_connection) { 180 if (!root_connection) {
182 ADD_FAILURE() << "unable to establish root connection"; 181 ADD_FAILURE() << "unable to establish root connection";
183 return nullptr; 182 return nullptr;
184 } 183 }
185 const std::string frame_text = 184 const std::string frame_text = GetFrameText(root_connection->connection());
186 GetFrameText(root_connection->application_connection());
187 if (frame_text != "child2") { 185 if (frame_text != "child2") {
188 ADD_FAILURE() << "unexpected text " << frame_text; 186 ADD_FAILURE() << "unexpected text " << frame_text;
189 return nullptr; 187 return nullptr;
190 } 188 }
191 189
192 return CreateEmptyChildFrame(frame_tree_->root()); 190 return CreateEmptyChildFrame(frame_tree_->root());
193 } 191 }
194 192
195 Frame* CreateEmptyChildFrame(Frame* parent) { 193 Frame* CreateEmptyChildFrame(Frame* parent) {
196 const size_t initial_frame_count = parent->children().size(); 194 const size_t initial_frame_count = parent->children().size();
197 // Dynamically add a new frame. 195 // Dynamically add a new frame.
198 ExecuteScript(ApplicationConnectionForFrame(parent), 196 ExecuteScript(ConnectionForFrame(parent),
199 AddPortToString(kAddFrameWithEmptyPageScript)); 197 AddPortToString(kAddFrameWithEmptyPageScript));
200 198
201 frame_tree_delegate_->WaitForChildFrameCount(parent, 199 frame_tree_delegate_->WaitForChildFrameCount(parent,
202 initial_frame_count + 1); 200 initial_frame_count + 1);
203 if (HasFatalFailure()) 201 if (HasFatalFailure())
204 return nullptr; 202 return nullptr;
205 203
206 return parent->FindFrame(parent->window()->children().back()->id()); 204 return parent->FindFrame(parent->window()->children().back()->id());
207 } 205 }
208 206
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 #define MAYBE_PageWithSingleFrame PageWithSingleFrame 269 #define MAYBE_PageWithSingleFrame PageWithSingleFrame
272 #endif 270 #endif
273 TEST_F(HTMLFrameTest, MAYBE_PageWithSingleFrame) { 271 TEST_F(HTMLFrameTest, MAYBE_PageWithSingleFrame) {
274 mus::Window* embed_window = window_manager()->NewWindow(); 272 mus::Window* embed_window = window_manager()->NewWindow();
275 273
276 FrameConnection* root_connection = InitFrameTree( 274 FrameConnection* root_connection = InitFrameTree(
277 embed_window, "http://127.0.0.1:%u/page_with_single_frame.html"); 275 embed_window, "http://127.0.0.1:%u/page_with_single_frame.html");
278 ASSERT_TRUE(root_connection); 276 ASSERT_TRUE(root_connection);
279 277
280 ASSERT_EQ("Page with single frame", 278 ASSERT_EQ("Page with single frame",
281 GetFrameText(root_connection->application_connection())); 279 GetFrameText(root_connection->connection()));
282 280
283 ASSERT_NO_FATAL_FAILURE( 281 ASSERT_NO_FATAL_FAILURE(
284 frame_tree_delegate_->WaitForChildFrameCount(frame_tree_->root(), 1u)); 282 frame_tree_delegate_->WaitForChildFrameCount(frame_tree_->root(), 1u));
285 283
286 ASSERT_EQ(1u, embed_window->children().size()); 284 ASSERT_EQ(1u, embed_window->children().size());
287 Frame* child_frame = 285 Frame* child_frame =
288 frame_tree_->root()->FindFrame(embed_window->children()[0]->id()); 286 frame_tree_->root()->FindFrame(embed_window->children()[0]->id());
289 ASSERT_TRUE(child_frame); 287 ASSERT_TRUE(child_frame);
290 288
291 ASSERT_EQ("child", 289 ASSERT_EQ("child",
292 GetFrameText(static_cast<FrameConnection*>(child_frame->user_data()) 290 GetFrameText(static_cast<FrameConnection*>(child_frame->user_data())
293 ->application_connection())); 291 ->connection()));
294 } 292 }
295 293
296 // Creates two frames. The parent navigates the child frame by way of changing 294 // Creates two frames. The parent navigates the child frame by way of changing
297 // the location of the child frame. 295 // the location of the child frame.
298 // Crashes on linux_chromium_rel_ng only. http://crbug.com/567337 296 // Crashes on linux_chromium_rel_ng only. http://crbug.com/567337
299 #if defined(OS_LINUX) 297 #if defined(OS_LINUX)
300 #define MAYBE_ChangeLocationOfChildFrame DISABLED_ChangeLocationOfChildFrame 298 #define MAYBE_ChangeLocationOfChildFrame DISABLED_ChangeLocationOfChildFrame
301 #else 299 #else
302 #define MAYBE_ChangeLocationOfChildFrame ChangeLocationOfChildFrame 300 #define MAYBE_ChangeLocationOfChildFrame ChangeLocationOfChildFrame
303 #endif 301 #endif
304 TEST_F(HTMLFrameTest, MAYBE_ChangeLocationOfChildFrame) { 302 TEST_F(HTMLFrameTest, MAYBE_ChangeLocationOfChildFrame) {
305 mus::Window* embed_window = window_manager()->NewWindow(); 303 mus::Window* embed_window = window_manager()->NewWindow();
306 304
307 ASSERT_TRUE(InitFrameTree( 305 ASSERT_TRUE(InitFrameTree(
308 embed_window, "http://127.0.0.1:%u/page_with_single_frame.html")); 306 embed_window, "http://127.0.0.1:%u/page_with_single_frame.html"));
309 307
310 // page_with_single_frame contains a child frame. The child frame should 308 // page_with_single_frame contains a child frame. The child frame should
311 // create a new View and Frame. 309 // create a new View and Frame.
312 ASSERT_NO_FATAL_FAILURE( 310 ASSERT_NO_FATAL_FAILURE(
313 frame_tree_delegate_->WaitForChildFrameCount(frame_tree_->root(), 1u)); 311 frame_tree_delegate_->WaitForChildFrameCount(frame_tree_->root(), 1u));
314 312
315 Frame* child_frame = frame_tree_->root()->children().back(); 313 Frame* child_frame = frame_tree_->root()->children().back();
316 314
317 ASSERT_EQ("child", 315 ASSERT_EQ("child",
318 GetFrameText(static_cast<FrameConnection*>(child_frame->user_data()) 316 GetFrameText(static_cast<FrameConnection*>(child_frame->user_data())
319 ->application_connection())); 317 ->connection()));
320 318
321 // Change the location and wait for the navigation to occur. 319 // Change the location and wait for the navigation to occur.
322 const char kNavigateFrame[] = 320 const char kNavigateFrame[] =
323 "window.frames[0].location = " 321 "window.frames[0].location = "
324 "'http://127.0.0.1:%u/empty_page2.html'"; 322 "'http://127.0.0.1:%u/empty_page2.html'";
325 frame_tree_delegate_->ClearGotNavigate(child_frame); 323 frame_tree_delegate_->ClearGotNavigate(child_frame);
326 ExecuteScript(ApplicationConnectionForFrame(frame_tree_->root()), 324 ExecuteScript(ConnectionForFrame(frame_tree_->root()),
327 AddPortToString(kNavigateFrame)); 325 AddPortToString(kNavigateFrame));
328 ASSERT_TRUE(frame_tree_delegate_->WaitForFrameNavigation(child_frame)); 326 ASSERT_TRUE(frame_tree_delegate_->WaitForFrameNavigation(child_frame));
329 327
330 // There should still only be one frame. 328 // There should still only be one frame.
331 ASSERT_EQ(1u, frame_tree_->root()->children().size()); 329 ASSERT_EQ(1u, frame_tree_->root()->children().size());
332 330
333 // The navigation should have changed the text of the frame. 331 // The navigation should have changed the text of the frame.
334 ASSERT_TRUE(child_frame->user_data()); 332 ASSERT_TRUE(child_frame->user_data());
335 ASSERT_EQ("child2", 333 ASSERT_EQ("child2",
336 GetFrameText(static_cast<FrameConnection*>(child_frame->user_data()) 334 GetFrameText(static_cast<FrameConnection*>(child_frame->user_data())
337 ->application_connection())); 335 ->connection()));
338 } 336 }
339 337
340 TEST_F(HTMLFrameTest, DynamicallyAddFrameAndVerifyParent) { 338 TEST_F(HTMLFrameTest, DynamicallyAddFrameAndVerifyParent) {
341 Frame* child_frame = LoadEmptyPageAndCreateFrame(); 339 Frame* child_frame = LoadEmptyPageAndCreateFrame();
342 ASSERT_TRUE(child_frame); 340 ASSERT_TRUE(child_frame);
343 341
344 mojo::ApplicationConnection* child_frame_connection = 342 mojo::Connection* child_frame_connection = ConnectionForFrame(child_frame);
345 ApplicationConnectionForFrame(child_frame);
346 343
347 ASSERT_EQ("child", GetFrameText(child_frame_connection)); 344 ASSERT_EQ("child", GetFrameText(child_frame_connection));
348 // The child's parent should not be itself: 345 // The child's parent should not be itself:
349 const char kGetWindowParentNameScript[] = 346 const char kGetWindowParentNameScript[] =
350 "window.parent == window ? 'parent is self' : 'parent not self';"; 347 "window.parent == window ? 'parent is self' : 'parent not self';";
351 scoped_ptr<base::Value> parent_value( 348 scoped_ptr<base::Value> parent_value(
352 ExecuteScript(child_frame_connection, kGetWindowParentNameScript)); 349 ExecuteScript(child_frame_connection, kGetWindowParentNameScript));
353 ASSERT_TRUE(parent_value->IsType(base::Value::TYPE_LIST)); 350 ASSERT_TRUE(parent_value->IsType(base::Value::TYPE_LIST));
354 base::ListValue* parent_list; 351 base::ListValue* parent_list;
355 ASSERT_TRUE(parent_value->GetAsList(&parent_list)); 352 ASSERT_TRUE(parent_value->GetAsList(&parent_list));
356 ASSERT_EQ(1u, parent_list->GetSize()); 353 ASSERT_EQ(1u, parent_list->GetSize());
357 std::string parent_name; 354 std::string parent_name;
358 ASSERT_TRUE(parent_list->GetString(0u, &parent_name)); 355 ASSERT_TRUE(parent_list->GetString(0u, &parent_name));
359 EXPECT_EQ("parent not self", parent_name); 356 EXPECT_EQ("parent not self", parent_name);
360 } 357 }
361 358
362 TEST_F(HTMLFrameTest, DynamicallyAddFrameAndSeeNameChange) { 359 TEST_F(HTMLFrameTest, DynamicallyAddFrameAndSeeNameChange) {
363 Frame* child_frame = LoadEmptyPageAndCreateFrame(); 360 Frame* child_frame = LoadEmptyPageAndCreateFrame();
364 ASSERT_TRUE(child_frame); 361 ASSERT_TRUE(child_frame);
365 362
366 mojo::ApplicationConnection* child_frame_connection = 363 mojo::Connection* child_frame_connection = ConnectionForFrame(child_frame);
367 ApplicationConnectionForFrame(child_frame);
368 364
369 // Change the name of the child's window. 365 // Change the name of the child's window.
370 ExecuteScript(child_frame_connection, "window.name = 'new_child';"); 366 ExecuteScript(child_frame_connection, "window.name = 'new_child';");
371 367
372 // Eventually the parent should see the change. There is no convenient way 368 // Eventually the parent should see the change. There is no convenient way
373 // to observe this change, so we repeatedly ask for it and timeout if we 369 // to observe this change, so we repeatedly ask for it and timeout if we
374 // never get the right value. 370 // never get the right value.
375 const base::TimeTicks start_time(base::TimeTicks::Now()); 371 const base::TimeTicks start_time(base::TimeTicks::Now());
376 std::string find_window_result; 372 std::string find_window_result;
377 do { 373 do {
378 find_window_result.clear(); 374 find_window_result.clear();
379 scoped_ptr<base::Value> script_value( 375 scoped_ptr<base::Value> script_value(
380 ExecuteScript(ApplicationConnectionForFrame(frame_tree_->root()), 376 ExecuteScript(ConnectionForFrame(frame_tree_->root()),
381 "window.frames['new_child'] != null ? 'found frame' : " 377 "window.frames['new_child'] != null ? 'found frame' : "
382 "'unable to find frame';")); 378 "'unable to find frame';"));
383 if (script_value->IsType(base::Value::TYPE_LIST)) { 379 if (script_value->IsType(base::Value::TYPE_LIST)) {
384 base::ListValue* script_value_as_list; 380 base::ListValue* script_value_as_list;
385 if (script_value->GetAsList(&script_value_as_list) && 381 if (script_value->GetAsList(&script_value_as_list) &&
386 script_value_as_list->GetSize() == 1) { 382 script_value_as_list->GetSize() == 1) {
387 script_value_as_list->GetString(0u, &find_window_result); 383 script_value_as_list->GetString(0u, &find_window_result);
388 } 384 }
389 } 385 }
390 } while (find_window_result != "found frame" && 386 } while (find_window_result != "found frame" &&
(...skipping 16 matching lines...) Expand all
407 const char kGetChildChildFrameCount[] = 403 const char kGetChildChildFrameCount[] =
408 "if (window.frames.length > 0)" 404 "if (window.frames.length > 0)"
409 " window.frames[0].frames.length.toString();" 405 " window.frames[0].frames.length.toString();"
410 "else" 406 "else"
411 " '0';"; 407 " '0';";
412 const base::TimeTicks start_time(base::TimeTicks::Now()); 408 const base::TimeTicks start_time(base::TimeTicks::Now());
413 std::string child_child_frame_count; 409 std::string child_child_frame_count;
414 do { 410 do {
415 child_child_frame_count.clear(); 411 child_child_frame_count.clear();
416 scoped_ptr<base::Value> script_value( 412 scoped_ptr<base::Value> script_value(
417 ExecuteScript(ApplicationConnectionForFrame(frame_tree_->root()), 413 ExecuteScript(ConnectionForFrame(frame_tree_->root()),
418 kGetChildChildFrameCount)); 414 kGetChildChildFrameCount));
419 if (script_value->IsType(base::Value::TYPE_LIST)) { 415 if (script_value->IsType(base::Value::TYPE_LIST)) {
420 base::ListValue* script_value_as_list; 416 base::ListValue* script_value_as_list;
421 if (script_value->GetAsList(&script_value_as_list) && 417 if (script_value->GetAsList(&script_value_as_list) &&
422 script_value_as_list->GetSize() == 1) { 418 script_value_as_list->GetSize() == 1) {
423 script_value_as_list->GetString(0u, &child_child_frame_count); 419 script_value_as_list->GetString(0u, &child_child_frame_count);
424 } 420 }
425 } 421 }
426 } while (child_child_frame_count != "1" && 422 } while (child_child_frame_count != "1" &&
427 base::TimeTicks::Now() - start_time < 423 base::TimeTicks::Now() - start_time <
428 TestTimeouts::action_timeout()); 424 TestTimeouts::action_timeout());
429 EXPECT_EQ("1", child_child_frame_count); 425 EXPECT_EQ("1", child_child_frame_count);
430 426
431 // Remove the child's child and make sure the root doesn't see it anymore. 427 // Remove the child's child and make sure the root doesn't see it anymore.
432 const char kRemoveLastIFrame[] = 428 const char kRemoveLastIFrame[] =
433 "document.body.removeChild(document.body.lastChild);"; 429 "document.body.removeChild(document.body.lastChild);";
434 ExecuteScript(ApplicationConnectionForFrame(child_frame), kRemoveLastIFrame); 430 ExecuteScript(ConnectionForFrame(child_frame), kRemoveLastIFrame);
435 do { 431 do {
436 child_child_frame_count.clear(); 432 child_child_frame_count.clear();
437 scoped_ptr<base::Value> script_value( 433 scoped_ptr<base::Value> script_value(
438 ExecuteScript(ApplicationConnectionForFrame(frame_tree_->root()), 434 ExecuteScript(ConnectionForFrame(frame_tree_->root()),
439 kGetChildChildFrameCount)); 435 kGetChildChildFrameCount));
440 if (script_value->IsType(base::Value::TYPE_LIST)) { 436 if (script_value->IsType(base::Value::TYPE_LIST)) {
441 base::ListValue* script_value_as_list; 437 base::ListValue* script_value_as_list;
442 if (script_value->GetAsList(&script_value_as_list) && 438 if (script_value->GetAsList(&script_value_as_list) &&
443 script_value_as_list->GetSize() == 1) { 439 script_value_as_list->GetSize() == 1) {
444 script_value_as_list->GetString(0u, &child_child_frame_count); 440 script_value_as_list->GetString(0u, &child_child_frame_count);
445 } 441 }
446 } 442 }
447 } while (child_child_frame_count != "0" && 443 } while (child_child_frame_count != "0" &&
448 base::TimeTicks::Now() - start_time < 444 base::TimeTicks::Now() - start_time <
449 TestTimeouts::action_timeout()); 445 TestTimeouts::action_timeout());
450 ASSERT_EQ("0", child_child_frame_count); 446 ASSERT_EQ("0", child_child_frame_count);
451 } 447 }
452 448
453 // Verifies PostMessage() works across frames. 449 // Verifies PostMessage() works across frames.
454 TEST_F(HTMLFrameTest, PostMessage) { 450 TEST_F(HTMLFrameTest, PostMessage) {
455 Frame* child_frame = LoadEmptyPageAndCreateFrame(); 451 Frame* child_frame = LoadEmptyPageAndCreateFrame();
456 ASSERT_TRUE(child_frame); 452 ASSERT_TRUE(child_frame);
457 453
458 mojo::ApplicationConnection* child_frame_connection = 454 mojo::Connection* child_frame_connection = ConnectionForFrame(child_frame);
459 ApplicationConnectionForFrame(child_frame);
460 ASSERT_EQ("child", GetFrameText(child_frame_connection)); 455 ASSERT_EQ("child", GetFrameText(child_frame_connection));
461 456
462 // Register an event handler in the child frame. 457 // Register an event handler in the child frame.
463 const char kRegisterPostMessageHandler[] = 458 const char kRegisterPostMessageHandler[] =
464 "window.messageData = null;" 459 "window.messageData = null;"
465 "function messageFunction(event) {" 460 "function messageFunction(event) {"
466 " window.messageData = event.data;" 461 " window.messageData = event.data;"
467 "}" 462 "}"
468 "window.addEventListener('message', messageFunction, false);"; 463 "window.addEventListener('message', messageFunction, false);";
469 ExecuteScript(child_frame_connection, kRegisterPostMessageHandler); 464 ExecuteScript(child_frame_connection, kRegisterPostMessageHandler);
470 465
471 // Post a message from the parent to the child. 466 // Post a message from the parent to the child.
472 const char kPostMessageFromParent[] = 467 const char kPostMessageFromParent[] =
473 "window.frames[0].postMessage('hello from parent', '*');"; 468 "window.frames[0].postMessage('hello from parent', '*');";
474 ExecuteScript(ApplicationConnectionForFrame(frame_tree_->root()), 469 ExecuteScript(ConnectionForFrame(frame_tree_->root()),
475 kPostMessageFromParent); 470 kPostMessageFromParent);
476 471
477 // Wait for the child frame to see the message. 472 // Wait for the child frame to see the message.
478 const base::TimeTicks start_time(base::TimeTicks::Now()); 473 const base::TimeTicks start_time(base::TimeTicks::Now());
479 std::string message_in_child; 474 std::string message_in_child;
480 do { 475 do {
481 const char kGetMessageData[] = "window.messageData;"; 476 const char kGetMessageData[] = "window.messageData;";
482 scoped_ptr<base::Value> script_value( 477 scoped_ptr<base::Value> script_value(
483 ExecuteScript(child_frame_connection, kGetMessageData)); 478 ExecuteScript(child_frame_connection, kGetMessageData));
484 if (script_value->IsType(base::Value::TYPE_LIST)) { 479 if (script_value->IsType(base::Value::TYPE_LIST)) {
485 base::ListValue* script_value_as_list; 480 base::ListValue* script_value_as_list;
486 if (script_value->GetAsList(&script_value_as_list) && 481 if (script_value->GetAsList(&script_value_as_list) &&
487 script_value_as_list->GetSize() == 1) { 482 script_value_as_list->GetSize() == 1) {
488 script_value_as_list->GetString(0u, &message_in_child); 483 script_value_as_list->GetString(0u, &message_in_child);
489 } 484 }
490 } 485 }
491 } while (message_in_child != "hello from parent" && 486 } while (message_in_child != "hello from parent" &&
492 base::TimeTicks::Now() - start_time < 487 base::TimeTicks::Now() - start_time <
493 TestTimeouts::action_timeout()); 488 TestTimeouts::action_timeout());
494 EXPECT_EQ("hello from parent", message_in_child); 489 EXPECT_EQ("hello from parent", message_in_child);
495 } 490 }
496 491
497 } // namespace mojo 492 } // namespace mojo
OLDNEW
« no previous file with comments | « components/html_viewer/html_document_application_delegate.cc ('k') | components/html_viewer/html_viewer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698