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

Side by Side Diff: chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc

Issue 22238003: Keep the top-of-window views revealed when clicking on the top-of-window views with a bubble open (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/display/display_controller.h" 7 #include "ash/display/display_controller.h"
8 #include "ash/shell.h" 8 #include "ash/shell.h"
9 #include "ash/test/ash_test_base.h" 9 #include "ash/test/ash_test_base.h"
10 #include "chrome/browser/ui/immersive_fullscreen_configuration.h" 10 #include "chrome/browser/ui/immersive_fullscreen_configuration.h"
11 #include "ui/aura/client/cursor_client.h" 11 #include "ui/aura/client/cursor_client.h"
12 #include "ui/aura/env.h" 12 #include "ui/aura/env.h"
13 #include "ui/aura/root_window.h" 13 #include "ui/aura/root_window.h"
14 #include "ui/aura/test/event_generator.h" 14 #include "ui/aura/test/event_generator.h"
15 #include "ui/aura/window.h" 15 #include "ui/aura/window.h"
16 #include "ui/base/animation/slide_animation.h"
16 #include "ui/views/bubble/bubble_delegate.h" 17 #include "ui/views/bubble/bubble_delegate.h"
17 18
18 // For now, immersive fullscreen is Chrome OS only. 19 // For now, immersive fullscreen is Chrome OS only.
19 #if defined(OS_CHROMEOS) 20 #if defined(OS_CHROMEOS)
20 21
21 ///////////////////////////////////////////////////////////////////////////// 22 /////////////////////////////////////////////////////////////////////////////
22 23
23 class MockImmersiveModeControllerDelegate 24 class MockImmersiveModeControllerDelegate
24 : public ImmersiveModeController::Delegate { 25 : public ImmersiveModeController::Delegate {
25 public: 26 public:
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 widget_->Init(params); 90 widget_->Init(params);
90 widget_->Show(); 91 widget_->Show();
91 92
92 top_container_ = new views::View(); 93 top_container_ = new views::View();
93 top_container_->SetBounds(0, 0, 500, 100); 94 top_container_->SetBounds(0, 0, 500, 100);
94 top_container_->set_focusable(true); 95 top_container_->set_focusable(true);
95 96
96 widget_->GetContentsView()->AddChildView(top_container_); 97 widget_->GetContentsView()->AddChildView(top_container_);
97 98
98 controller_->Init(delegate_.get(), widget_, top_container_); 99 controller_->Init(delegate_.get(), widget_, top_container_);
99 controller_->DisableAnimationsForTest(); 100 SetAnimationsDisabled(true);
101 }
102
103 // Enable or disable the immersive mode controller's animations. When the
104 // immersive mode controller's animations are disabled, some behavior is
105 // slightly different. In particular, the behavior is different when there
106 // is a transfer in which lock keeps the top-of-window views revealed (eg
107 // bubble keeps top-of-window views revealed -> mouse keeps top-of-window
108 // views revealed). It is necessary to temparily enable the immersive
109 // controller's animations to get the correct behavior in tests.
110 void SetAnimationsDisabled(bool disabled) {
111 controller_->animations_disabled_for_test_ = disabled;
112 // Force any in progress animations to finish.
113 if (disabled)
114 controller_->animation_->End();
100 } 115 }
101 116
102 // Attempt to reveal the top-of-window views via |modality|. 117 // Attempt to reveal the top-of-window views via |modality|.
103 // The top-of-window views can only be revealed via mouse hover or a gesture. 118 // The top-of-window views can only be revealed via mouse hover or a gesture.
104 void AttemptReveal(Modality modality) { 119 void AttemptReveal(Modality modality) {
105 ASSERT_NE(modality, MODALITY_TOUCH); 120 ASSERT_NE(modality, MODALITY_TOUCH);
106 AttemptRevealStateChange(true, modality); 121 AttemptRevealStateChange(true, modality);
107 } 122 }
108 123
109 // Attempt to unreveal the top-of-window views via |modality|. The 124 // Attempt to unreveal the top-of-window views via |modality|. The
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 views::Widget* bubble_widget2 = views::BubbleDelegateView::CreateBubble( 662 views::Widget* bubble_widget2 = views::BubbleDelegateView::CreateBubble(
648 new views::BubbleDelegateView(child_view, views::BubbleBorder::NONE)); 663 new views::BubbleDelegateView(child_view, views::BubbleBorder::NONE));
649 bubble_widget2->Show(); 664 bubble_widget2->Show();
650 EXPECT_TRUE(controller()->IsRevealed()); 665 EXPECT_TRUE(controller()->IsRevealed());
651 revealed_lock.reset(); 666 revealed_lock.reset();
652 SetHovered(false); 667 SetHovered(false);
653 EXPECT_TRUE(controller()->IsRevealed()); 668 EXPECT_TRUE(controller()->IsRevealed());
654 bubble_widget2->Close(); 669 bubble_widget2->Close();
655 EXPECT_FALSE(controller()->IsRevealed()); 670 EXPECT_FALSE(controller()->IsRevealed());
656 671
657 // 2) Test that the top-of-window views stay revealed as long as at least one 672 // 2) Test that transitioning from keeping the top-of-window views revealed
673 // because of a bubble to keeping the top-of-window views revealed because of
674 // mouse hover by activating |top_container_widget| works.
675 views::Widget* bubble_widget3 = views::BubbleDelegateView::CreateBubble(
676 new views::BubbleDelegateView(child_view, views::BubbleBorder::NONE));
677 bubble_widget3->Show();
678 SetHovered(true);
679 EXPECT_TRUE(controller()->IsRevealed());
680
681 SetAnimationsDisabled(false);
682 // Activating |top_container_widget| will close |bubble_widget3|.
683 top_container_widget->Activate();
684 SetAnimationsDisabled(true);
685 EXPECT_TRUE(controller()->IsRevealed());
686
687 // 3) Test that the top-of-window views stay revealed as long as at least one
658 // bubble anchored to a child of the top container is visible. 688 // bubble anchored to a child of the top container is visible.
659 views::BubbleDelegateView* bubble_delegate3(new views::BubbleDelegateView( 689 SetHovered(false);
660 child_view, views::BubbleBorder::NONE)); 690 EXPECT_FALSE(controller()->IsRevealed());
661 bubble_delegate3->set_use_focusless(true);
662 views::Widget* bubble_widget3(views::BubbleDelegateView::CreateBubble(
663 bubble_delegate3));
664 bubble_widget3->Show();
665 691
666 views::BubbleDelegateView* bubble_delegate4(new views::BubbleDelegateView( 692 views::BubbleDelegateView* bubble_delegate4(new views::BubbleDelegateView(
667 child_view, views::BubbleBorder::NONE)); 693 child_view, views::BubbleBorder::NONE));
668 bubble_delegate4->set_use_focusless(true); 694 bubble_delegate4->set_use_focusless(true);
669 views::Widget* bubble_widget4(views::BubbleDelegateView::CreateBubble( 695 views::Widget* bubble_widget4(views::BubbleDelegateView::CreateBubble(
670 bubble_delegate4)); 696 bubble_delegate4));
671 bubble_widget4->Show(); 697 bubble_widget4->Show();
672 698
673 EXPECT_TRUE(controller()->IsRevealed()); 699 views::BubbleDelegateView* bubble_delegate5(new views::BubbleDelegateView(
674 bubble_widget3->Hide(); 700 child_view, views::BubbleBorder::NONE));
701 bubble_delegate5->set_use_focusless(true);
702 views::Widget* bubble_widget5(views::BubbleDelegateView::CreateBubble(
703 bubble_delegate5));
704 bubble_widget5->Show();
705
675 EXPECT_TRUE(controller()->IsRevealed()); 706 EXPECT_TRUE(controller()->IsRevealed());
676 bubble_widget4->Hide(); 707 bubble_widget4->Hide();
708 EXPECT_TRUE(controller()->IsRevealed());
709 bubble_widget5->Hide();
677 EXPECT_FALSE(controller()->IsRevealed()); 710 EXPECT_FALSE(controller()->IsRevealed());
678 bubble_widget4->Show(); 711 bubble_widget5->Show();
679 EXPECT_TRUE(controller()->IsRevealed()); 712 EXPECT_TRUE(controller()->IsRevealed());
680 713
681 // 3) Test that visibility changes which occur while immersive fullscreen is 714 // 4) Test that visibility changes which occur while immersive fullscreen is
682 // disabled are handled upon reenabling immersive fullscreen. 715 // disabled are handled upon reenabling immersive fullscreen.
683 controller()->SetEnabled(false); 716 controller()->SetEnabled(false);
684 bubble_widget4->Hide(); 717 bubble_widget5->Hide();
685 controller()->SetEnabled(true); 718 controller()->SetEnabled(true);
686 EXPECT_FALSE(controller()->IsRevealed()); 719 EXPECT_FALSE(controller()->IsRevealed());
687 720
688 // We do not need |bubble_widget3| or |bubble_widget4| anymore, close them. 721 // We do not need |bubble_widget4| or |bubble_widget5| anymore, close them.
689 bubble_widget3->Close();
690 bubble_widget4->Close(); 722 bubble_widget4->Close();
723 bubble_widget5->Close();
691 724
692 // 4) Test that a bubble added while immersive fullscreen is disabled is 725 // 5) Test that a bubble added while immersive fullscreen is disabled is
693 // handled upon reenabling immersive fullscreen. 726 // handled upon reenabling immersive fullscreen.
694 controller()->SetEnabled(false); 727 controller()->SetEnabled(false);
695 728
696 views::Widget* bubble_widget5 = views::BubbleDelegateView::CreateBubble( 729 views::Widget* bubble_widget6 = views::BubbleDelegateView::CreateBubble(
697 new views::BubbleDelegateView(child_view, views::BubbleBorder::NONE)); 730 new views::BubbleDelegateView(child_view, views::BubbleBorder::NONE));
698 bubble_widget5->Show(); 731 bubble_widget6->Show();
699 732
700 controller()->SetEnabled(true); 733 controller()->SetEnabled(true);
701 EXPECT_TRUE(controller()->IsRevealed()); 734 EXPECT_TRUE(controller()->IsRevealed());
702 735
703 bubble_widget5->Close(); 736 bubble_widget6->Close();
704 737
705 // 5) Test that a bubble which is not anchored to a child of the 738 // 6) Test that a bubble which is not anchored to a child of the
706 // TopContainerView does not trigger a reveal or keep the 739 // TopContainerView does not trigger a reveal or keep the
707 // top-of-window views revealed if they are already revealed. 740 // top-of-window views revealed if they are already revealed.
708 views::Widget* bubble_widget6 = views::BubbleDelegateView::CreateBubble( 741 views::Widget* bubble_widget7 = views::BubbleDelegateView::CreateBubble(
709 new views::BubbleDelegateView(unrelated_view, views::BubbleBorder::NONE)); 742 new views::BubbleDelegateView(unrelated_view, views::BubbleBorder::NONE));
710 bubble_widget6->Show(); 743 bubble_widget7->Show();
711 EXPECT_FALSE(controller()->IsRevealed()); 744 EXPECT_FALSE(controller()->IsRevealed());
712 745
713 // Activating |top_container_widget| will close |bubble_widget6|. 746 // Activating |top_container_widget| will close |bubble_widget6|.
714 top_container_widget->Activate(); 747 top_container_widget->Activate();
715 AttemptReveal(MODALITY_MOUSE); 748 AttemptReveal(MODALITY_MOUSE);
716 EXPECT_TRUE(controller()->IsRevealed()); 749 EXPECT_TRUE(controller()->IsRevealed());
717 750
718 views::Widget* bubble_widget7 = views::BubbleDelegateView::CreateBubble( 751 views::Widget* bubble_widget8 = views::BubbleDelegateView::CreateBubble(
719 new views::BubbleDelegateView(unrelated_view, views::BubbleBorder::NONE)); 752 new views::BubbleDelegateView(unrelated_view, views::BubbleBorder::NONE));
720 bubble_widget7->Show(); 753 bubble_widget8->Show();
721 SetHovered(false); 754 SetHovered(false);
722 EXPECT_FALSE(controller()->IsRevealed()); 755 EXPECT_FALSE(controller()->IsRevealed());
723 bubble_widget7->Close(); 756 bubble_widget8->Close();
724 } 757 }
725 758
726 #endif // defined(OS_WIN) 759 #endif // defined(OS_WIN)
727 760
728 #endif // defined(OS_CHROMEOS) 761 #endif // defined(OS_CHROMEOS)
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698