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

Side by Side Diff: mojo/services/view_manager/public/cpp/tests/view_manager_unittest.cc

Issue 799113004: Update mojo sdk to rev 59145288bae55b0fce4276b017df6a1117bcf00f (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add mojo's ply to checklicenses whitelist Created 6 years 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "mojo/services/public/cpp/view_manager/view_manager.h" 5 #include "mojo/services/view_manager/public/cpp/view_manager.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "mojo/application_manager/application_manager.h" 10 #include "mojo/application_manager/application_manager.h"
11 #include "mojo/public/cpp/application/application_connection.h" 11 #include "mojo/public/cpp/application/application_connection.h"
12 #include "mojo/public/cpp/application/application_delegate.h" 12 #include "mojo/public/cpp/application/application_delegate.h"
13 #include "mojo/public/cpp/application/application_impl.h" 13 #include "mojo/public/cpp/application/application_impl.h"
14 #include "mojo/public/cpp/application/service_provider_impl.h" 14 #include "mojo/public/cpp/application/service_provider_impl.h"
15 #include "mojo/public/interfaces/application/service_provider.mojom.h" 15 #include "mojo/public/interfaces/application/service_provider.mojom.h"
16 #include "mojo/services/public/cpp/geometry/geometry_util.h" 16 #include "mojo/services/geometry/public/cpp/geometry_util.h"
17 #include "mojo/services/public/cpp/view_manager/lib/view_manager_client_impl.h" 17 #include "mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.h"
18 #include "mojo/services/public/cpp/view_manager/lib/view_private.h" 18 #include "mojo/services/view_manager/public/cpp/lib/view_private.h"
19 #include "mojo/services/public/cpp/view_manager/util.h" 19 #include "mojo/services/view_manager/public/cpp/util.h"
20 #include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h" 20 #include "mojo/services/view_manager/public/cpp/view_manager_client_factory.h"
21 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" 21 #include "mojo/services/view_manager/public/cpp/view_manager_delegate.h"
22 #include "mojo/services/public/cpp/view_manager/view_observer.h" 22 #include "mojo/services/view_manager/public/cpp/view_observer.h"
23 #include "shell/shell_test_helper.h" 23 #include "shell/shell_test_helper.h"
24 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
25 25
26 namespace mojo { 26 namespace mojo {
27 27
28 namespace { 28 namespace {
29 29
30 const char kWindowManagerURL[] = "mojo:window_manager"; 30 const char kWindowManagerURL[] = "mojo:window_manager";
31 const char kEmbeddedApp1URL[] = "mojo:embedded_app_1"; 31 const char kEmbeddedApp1URL[] = "mojo:embedded_app_1";
32 32
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 }; 342 };
343 343
344 // TODO(sky): all of these tests are disabled as each test triggers running 344 // TODO(sky): all of these tests are disabled as each test triggers running
345 // ViewsInit, which tries to register the same set of paths with the 345 // ViewsInit, which tries to register the same set of paths with the
346 // PathService, triggering a DCHECK. 346 // PathService, triggering a DCHECK.
347 TEST_F(ViewManagerTest, DISABLED_SetUp) {} 347 TEST_F(ViewManagerTest, DISABLED_SetUp) {}
348 348
349 TEST_F(ViewManagerTest, DISABLED_Embed) { 349 TEST_F(ViewManagerTest, DISABLED_Embed) {
350 View* view = View::Create(window_manager()); 350 View* view = View::Create(window_manager());
351 view->SetVisible(true); 351 view->SetVisible(true);
352 window_manager()->GetRoots().front()->AddChild(view); 352 window_manager()->GetRoot()->AddChild(view);
353 ViewManager* embedded = Embed(window_manager(), view); 353 ViewManager* embedded = Embed(window_manager(), view);
354 EXPECT_TRUE(NULL != embedded); 354 EXPECT_TRUE(NULL != embedded);
355 355
356 View* view_in_embedded = embedded->GetRoots().front(); 356 View* view_in_embedded = embedded->GetRoot();
357 EXPECT_EQ(view->parent(), window_manager()->GetRoots().front()); 357 EXPECT_EQ(view->parent(), window_manager()->GetRoot());
358 EXPECT_EQ(NULL, view_in_embedded->parent()); 358 EXPECT_EQ(NULL, view_in_embedded->parent());
359 } 359 }
360 360
361 // Window manager has two views, N1 and N11. Embeds A at N1. A should not see 361 // Window manager has two views, N1 and N11. Embeds A at N1. A should not see
362 // N11. 362 // N11.
363 // TODO(sky): Update client lib to match server. 363 // TODO(sky): Update client lib to match server.
364 TEST_F(ViewManagerTest, DISABLED_EmbeddedDoesntSeeChild) { 364 TEST_F(ViewManagerTest, DISABLED_EmbeddedDoesntSeeChild) {
365 View* view = View::Create(window_manager()); 365 View* view = View::Create(window_manager());
366 view->SetVisible(true); 366 view->SetVisible(true);
367 window_manager()->GetRoots().front()->AddChild(view); 367 window_manager()->GetRoot()->AddChild(view);
368 View* nested = View::Create(window_manager()); 368 View* nested = View::Create(window_manager());
369 nested->SetVisible(true); 369 nested->SetVisible(true);
370 view->AddChild(nested); 370 view->AddChild(nested);
371 371
372 ViewManager* embedded = Embed(window_manager(), view); 372 ViewManager* embedded = Embed(window_manager(), view);
373 EXPECT_EQ(embedded->GetRoots().front()->children().front()->id(), 373 EXPECT_EQ(embedded->GetRoot()->children().front()->id(),
374 nested->id()); 374 nested->id());
375 EXPECT_TRUE(embedded->GetRoots().front()->children().empty()); 375 EXPECT_TRUE(embedded->GetRoot()->children().empty());
376 EXPECT_TRUE(nested->parent() == NULL); 376 EXPECT_TRUE(nested->parent() == NULL);
377 } 377 }
378 378
379 // http://crbug.com/396300 379 // http://crbug.com/396300
380 TEST_F(ViewManagerTest, DISABLED_ViewManagerDestroyed_CleanupView) { 380 TEST_F(ViewManagerTest, DISABLED_ViewManagerDestroyed_CleanupView) {
381 View* view = View::Create(window_manager()); 381 View* view = View::Create(window_manager());
382 view->SetVisible(true); 382 view->SetVisible(true);
383 window_manager()->GetRoots().front()->AddChild(view); 383 window_manager()->GetRoot()->AddChild(view);
384 ViewManager* embedded = Embed(window_manager(), view); 384 ViewManager* embedded = Embed(window_manager(), view);
385 385
386 Id view_id = view->id(); 386 Id view_id = view->id();
387 387
388 UnloadApplication(GURL(kWindowManagerURL)); 388 UnloadApplication(GURL(kWindowManagerURL));
389 389
390 std::set<Id> views; 390 std::set<Id> views;
391 views.insert(view_id); 391 views.insert(view_id);
392 WaitForDestruction(embedded, &views); 392 WaitForDestruction(embedded, &views);
393 393
394 EXPECT_TRUE(embedded->GetRoots().empty()); 394 EXPECT_EQ(nullptr, embedded->GetRoot());
395 } 395 }
396 396
397 // TODO(beng): write a replacement test for the one that once existed here: 397 // TODO(beng): write a replacement test for the one that once existed here:
398 // This test validates the following scenario: 398 // This test validates the following scenario:
399 // - a view originating from one connection 399 // - a view originating from one connection
400 // - a view originating from a second connection 400 // - a view originating from a second connection
401 // + the connection originating the view is destroyed 401 // + the connection originating the view is destroyed
402 // -> the view should still exist (since the second connection is live) but 402 // -> the view should still exist (since the second connection is live) but
403 // should be disconnected from any views. 403 // should be disconnected from any views.
404 // http://crbug.com/396300 404 // http://crbug.com/396300
405 // 405 //
406 // TODO(beng): The new test should validate the scenario as described above 406 // TODO(beng): The new test should validate the scenario as described above
407 // except that the second connection still has a valid tree. 407 // except that the second connection still has a valid tree.
408 408
409 // Verifies that bounds changes applied to a view hierarchy in one connection 409 // Verifies that bounds changes applied to a view hierarchy in one connection
410 // are reflected to another. 410 // are reflected to another.
411 TEST_F(ViewManagerTest, DISABLED_SetBounds) { 411 TEST_F(ViewManagerTest, DISABLED_SetBounds) {
412 View* view = View::Create(window_manager()); 412 View* view = View::Create(window_manager());
413 view->SetVisible(true); 413 view->SetVisible(true);
414 window_manager()->GetRoots().front()->AddChild(view); 414 window_manager()->GetRoot()->AddChild(view);
415 ViewManager* embedded = Embed(window_manager(), view); 415 ViewManager* embedded = Embed(window_manager(), view);
416 416
417 View* view_in_embedded = embedded->GetViewById(view->id()); 417 View* view_in_embedded = embedded->GetViewById(view->id());
418 EXPECT_EQ(view->bounds(), view_in_embedded->bounds()); 418 EXPECT_EQ(view->bounds(), view_in_embedded->bounds());
419 419
420 Rect rect; 420 Rect rect;
421 rect.width = rect.height = 100; 421 rect.width = rect.height = 100;
422 view->SetBounds(rect); 422 view->SetBounds(rect);
423 EXPECT_NE(view->bounds(), view_in_embedded->bounds()); 423 EXPECT_NE(view->bounds(), view_in_embedded->bounds());
424 WaitForBoundsToChange(view_in_embedded); 424 WaitForBoundsToChange(view_in_embedded);
425 EXPECT_EQ(view->bounds(), view_in_embedded->bounds()); 425 EXPECT_EQ(view->bounds(), view_in_embedded->bounds());
426 } 426 }
427 427
428 // Verifies that bounds changes applied to a view owned by a different 428 // Verifies that bounds changes applied to a view owned by a different
429 // connection are refused. 429 // connection are refused.
430 TEST_F(ViewManagerTest, DISABLED_SetBoundsSecurity) { 430 TEST_F(ViewManagerTest, DISABLED_SetBoundsSecurity) {
431 View* view = View::Create(window_manager()); 431 View* view = View::Create(window_manager());
432 view->SetVisible(true); 432 view->SetVisible(true);
433 window_manager()->GetRoots().front()->AddChild(view); 433 window_manager()->GetRoot()->AddChild(view);
434 ViewManager* embedded = Embed(window_manager(), view); 434 ViewManager* embedded = Embed(window_manager(), view);
435 435
436 View* view_in_embedded = embedded->GetViewById(view->id()); 436 View* view_in_embedded = embedded->GetViewById(view->id());
437 Rect rect; 437 Rect rect;
438 rect.width = 800; 438 rect.width = 800;
439 rect.height = 600; 439 rect.height = 600;
440 view->SetBounds(rect); 440 view->SetBounds(rect);
441 WaitForBoundsToChange(view_in_embedded); 441 WaitForBoundsToChange(view_in_embedded);
442 442
443 rect.width = 1024; 443 rect.width = 1024;
444 rect.height = 768; 444 rect.height = 768;
445 view_in_embedded->SetBounds(rect); 445 view_in_embedded->SetBounds(rect);
446 // Bounds change should have been rejected. 446 // Bounds change should have been rejected.
447 EXPECT_EQ(view->bounds(), view_in_embedded->bounds()); 447 EXPECT_EQ(view->bounds(), view_in_embedded->bounds());
448 } 448 }
449 449
450 // Verifies that a view can only be destroyed by the connection that created it. 450 // Verifies that a view can only be destroyed by the connection that created it.
451 TEST_F(ViewManagerTest, DISABLED_DestroySecurity) { 451 TEST_F(ViewManagerTest, DISABLED_DestroySecurity) {
452 View* view = View::Create(window_manager()); 452 View* view = View::Create(window_manager());
453 view->SetVisible(true); 453 view->SetVisible(true);
454 window_manager()->GetRoots().front()->AddChild(view); 454 window_manager()->GetRoot()->AddChild(view);
455 ViewManager* embedded = Embed(window_manager(), view); 455 ViewManager* embedded = Embed(window_manager(), view);
456 456
457 View* view_in_embedded = embedded->GetViewById(view->id()); 457 View* view_in_embedded = embedded->GetViewById(view->id());
458 458
459 ViewTracker tracker2(view_in_embedded); 459 ViewTracker tracker2(view_in_embedded);
460 view_in_embedded->Destroy(); 460 view_in_embedded->Destroy();
461 // View should not have been destroyed. 461 // View should not have been destroyed.
462 EXPECT_TRUE(tracker2.is_valid()); 462 EXPECT_TRUE(tracker2.is_valid());
463 463
464 ViewTracker tracker1(view); 464 ViewTracker tracker1(view);
465 view->Destroy(); 465 view->Destroy();
466 EXPECT_FALSE(tracker1.is_valid()); 466 EXPECT_FALSE(tracker1.is_valid());
467 } 467 }
468 468
469 TEST_F(ViewManagerTest, DISABLED_MultiRoots) { 469 TEST_F(ViewManagerTest, DISABLED_MultiRoots) {
470 View* view1 = View::Create(window_manager()); 470 View* view1 = View::Create(window_manager());
471 view1->SetVisible(true); 471 view1->SetVisible(true);
472 window_manager()->GetRoots().front()->AddChild(view1); 472 window_manager()->GetRoot()->AddChild(view1);
473 View* view2 = View::Create(window_manager()); 473 View* view2 = View::Create(window_manager());
474 view2->SetVisible(true); 474 view2->SetVisible(true);
475 window_manager()->GetRoots().front()->AddChild(view2); 475 window_manager()->GetRoot()->AddChild(view2);
476 ViewManager* embedded1 = Embed(window_manager(), view1); 476 ViewManager* embedded1 = Embed(window_manager(), view1);
477 ViewManager* embedded2 = Embed(window_manager(), view2); 477 ViewManager* embedded2 = Embed(window_manager(), view2);
478 EXPECT_EQ(embedded1, embedded2); 478 EXPECT_EQ(embedded1, embedded2);
479 } 479 }
480 480
481 TEST_F(ViewManagerTest, DISABLED_EmbeddingIdentity) { 481 TEST_F(ViewManagerTest, DISABLED_EmbeddingIdentity) {
482 View* view = View::Create(window_manager()); 482 View* view = View::Create(window_manager());
483 view->SetVisible(true); 483 view->SetVisible(true);
484 window_manager()->GetRoots().front()->AddChild(view); 484 window_manager()->GetRoot()->AddChild(view);
485 ViewManager* embedded = Embed(window_manager(), view); 485 ViewManager* embedded = Embed(window_manager(), view);
486 EXPECT_EQ(kWindowManagerURL, embedded->GetEmbedderURL()); 486 EXPECT_EQ(kWindowManagerURL, embedded->GetEmbedderURL());
487 } 487 }
488 488
489 TEST_F(ViewManagerTest, DISABLED_Reorder) { 489 TEST_F(ViewManagerTest, DISABLED_Reorder) {
490 View* view1 = View::Create(window_manager()); 490 View* view1 = View::Create(window_manager());
491 view1->SetVisible(true); 491 view1->SetVisible(true);
492 window_manager()->GetRoots().front()->AddChild(view1); 492 window_manager()->GetRoot()->AddChild(view1);
493 493
494 ViewManager* embedded = Embed(window_manager(), view1); 494 ViewManager* embedded = Embed(window_manager(), view1);
495 495
496 View* view11 = View::Create(embedded); 496 View* view11 = View::Create(embedded);
497 view11->SetVisible(true); 497 view11->SetVisible(true);
498 embedded->GetRoots().front()->AddChild(view11); 498 embedded->GetRoot()->AddChild(view11);
499 View* view12 = View::Create(embedded); 499 View* view12 = View::Create(embedded);
500 view12->SetVisible(true); 500 view12->SetVisible(true);
501 embedded->GetRoots().front()->AddChild(view12); 501 embedded->GetRoot()->AddChild(view12);
502 502
503 View* view1_in_wm = window_manager()->GetViewById(view1->id()); 503 View* view1_in_wm = window_manager()->GetViewById(view1->id());
504 504
505 { 505 {
506 WaitForTreeSizeToMatch(view1, 2u); 506 WaitForTreeSizeToMatch(view1, 2u);
507 view11->MoveToFront(); 507 view11->MoveToFront();
508 WaitForOrderChange(window_manager(), 508 WaitForOrderChange(window_manager(),
509 window_manager()->GetViewById(view11->id())); 509 window_manager()->GetViewById(view11->id()));
510 510
511 EXPECT_EQ(view1_in_wm->children().front(), 511 EXPECT_EQ(view1_in_wm->children().front(),
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 View* view_; 545 View* view_;
546 546
547 DISALLOW_COPY_AND_ASSIGN(VisibilityChangeObserver); 547 DISALLOW_COPY_AND_ASSIGN(VisibilityChangeObserver);
548 }; 548 };
549 549
550 } // namespace 550 } // namespace
551 551
552 TEST_F(ViewManagerTest, DISABLED_Visible) { 552 TEST_F(ViewManagerTest, DISABLED_Visible) {
553 View* view1 = View::Create(window_manager()); 553 View* view1 = View::Create(window_manager());
554 view1->SetVisible(true); 554 view1->SetVisible(true);
555 window_manager()->GetRoots().front()->AddChild(view1); 555 window_manager()->GetRoot()->AddChild(view1);
556 556
557 // Embed another app and verify initial state. 557 // Embed another app and verify initial state.
558 ViewManager* embedded = Embed(window_manager(), view1); 558 ViewManager* embedded = Embed(window_manager(), view1);
559 ASSERT_EQ(1u, embedded->GetRoots().size()); 559 ASSERT_NE(nullptr, embedded->GetRoot());
560 View* embedded_root = embedded->GetRoots().front(); 560 View* embedded_root = embedded->GetRoot();
561 EXPECT_TRUE(embedded_root->visible()); 561 EXPECT_TRUE(embedded_root->visible());
562 EXPECT_TRUE(embedded_root->IsDrawn()); 562 EXPECT_TRUE(embedded_root->IsDrawn());
563 563
564 // Change the visible state from the first connection and verify its mirrored 564 // Change the visible state from the first connection and verify its mirrored
565 // correctly to the embedded app. 565 // correctly to the embedded app.
566 { 566 {
567 VisibilityChangeObserver observer(embedded_root); 567 VisibilityChangeObserver observer(embedded_root);
568 view1->SetVisible(false); 568 view1->SetVisible(false);
569 DoRunLoop(); 569 DoRunLoop();
570 } 570 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 View* view_; 608 View* view_;
609 609
610 DISALLOW_COPY_AND_ASSIGN(DrawnChangeObserver); 610 DISALLOW_COPY_AND_ASSIGN(DrawnChangeObserver);
611 }; 611 };
612 612
613 } // namespace 613 } // namespace
614 614
615 TEST_F(ViewManagerTest, DISABLED_Drawn) { 615 TEST_F(ViewManagerTest, DISABLED_Drawn) {
616 View* view1 = View::Create(window_manager()); 616 View* view1 = View::Create(window_manager());
617 view1->SetVisible(true); 617 view1->SetVisible(true);
618 window_manager()->GetRoots().front()->AddChild(view1); 618 window_manager()->GetRoot()->AddChild(view1);
619 619
620 // Embed another app and verify initial state. 620 // Embed another app and verify initial state.
621 ViewManager* embedded = Embed(window_manager(), view1); 621 ViewManager* embedded = Embed(window_manager(), view1);
622 ASSERT_EQ(1u, embedded->GetRoots().size()); 622 ASSERT_NE(nullptr, embedded->GetRoot());
623 View* embedded_root = embedded->GetRoots().front(); 623 View* embedded_root = embedded->GetRoot();
624 EXPECT_TRUE(embedded_root->visible()); 624 EXPECT_TRUE(embedded_root->visible());
625 EXPECT_TRUE(embedded_root->IsDrawn()); 625 EXPECT_TRUE(embedded_root->IsDrawn());
626 626
627 // Change the visibility of the root, this should propagate a drawn state 627 // Change the visibility of the root, this should propagate a drawn state
628 // change to |embedded|. 628 // change to |embedded|.
629 { 629 {
630 DrawnChangeObserver observer(embedded_root); 630 DrawnChangeObserver observer(embedded_root);
631 window_manager()->GetRoots().front()->SetVisible(false); 631 window_manager()->GetRoot()->SetVisible(false);
632 DoRunLoop(); 632 DoRunLoop();
633 } 633 }
634 634
635 EXPECT_TRUE(view1->visible()); 635 EXPECT_TRUE(view1->visible());
636 EXPECT_FALSE(view1->IsDrawn()); 636 EXPECT_FALSE(view1->IsDrawn());
637 637
638 EXPECT_TRUE(embedded_root->visible()); 638 EXPECT_TRUE(embedded_root->visible());
639 EXPECT_FALSE(embedded_root->IsDrawn()); 639 EXPECT_FALSE(embedded_root->IsDrawn());
640 } 640 }
641 641
642 // TODO(beng): tests for view event dispatcher. 642 // TODO(beng): tests for view event dispatcher.
643 // - verify that we see events for all views. 643 // - verify that we see events for all views.
644 644
645 // TODO(beng): tests for focus: 645 // TODO(beng): tests for focus:
646 // - focus between two views known to a connection 646 // - focus between two views known to a connection
647 // - focus between views unknown to one of the connections. 647 // - focus between views unknown to one of the connections.
648 // - focus between views unknown to either connection. 648 // - focus between views unknown to either connection.
649 649
650 // TODO(sky): need test of root being destroyed with existing views. See 650 // TODO(sky): need test of root being destroyed with existing views. See
651 // 434555 for specific case. 651 // 434555 for specific case.
652 652
653 } // namespace mojo 653 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/services/view_manager/public/cpp/tests/DEPS ('k') | mojo/services/view_manager/public/cpp/tests/view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698