OLD | NEW |
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/public/cpp/view_manager/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" |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 loaded_view_manager_(NULL), | 270 loaded_view_manager_(NULL), |
271 window_manager_(NULL), | 271 window_manager_(NULL), |
272 commit_count_(0) {} | 272 commit_count_(0) {} |
273 | 273 |
274 protected: | 274 protected: |
275 ViewManager* window_manager() { return window_manager_; } | 275 ViewManager* window_manager() { return window_manager_; } |
276 | 276 |
277 View* CreateViewInParent(View* parent) { | 277 View* CreateViewInParent(View* parent) { |
278 ViewManager* parent_manager = ViewPrivate(parent).view_manager(); | 278 ViewManager* parent_manager = ViewPrivate(parent).view_manager(); |
279 View* view = View::Create(parent_manager); | 279 View* view = View::Create(parent_manager); |
| 280 view->SetVisible(true); |
280 parent->AddChild(view); | 281 parent->AddChild(view); |
281 return view; | 282 return view; |
282 } | 283 } |
283 | 284 |
284 // Embeds another version of the test app @ view. | 285 // Embeds another version of the test app @ view. |
285 ViewManager* Embed(ViewManager* view_manager, View* view) { | 286 ViewManager* Embed(ViewManager* view_manager, View* view) { |
286 DCHECK_EQ(view_manager, ViewPrivate(view).view_manager()); | 287 DCHECK_EQ(view_manager, ViewPrivate(view).view_manager()); |
287 view->Embed(kEmbeddedApp1URL); | 288 view->Embed(kEmbeddedApp1URL); |
288 RunRunLoop(); | 289 RunRunLoop(); |
289 return GetLoadedViewManager(); | 290 return GetLoadedViewManager(); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 DISALLOW_COPY_AND_ASSIGN(ViewManagerTest); | 342 DISALLOW_COPY_AND_ASSIGN(ViewManagerTest); |
342 }; | 343 }; |
343 | 344 |
344 // TODO(sky): all of these tests are disabled as each test triggers running | 345 // 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 | 346 // ViewsInit, which tries to register the same set of paths with the |
346 // PathService, triggering a DCHECK. | 347 // PathService, triggering a DCHECK. |
347 TEST_F(ViewManagerTest, DISABLED_SetUp) {} | 348 TEST_F(ViewManagerTest, DISABLED_SetUp) {} |
348 | 349 |
349 TEST_F(ViewManagerTest, DISABLED_Embed) { | 350 TEST_F(ViewManagerTest, DISABLED_Embed) { |
350 View* view = View::Create(window_manager()); | 351 View* view = View::Create(window_manager()); |
| 352 view->SetVisible(true); |
351 window_manager()->GetRoots().front()->AddChild(view); | 353 window_manager()->GetRoots().front()->AddChild(view); |
352 ViewManager* embedded = Embed(window_manager(), view); | 354 ViewManager* embedded = Embed(window_manager(), view); |
353 EXPECT_TRUE(NULL != embedded); | 355 EXPECT_TRUE(NULL != embedded); |
354 | 356 |
355 View* view_in_embedded = embedded->GetRoots().front(); | 357 View* view_in_embedded = embedded->GetRoots().front(); |
356 EXPECT_EQ(view->parent(), window_manager()->GetRoots().front()); | 358 EXPECT_EQ(view->parent(), window_manager()->GetRoots().front()); |
357 EXPECT_EQ(NULL, view_in_embedded->parent()); | 359 EXPECT_EQ(NULL, view_in_embedded->parent()); |
358 } | 360 } |
359 | 361 |
360 // Window manager has two views, N1 and N11. Embeds A at N1. A should not see | 362 // Window manager has two views, N1 and N11. Embeds A at N1. A should not see |
361 // N11. | 363 // N11. |
362 // TODO(sky): Update client lib to match server. | 364 // TODO(sky): Update client lib to match server. |
363 TEST_F(ViewManagerTest, DISABLED_EmbeddedDoesntSeeChild) { | 365 TEST_F(ViewManagerTest, DISABLED_EmbeddedDoesntSeeChild) { |
364 View* view = View::Create(window_manager()); | 366 View* view = View::Create(window_manager()); |
| 367 view->SetVisible(true); |
365 window_manager()->GetRoots().front()->AddChild(view); | 368 window_manager()->GetRoots().front()->AddChild(view); |
366 View* nested = View::Create(window_manager()); | 369 View* nested = View::Create(window_manager()); |
| 370 nested->SetVisible(true); |
367 view->AddChild(nested); | 371 view->AddChild(nested); |
368 | 372 |
369 ViewManager* embedded = Embed(window_manager(), view); | 373 ViewManager* embedded = Embed(window_manager(), view); |
370 EXPECT_EQ(embedded->GetRoots().front()->children().front()->id(), | 374 EXPECT_EQ(embedded->GetRoots().front()->children().front()->id(), |
371 nested->id()); | 375 nested->id()); |
372 EXPECT_TRUE(embedded->GetRoots().front()->children().empty()); | 376 EXPECT_TRUE(embedded->GetRoots().front()->children().empty()); |
373 EXPECT_TRUE(nested->parent() == NULL); | 377 EXPECT_TRUE(nested->parent() == NULL); |
374 } | 378 } |
375 | 379 |
376 // http://crbug.com/396300 | 380 // http://crbug.com/396300 |
377 TEST_F(ViewManagerTest, DISABLED_ViewManagerDestroyed_CleanupView) { | 381 TEST_F(ViewManagerTest, DISABLED_ViewManagerDestroyed_CleanupView) { |
378 View* view = View::Create(window_manager()); | 382 View* view = View::Create(window_manager()); |
| 383 view->SetVisible(true); |
379 window_manager()->GetRoots().front()->AddChild(view); | 384 window_manager()->GetRoots().front()->AddChild(view); |
380 ViewManager* embedded = Embed(window_manager(), view); | 385 ViewManager* embedded = Embed(window_manager(), view); |
381 | 386 |
382 Id view_id = view->id(); | 387 Id view_id = view->id(); |
383 | 388 |
384 UnloadApplication(GURL(kWindowManagerURL)); | 389 UnloadApplication(GURL(kWindowManagerURL)); |
385 | 390 |
386 std::set<Id> views; | 391 std::set<Id> views; |
387 views.insert(view_id); | 392 views.insert(view_id); |
388 WaitForDestruction(embedded, &views); | 393 WaitForDestruction(embedded, &views); |
(...skipping 10 matching lines...) Expand all Loading... |
399 // should be disconnected from any views. | 404 // should be disconnected from any views. |
400 // http://crbug.com/396300 | 405 // http://crbug.com/396300 |
401 // | 406 // |
402 // TODO(beng): The new test should validate the scenario as described above | 407 // TODO(beng): The new test should validate the scenario as described above |
403 // except that the second connection still has a valid tree. | 408 // except that the second connection still has a valid tree. |
404 | 409 |
405 // Verifies that bounds changes applied to a view hierarchy in one connection | 410 // Verifies that bounds changes applied to a view hierarchy in one connection |
406 // are reflected to another. | 411 // are reflected to another. |
407 TEST_F(ViewManagerTest, DISABLED_SetBounds) { | 412 TEST_F(ViewManagerTest, DISABLED_SetBounds) { |
408 View* view = View::Create(window_manager()); | 413 View* view = View::Create(window_manager()); |
| 414 view->SetVisible(true); |
409 window_manager()->GetRoots().front()->AddChild(view); | 415 window_manager()->GetRoots().front()->AddChild(view); |
410 ViewManager* embedded = Embed(window_manager(), view); | 416 ViewManager* embedded = Embed(window_manager(), view); |
411 | 417 |
412 View* view_in_embedded = embedded->GetViewById(view->id()); | 418 View* view_in_embedded = embedded->GetViewById(view->id()); |
413 EXPECT_EQ(view->bounds(), view_in_embedded->bounds()); | 419 EXPECT_EQ(view->bounds(), view_in_embedded->bounds()); |
414 | 420 |
415 Rect rect; | 421 Rect rect; |
416 rect.width = rect.height = 100; | 422 rect.width = rect.height = 100; |
417 view->SetBounds(rect); | 423 view->SetBounds(rect); |
418 EXPECT_NE(view->bounds(), view_in_embedded->bounds()); | 424 EXPECT_NE(view->bounds(), view_in_embedded->bounds()); |
419 WaitForBoundsToChange(view_in_embedded); | 425 WaitForBoundsToChange(view_in_embedded); |
420 EXPECT_EQ(view->bounds(), view_in_embedded->bounds()); | 426 EXPECT_EQ(view->bounds(), view_in_embedded->bounds()); |
421 } | 427 } |
422 | 428 |
423 // Verifies that bounds changes applied to a view owned by a different | 429 // Verifies that bounds changes applied to a view owned by a different |
424 // connection are refused. | 430 // connection are refused. |
425 TEST_F(ViewManagerTest, DISABLED_SetBoundsSecurity) { | 431 TEST_F(ViewManagerTest, DISABLED_SetBoundsSecurity) { |
426 View* view = View::Create(window_manager()); | 432 View* view = View::Create(window_manager()); |
| 433 view->SetVisible(true); |
427 window_manager()->GetRoots().front()->AddChild(view); | 434 window_manager()->GetRoots().front()->AddChild(view); |
428 ViewManager* embedded = Embed(window_manager(), view); | 435 ViewManager* embedded = Embed(window_manager(), view); |
429 | 436 |
430 View* view_in_embedded = embedded->GetViewById(view->id()); | 437 View* view_in_embedded = embedded->GetViewById(view->id()); |
431 Rect rect; | 438 Rect rect; |
432 rect.width = 800; | 439 rect.width = 800; |
433 rect.height = 600; | 440 rect.height = 600; |
434 view->SetBounds(rect); | 441 view->SetBounds(rect); |
435 WaitForBoundsToChange(view_in_embedded); | 442 WaitForBoundsToChange(view_in_embedded); |
436 | 443 |
437 rect.width = 1024; | 444 rect.width = 1024; |
438 rect.height = 768; | 445 rect.height = 768; |
439 view_in_embedded->SetBounds(rect); | 446 view_in_embedded->SetBounds(rect); |
440 // Bounds change should have been rejected. | 447 // Bounds change should have been rejected. |
441 EXPECT_EQ(view->bounds(), view_in_embedded->bounds()); | 448 EXPECT_EQ(view->bounds(), view_in_embedded->bounds()); |
442 } | 449 } |
443 | 450 |
444 // Verifies that a view can only be destroyed by the connection that created it. | 451 // Verifies that a view can only be destroyed by the connection that created it. |
445 TEST_F(ViewManagerTest, DISABLED_DestroySecurity) { | 452 TEST_F(ViewManagerTest, DISABLED_DestroySecurity) { |
446 View* view = View::Create(window_manager()); | 453 View* view = View::Create(window_manager()); |
| 454 view->SetVisible(true); |
447 window_manager()->GetRoots().front()->AddChild(view); | 455 window_manager()->GetRoots().front()->AddChild(view); |
448 ViewManager* embedded = Embed(window_manager(), view); | 456 ViewManager* embedded = Embed(window_manager(), view); |
449 | 457 |
450 View* view_in_embedded = embedded->GetViewById(view->id()); | 458 View* view_in_embedded = embedded->GetViewById(view->id()); |
451 | 459 |
452 ViewTracker tracker2(view_in_embedded); | 460 ViewTracker tracker2(view_in_embedded); |
453 view_in_embedded->Destroy(); | 461 view_in_embedded->Destroy(); |
454 // View should not have been destroyed. | 462 // View should not have been destroyed. |
455 EXPECT_TRUE(tracker2.is_valid()); | 463 EXPECT_TRUE(tracker2.is_valid()); |
456 | 464 |
457 ViewTracker tracker1(view); | 465 ViewTracker tracker1(view); |
458 view->Destroy(); | 466 view->Destroy(); |
459 EXPECT_FALSE(tracker1.is_valid()); | 467 EXPECT_FALSE(tracker1.is_valid()); |
460 } | 468 } |
461 | 469 |
462 TEST_F(ViewManagerTest, DISABLED_MultiRoots) { | 470 TEST_F(ViewManagerTest, DISABLED_MultiRoots) { |
463 View* view1 = View::Create(window_manager()); | 471 View* view1 = View::Create(window_manager()); |
| 472 view1->SetVisible(true); |
464 window_manager()->GetRoots().front()->AddChild(view1); | 473 window_manager()->GetRoots().front()->AddChild(view1); |
465 View* view2 = View::Create(window_manager()); | 474 View* view2 = View::Create(window_manager()); |
| 475 view2->SetVisible(true); |
466 window_manager()->GetRoots().front()->AddChild(view2); | 476 window_manager()->GetRoots().front()->AddChild(view2); |
467 ViewManager* embedded1 = Embed(window_manager(), view1); | 477 ViewManager* embedded1 = Embed(window_manager(), view1); |
468 ViewManager* embedded2 = Embed(window_manager(), view2); | 478 ViewManager* embedded2 = Embed(window_manager(), view2); |
469 EXPECT_EQ(embedded1, embedded2); | 479 EXPECT_EQ(embedded1, embedded2); |
470 } | 480 } |
471 | 481 |
472 TEST_F(ViewManagerTest, DISABLED_EmbeddingIdentity) { | 482 TEST_F(ViewManagerTest, DISABLED_EmbeddingIdentity) { |
473 View* view = View::Create(window_manager()); | 483 View* view = View::Create(window_manager()); |
| 484 view->SetVisible(true); |
474 window_manager()->GetRoots().front()->AddChild(view); | 485 window_manager()->GetRoots().front()->AddChild(view); |
475 ViewManager* embedded = Embed(window_manager(), view); | 486 ViewManager* embedded = Embed(window_manager(), view); |
476 EXPECT_EQ(kWindowManagerURL, embedded->GetEmbedderURL()); | 487 EXPECT_EQ(kWindowManagerURL, embedded->GetEmbedderURL()); |
477 } | 488 } |
478 | 489 |
479 TEST_F(ViewManagerTest, DISABLED_Reorder) { | 490 TEST_F(ViewManagerTest, DISABLED_Reorder) { |
480 View* view1 = View::Create(window_manager()); | 491 View* view1 = View::Create(window_manager()); |
| 492 view1->SetVisible(true); |
481 window_manager()->GetRoots().front()->AddChild(view1); | 493 window_manager()->GetRoots().front()->AddChild(view1); |
482 | 494 |
483 ViewManager* embedded = Embed(window_manager(), view1); | 495 ViewManager* embedded = Embed(window_manager(), view1); |
484 | 496 |
485 View* view11 = View::Create(embedded); | 497 View* view11 = View::Create(embedded); |
| 498 view11->SetVisible(true); |
486 embedded->GetRoots().front()->AddChild(view11); | 499 embedded->GetRoots().front()->AddChild(view11); |
487 View* view12 = View::Create(embedded); | 500 View* view12 = View::Create(embedded); |
| 501 view12->SetVisible(true); |
488 embedded->GetRoots().front()->AddChild(view12); | 502 embedded->GetRoots().front()->AddChild(view12); |
489 | 503 |
490 View* view1_in_wm = window_manager()->GetViewById(view1->id()); | 504 View* view1_in_wm = window_manager()->GetViewById(view1->id()); |
491 | 505 |
492 { | 506 { |
493 WaitForTreeSizeToMatch(view1, 2u); | 507 WaitForTreeSizeToMatch(view1, 2u); |
494 view11->MoveToFront(); | 508 view11->MoveToFront(); |
495 WaitForOrderChange(window_manager(), | 509 WaitForOrderChange(window_manager(), |
496 window_manager()->GetViewById(view11->id())); | 510 window_manager()->GetViewById(view11->id())); |
497 | 511 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
531 | 545 |
532 View* view_; | 546 View* view_; |
533 | 547 |
534 DISALLOW_COPY_AND_ASSIGN(VisibilityChangeObserver); | 548 DISALLOW_COPY_AND_ASSIGN(VisibilityChangeObserver); |
535 }; | 549 }; |
536 | 550 |
537 } // namespace | 551 } // namespace |
538 | 552 |
539 TEST_F(ViewManagerTest, DISABLED_Visible) { | 553 TEST_F(ViewManagerTest, DISABLED_Visible) { |
540 View* view1 = View::Create(window_manager()); | 554 View* view1 = View::Create(window_manager()); |
| 555 view1->SetVisible(true); |
541 window_manager()->GetRoots().front()->AddChild(view1); | 556 window_manager()->GetRoots().front()->AddChild(view1); |
542 | 557 |
543 // Embed another app and verify initial state. | 558 // Embed another app and verify initial state. |
544 ViewManager* embedded = Embed(window_manager(), view1); | 559 ViewManager* embedded = Embed(window_manager(), view1); |
545 ASSERT_EQ(1u, embedded->GetRoots().size()); | 560 ASSERT_EQ(1u, embedded->GetRoots().size()); |
546 View* embedded_root = embedded->GetRoots().front(); | 561 View* embedded_root = embedded->GetRoots().front(); |
547 EXPECT_TRUE(embedded_root->visible()); | 562 EXPECT_TRUE(embedded_root->visible()); |
548 EXPECT_TRUE(embedded_root->IsDrawn()); | 563 EXPECT_TRUE(embedded_root->IsDrawn()); |
549 | 564 |
550 // Change the visible state from the first connection and verify its mirrored | 565 // Change the visible state from the first connection and verify its mirrored |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
593 | 608 |
594 View* view_; | 609 View* view_; |
595 | 610 |
596 DISALLOW_COPY_AND_ASSIGN(DrawnChangeObserver); | 611 DISALLOW_COPY_AND_ASSIGN(DrawnChangeObserver); |
597 }; | 612 }; |
598 | 613 |
599 } // namespace | 614 } // namespace |
600 | 615 |
601 TEST_F(ViewManagerTest, DISABLED_Drawn) { | 616 TEST_F(ViewManagerTest, DISABLED_Drawn) { |
602 View* view1 = View::Create(window_manager()); | 617 View* view1 = View::Create(window_manager()); |
| 618 view1->SetVisible(true); |
603 window_manager()->GetRoots().front()->AddChild(view1); | 619 window_manager()->GetRoots().front()->AddChild(view1); |
604 | 620 |
605 // Embed another app and verify initial state. | 621 // Embed another app and verify initial state. |
606 ViewManager* embedded = Embed(window_manager(), view1); | 622 ViewManager* embedded = Embed(window_manager(), view1); |
607 ASSERT_EQ(1u, embedded->GetRoots().size()); | 623 ASSERT_EQ(1u, embedded->GetRoots().size()); |
608 View* embedded_root = embedded->GetRoots().front(); | 624 View* embedded_root = embedded->GetRoots().front(); |
609 EXPECT_TRUE(embedded_root->visible()); | 625 EXPECT_TRUE(embedded_root->visible()); |
610 EXPECT_TRUE(embedded_root->IsDrawn()); | 626 EXPECT_TRUE(embedded_root->IsDrawn()); |
611 | 627 |
612 // Change the visibility of the root, this should propagate a drawn state | 628 // Change the visibility of the root, this should propagate a drawn state |
(...skipping 16 matching lines...) Expand all Loading... |
629 | 645 |
630 // TODO(beng): tests for focus: | 646 // TODO(beng): tests for focus: |
631 // - focus between two views known to a connection | 647 // - focus between two views known to a connection |
632 // - focus between views unknown to one of the connections. | 648 // - focus between views unknown to one of the connections. |
633 // - focus between views unknown to either connection. | 649 // - focus between views unknown to either connection. |
634 | 650 |
635 // TODO(sky): need test of root being destroyed with existing views. See | 651 // TODO(sky): need test of root being destroyed with existing views. See |
636 // 434555 for specific case. | 652 // 434555 for specific case. |
637 | 653 |
638 } // namespace mojo | 654 } // namespace mojo |
OLD | NEW |