| 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 |