OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h" | 5 #include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h" |
6 | 6 |
7 #include "ash/test/ash_test_base.h" | 7 #include "ash/test/ash_test_base.h" |
8 #include "chrome/browser/ui/immersive_fullscreen_configuration.h" | 8 #include "chrome/browser/ui/immersive_fullscreen_configuration.h" |
9 #include "ui/aura/client/cursor_client.h" | 9 #include "ui/aura/client/cursor_client.h" |
10 #include "ui/aura/root_window.h" | 10 #include "ui/aura/root_window.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 widget_->Init(params); | 92 widget_->Init(params); |
93 widget_->Show(); | 93 widget_->Show(); |
94 | 94 |
95 top_container_ = new views::View(); | 95 top_container_ = new views::View(); |
96 top_container_->SetBounds(0, 0, 500, 100); | 96 top_container_->SetBounds(0, 0, 500, 100); |
97 top_container_->set_focusable(true); | 97 top_container_->set_focusable(true); |
98 | 98 |
99 widget_->GetContentsView()->AddChildView(top_container_); | 99 widget_->GetContentsView()->AddChildView(top_container_); |
100 | 100 |
101 controller_->Init(delegate_.get(), widget_, top_container_); | 101 controller_->Init(delegate_.get(), widget_, top_container_); |
102 controller_->DisableAnimationsForTest(); | 102 SetAnimationsDisabled(true); |
| 103 } |
| 104 |
| 105 // Enable or disable the immersive mode controller's animations. When the |
| 106 // immersive mode controller's animations are disabled, some behavior is |
| 107 // slightly different. In particular, the behavior is different when there |
| 108 // is a transfer in which lock keeps the top-of-window views revealed (eg |
| 109 // (bubble keeps top-of-window views revealed -> mouse keeps top-of-window |
| 110 // views revealed). It is necessary to temparily enable the immersive |
| 111 // controller's animations to get the correct behavior in tests. |
| 112 void SetAnimationsDisabled(bool disabled) { |
| 113 controller_->animations_disabled_for_test_ = disabled; |
| 114 // Force any in progress animations to finish. |
| 115 if (disabled) |
| 116 controller_->MaybeEndReveal(ImmersiveModeControllerAsh::ANIMATE_NO); |
103 } | 117 } |
104 | 118 |
105 // Attempt to reveal the top-of-window views via |modality|. | 119 // Attempt to reveal the top-of-window views via |modality|. |
106 // The top-of-window views can only be revealed via mouse hover or a gesture. | 120 // The top-of-window views can only be revealed via mouse hover or a gesture. |
107 void AttemptReveal(Modality modality) { | 121 void AttemptReveal(Modality modality) { |
108 ASSERT_NE(modality, MODALITY_TOUCH); | 122 ASSERT_NE(modality, MODALITY_TOUCH); |
109 AttemptRevealStateChange(true, modality); | 123 AttemptRevealStateChange(true, modality); |
110 } | 124 } |
111 | 125 |
112 // Attempt to unreveal the top-of-window views via |modality|. The | 126 // Attempt to unreveal the top-of-window views via |modality|. The |
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
559 views::Widget* bubble_widget2 = views::BubbleDelegateView::CreateBubble( | 573 views::Widget* bubble_widget2 = views::BubbleDelegateView::CreateBubble( |
560 new views::BubbleDelegateView(child_view, views::BubbleBorder::NONE)); | 574 new views::BubbleDelegateView(child_view, views::BubbleBorder::NONE)); |
561 bubble_widget2->Show(); | 575 bubble_widget2->Show(); |
562 EXPECT_TRUE(controller()->IsRevealed()); | 576 EXPECT_TRUE(controller()->IsRevealed()); |
563 revealed_lock.reset(); | 577 revealed_lock.reset(); |
564 SetHovered(false); | 578 SetHovered(false); |
565 EXPECT_TRUE(controller()->IsRevealed()); | 579 EXPECT_TRUE(controller()->IsRevealed()); |
566 bubble_widget2->Close(); | 580 bubble_widget2->Close(); |
567 EXPECT_FALSE(controller()->IsRevealed()); | 581 EXPECT_FALSE(controller()->IsRevealed()); |
568 | 582 |
569 // 2) Test that the top-of-window views stay revealed as long as at least one | 583 // 2) Test that transitioning from keeping the top-of-window views revealed |
| 584 // because of a bubble to keeping the top-of-window views revealed because of |
| 585 // mouse hover by activating |top_container_widget| works. |
| 586 views::Widget* bubble_widget3 = views::BubbleDelegateView::CreateBubble( |
| 587 new views::BubbleDelegateView(child_view, views::BubbleBorder::NONE)); |
| 588 bubble_widget3->Show(); |
| 589 SetHovered(true); |
| 590 EXPECT_TRUE(controller()->IsRevealed()); |
| 591 |
| 592 SetAnimationsDisabled(false); |
| 593 // Activating |top_container_widget| will close |bubble_widget3|. |
| 594 top_container_widget->Activate(); |
| 595 SetAnimationsDisabled(true); |
| 596 EXPECT_TRUE(controller()->IsRevealed()); |
| 597 |
| 598 // 3) Test that the top-of-window views stay revealed as long as at least one |
570 // bubble anchored to a child of the top container is visible. | 599 // bubble anchored to a child of the top container is visible. |
571 views::BubbleDelegateView* bubble_delegate3(new views::BubbleDelegateView( | 600 SetHovered(false); |
572 child_view, views::BubbleBorder::NONE)); | 601 EXPECT_FALSE(controller()->IsRevealed()); |
573 bubble_delegate3->set_use_focusless(true); | |
574 views::Widget* bubble_widget3(views::BubbleDelegateView::CreateBubble( | |
575 bubble_delegate3)); | |
576 bubble_widget3->Show(); | |
577 | 602 |
578 views::BubbleDelegateView* bubble_delegate4(new views::BubbleDelegateView( | 603 views::BubbleDelegateView* bubble_delegate4(new views::BubbleDelegateView( |
579 child_view, views::BubbleBorder::NONE)); | 604 child_view, views::BubbleBorder::NONE)); |
580 bubble_delegate4->set_use_focusless(true); | 605 bubble_delegate4->set_use_focusless(true); |
581 views::Widget* bubble_widget4(views::BubbleDelegateView::CreateBubble( | 606 views::Widget* bubble_widget4(views::BubbleDelegateView::CreateBubble( |
582 bubble_delegate4)); | 607 bubble_delegate4)); |
583 bubble_widget4->Show(); | 608 bubble_widget4->Show(); |
584 | 609 |
585 EXPECT_TRUE(controller()->IsRevealed()); | 610 views::BubbleDelegateView* bubble_delegate5(new views::BubbleDelegateView( |
586 bubble_widget3->Hide(); | 611 child_view, views::BubbleBorder::NONE)); |
| 612 bubble_delegate5->set_use_focusless(true); |
| 613 views::Widget* bubble_widget5(views::BubbleDelegateView::CreateBubble( |
| 614 bubble_delegate5)); |
| 615 bubble_widget5->Show(); |
| 616 |
587 EXPECT_TRUE(controller()->IsRevealed()); | 617 EXPECT_TRUE(controller()->IsRevealed()); |
588 bubble_widget4->Hide(); | 618 bubble_widget4->Hide(); |
| 619 EXPECT_TRUE(controller()->IsRevealed()); |
| 620 bubble_widget5->Hide(); |
589 EXPECT_FALSE(controller()->IsRevealed()); | 621 EXPECT_FALSE(controller()->IsRevealed()); |
590 bubble_widget4->Show(); | 622 bubble_widget5->Show(); |
591 EXPECT_TRUE(controller()->IsRevealed()); | 623 EXPECT_TRUE(controller()->IsRevealed()); |
592 | 624 |
593 // 3) Test that visibility changes which occur while immersive fullscreen is | 625 // 4) Test that visibility changes which occur while immersive fullscreen is |
594 // disabled are handled upon reenabling immersive fullscreen. | 626 // disabled are handled upon reenabling immersive fullscreen. |
595 controller()->SetEnabled(false); | 627 controller()->SetEnabled(false); |
596 bubble_widget4->Hide(); | 628 bubble_widget5->Hide(); |
597 controller()->SetEnabled(true); | 629 controller()->SetEnabled(true); |
598 EXPECT_FALSE(controller()->IsRevealed()); | 630 EXPECT_FALSE(controller()->IsRevealed()); |
599 | 631 |
600 // We do not need |bubble_widget3| or |bubble_widget4| anymore, close them. | 632 // We do not need |bubble_widget4| or |bubble_widget5| anymore, close them. |
601 bubble_widget3->Close(); | |
602 bubble_widget4->Close(); | 633 bubble_widget4->Close(); |
| 634 bubble_widget5->Close(); |
603 | 635 |
604 // 4) Test that a bubble added while immersive fullscreen is disabled is | 636 // 5) Test that a bubble added while immersive fullscreen is disabled is |
605 // handled upon reenabling immersive fullscreen. | 637 // handled upon reenabling immersive fullscreen. |
606 controller()->SetEnabled(false); | 638 controller()->SetEnabled(false); |
607 | 639 |
608 views::Widget* bubble_widget5 = views::BubbleDelegateView::CreateBubble( | 640 views::Widget* bubble_widget6 = views::BubbleDelegateView::CreateBubble( |
609 new views::BubbleDelegateView(child_view, views::BubbleBorder::NONE)); | 641 new views::BubbleDelegateView(child_view, views::BubbleBorder::NONE)); |
610 bubble_widget5->Show(); | 642 bubble_widget6->Show(); |
611 | 643 |
612 controller()->SetEnabled(true); | 644 controller()->SetEnabled(true); |
613 EXPECT_TRUE(controller()->IsRevealed()); | 645 EXPECT_TRUE(controller()->IsRevealed()); |
614 | 646 |
615 bubble_widget5->Close(); | 647 bubble_widget6->Close(); |
616 | 648 |
617 // 5) Test that a bubble which is not anchored to a child of the | 649 // 6) Test that a bubble which is not anchored to a child of the |
618 // TopContainerView does not trigger a reveal or keep the | 650 // TopContainerView does not trigger a reveal or keep the |
619 // top-of-window views revealed if they are already revealed. | 651 // top-of-window views revealed if they are already revealed. |
620 views::Widget* bubble_widget6 = views::BubbleDelegateView::CreateBubble( | 652 views::Widget* bubble_widget7 = views::BubbleDelegateView::CreateBubble( |
621 new views::BubbleDelegateView(unrelated_view, views::BubbleBorder::NONE)); | 653 new views::BubbleDelegateView(unrelated_view, views::BubbleBorder::NONE)); |
622 bubble_widget6->Show(); | 654 bubble_widget7->Show(); |
623 EXPECT_FALSE(controller()->IsRevealed()); | 655 EXPECT_FALSE(controller()->IsRevealed()); |
624 | 656 |
625 // Activating |top_container_widget| will close |bubble_widget6|. | 657 // Activating |top_container_widget| will close |bubble_widget6|. |
626 top_container_widget->Activate(); | 658 top_container_widget->Activate(); |
627 AttemptReveal(MODALITY_MOUSE); | 659 AttemptReveal(MODALITY_MOUSE); |
628 EXPECT_TRUE(controller()->IsRevealed()); | 660 EXPECT_TRUE(controller()->IsRevealed()); |
629 | 661 |
630 views::Widget* bubble_widget7 = views::BubbleDelegateView::CreateBubble( | 662 views::Widget* bubble_widget8 = views::BubbleDelegateView::CreateBubble( |
631 new views::BubbleDelegateView(unrelated_view, views::BubbleBorder::NONE)); | 663 new views::BubbleDelegateView(unrelated_view, views::BubbleBorder::NONE)); |
632 bubble_widget7->Show(); | 664 bubble_widget8->Show(); |
633 SetHovered(false); | 665 SetHovered(false); |
634 EXPECT_FALSE(controller()->IsRevealed()); | 666 EXPECT_FALSE(controller()->IsRevealed()); |
635 bubble_widget7->Close(); | 667 bubble_widget8->Close(); |
636 } | 668 } |
637 | 669 |
638 #endif // defined(OS_WIN) | 670 #endif // defined(OS_WIN) |
639 | 671 |
640 #endif // defined(OS_CHROMEOS) | 672 #endif // defined(OS_CHROMEOS) |
OLD | NEW |