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

Side by Side Diff: chrome/browser/ui/panels/panel_browsertest.cc

Issue 8872044: Add test cases for panel overflow handling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/string_number_conversions.h"
7 #include "base/utf_string_conversions.h" 6 #include "base/utf_string_conversions.h"
8 #include "chrome/browser/browser_process.h" 7 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/download/download_service.h" 8 #include "chrome/browser/download/download_service.h"
10 #include "chrome/browser/download/download_service_factory.h" 9 #include "chrome/browser/download/download_service_factory.h"
11 #include "chrome/browser/net/url_request_mock_util.h" 10 #include "chrome/browser/net/url_request_mock_util.h"
12 #include "chrome/browser/notifications/balloon_collection_impl.h" 11 #include "chrome/browser/notifications/balloon_collection_impl.h"
13 #include "chrome/browser/notifications/desktop_notification_service.h" 12 #include "chrome/browser/notifications/desktop_notification_service.h"
14 #include "chrome/browser/notifications/notification.h" 13 #include "chrome/browser/notifications/notification.h"
15 #include "chrome/browser/notifications/notification_ui_manager.h" 14 #include "chrome/browser/notifications/notification_ui_manager.h"
16 #include "chrome/browser/prefs/browser_prefs.h" 15 #include "chrome/browser/prefs/browser_prefs.h"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 73
75 void MoveMouseAndWaitForExpansionStateChange(Panel* panel, 74 void MoveMouseAndWaitForExpansionStateChange(Panel* panel,
76 const gfx::Point& position) { 75 const gfx::Point& position) {
77 ui_test_utils::WindowedNotificationObserver signal( 76 ui_test_utils::WindowedNotificationObserver signal(
78 chrome::NOTIFICATION_PANEL_CHANGED_EXPANSION_STATE, 77 chrome::NOTIFICATION_PANEL_CHANGED_EXPANSION_STATE,
79 content::Source<Panel>(panel)); 78 content::Source<Panel>(panel));
80 MoveMouse(position); 79 MoveMouse(position);
81 signal.Wait(); 80 signal.Wait();
82 } 81 }
83 82
84 void TestCreatePanelOnOverflow() { 83 void MoveMouseAndWaitForOverflowAnimationEnded(const gfx::Point& position) {
84 ui_test_utils::WindowedNotificationObserver signal(
85 chrome::NOTIFICATION_PANEL_BOUNDS_ANIMATIONS_FINISHED,
86 content::Source<PanelOverflowStrip>(
87 PanelManager::GetInstance()->panel_overflow_strip()));
88 MoveMouse(position);
89 signal.Wait();
90 }
91
92 void CreateOverflowPanels(int num_normal_panels,
93 int num_overflow_panels,
94 const int* panel_widthes) {
85 PanelManager* panel_manager = PanelManager::GetInstance(); 95 PanelManager* panel_manager = PanelManager::GetInstance();
86 PanelStrip* panel_strip = panel_manager->panel_strip(); 96 PanelStrip* panel_strip = panel_manager->panel_strip();
87 PanelOverflowStrip* panel_overflow_strip = 97 PanelOverflowStrip* panel_overflow_strip =
88 panel_manager->panel_overflow_strip(); 98 panel_manager->panel_overflow_strip();
89 EXPECT_EQ(0, panel_manager->num_panels()); // No panels initially. 99 EXPECT_EQ(0, panel_manager->num_panels()); // No panels initially.
90 100
91 // Create testing extensions. 101 const int kTestPanelHeight = 200;
92 DictionaryValue empty_value; 102 std::vector<Panel::ExpansionState> expected_expansion_states;
93 scoped_refptr<Extension> extension1 =
94 CreateExtension(FILE_PATH_LITERAL("extension1"),
95 Extension::INVALID, empty_value);
96 scoped_refptr<Extension> extension2 =
97 CreateExtension(FILE_PATH_LITERAL("extension2"),
98 Extension::INVALID, empty_value);
99 scoped_refptr<Extension> extension3 =
100 CreateExtension(FILE_PATH_LITERAL("extension3"),
101 Extension::INVALID, empty_value);
102 103
103 // First, create 3 panels. 104 // First, create normal panels to fill the panel strip.
104 Panel* panel1 = CreatePanelWithBounds( 105 int i = 0;
105 web_app::GenerateApplicationNameFromExtensionId(extension1->id()), 106 for (i = 0; i < num_normal_panels; ++i) {
106 gfx::Rect(0, 0, 250, 200)); 107 CreatePanelParams params(
107 Panel* panel2 = CreatePanelWithBounds( 108 GetPanelName(i),
108 web_app::GenerateApplicationNameFromExtensionId(extension2->id()), 109 gfx::Rect(0, 0, panel_widthes[i], kTestPanelHeight),
109 gfx::Rect(0, 0, 300, 200)); 110 SHOW_AS_INACTIVE);
110 Panel* panel3 = CreatePanelWithBounds( 111 Panel* panel = CreatePanelWithParams(params);
111 web_app::GenerateApplicationNameFromExtensionId(extension1->id()),
112 gfx::Rect(0, 0, 200, 200));
113 ASSERT_EQ(3, panel_manager->num_panels());
114 EXPECT_EQ(3, panel_strip->num_panels());
115 EXPECT_EQ(0, panel_overflow_strip->num_panels());
116 112
117 // Open a panel that would overflow. 113 EXPECT_EQ(i + 1, panel_manager->num_panels());
118 CreatePanelParams params4( 114 EXPECT_EQ(i + 1, panel_strip->num_panels());
119 web_app::GenerateApplicationNameFromExtensionId(extension2->id()), 115 EXPECT_EQ(0, panel_overflow_strip->num_panels());
120 gfx::Rect(0, 0, 280, 200), 116 expected_expansion_states.push_back(Panel::EXPANDED);
121 SHOW_AS_INACTIVE); 117 EXPECT_EQ(expected_expansion_states, GetAllPanelExpansionStates());
122 Panel* panel4 = CreatePanelWithParams(params4); 118 }
123 WaitForExpansionStateChanged(panel4, Panel::IN_OVERFLOW);
124 ASSERT_EQ(4, panel_manager->num_panels());
125 EXPECT_EQ(3, panel_strip->num_panels());
126 EXPECT_EQ(1, panel_overflow_strip->num_panels());
127 119
128 // Open another panel that would overflow. 120 // Then, create panels that would be placed in the overflow strip.
129 CreatePanelParams params5( 121 for (; i < num_normal_panels + num_overflow_panels; ++i) {
130 web_app::GenerateApplicationNameFromExtensionId(extension3->id()), 122 CreatePanelParams params(
131 gfx::Rect(0, 0, 300, 200), 123 GetPanelName(i),
132 SHOW_AS_INACTIVE); 124 gfx::Rect(0, 0, panel_widthes[i], kTestPanelHeight),
133 Panel* panel5 = CreatePanelWithParams(params5); 125 SHOW_AS_INACTIVE);
134 WaitForExpansionStateChanged(panel5, Panel::IN_OVERFLOW); 126 Panel* panel = CreatePanelWithParams(params);
135 ASSERT_EQ(5, panel_manager->num_panels()); 127 WaitForExpansionStateChanged(panel, Panel::IN_OVERFLOW);
136 EXPECT_EQ(3, panel_strip->num_panels());
137 EXPECT_EQ(2, panel_overflow_strip->num_panels());
138 EXPECT_EQ(Panel::IN_OVERFLOW, panel4->expansion_state());
139 128
140 // Close a visible panel. Expect an overflow panel to move over. 129 EXPECT_EQ(i + 1, panel_manager->num_panels());
141 CloseWindowAndWait(panel2->browser()); 130 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
142 ASSERT_EQ(4, panel_manager->num_panels()); 131 EXPECT_EQ(i + 1 - num_normal_panels, panel_overflow_strip->num_panels());
143 EXPECT_EQ(3, panel_strip->num_panels()); 132 expected_expansion_states.push_back(Panel::IN_OVERFLOW);
144 EXPECT_EQ(1, panel_overflow_strip->num_panels()); 133 EXPECT_EQ(expected_expansion_states, GetAllPanelExpansionStates());
145 EXPECT_NE(Panel::IN_OVERFLOW, panel4->expansion_state()); 134 }
146 EXPECT_EQ(Panel::IN_OVERFLOW, panel5->expansion_state());
147
148 // Close another visible panel. Remaining overflow panel cannot move over
149 // due to not enough room.
150 CloseWindowAndWait(panel3->browser());
151 ASSERT_EQ(3, panel_manager->num_panels());
152 EXPECT_EQ(2, panel_strip->num_panels());
153 EXPECT_EQ(1, panel_overflow_strip->num_panels());
154 EXPECT_EQ(Panel::IN_OVERFLOW, panel5->expansion_state());
155
156 // Closing one more panel makes room for all panels to fit on screen.
157 CloseWindowAndWait(panel4->browser());
158 ASSERT_EQ(2, panel_manager->num_panels());
159 EXPECT_EQ(2, panel_strip->num_panels());
160 EXPECT_EQ(0, panel_overflow_strip->num_panels());
161 EXPECT_NE(Panel::IN_OVERFLOW, panel5->expansion_state());
162
163 panel1->Close();
164 panel5->Close();
165 } 135 }
166 136
167 int horizontal_spacing() { 137 int horizontal_spacing() {
168 return PanelManager::horizontal_spacing(); 138 return PanelManager::horizontal_spacing();
169 } 139 }
170 140
171 // Helper function for debugging. 141 // Helper function for debugging.
172 void PrintAllPanelBounds() { 142 void PrintAllPanelBounds() {
173 const std::vector<Panel*>& panels = PanelManager::GetInstance()->panels(); 143 const std::vector<Panel*>& panels = PanelManager::GetInstance()->panels();
174 DLOG(WARNING) << "PanelBounds:"; 144 DLOG(WARNING) << "PanelBounds:";
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 // FindBar needs tab contents. 516 // FindBar needs tab contents.
547 CreateTestTabContents(browser); 517 CreateTestTabContents(browser);
548 browser->ShowFindBar(); 518 browser->ShowFindBar();
549 ASSERT_TRUE(browser->GetFindBarController()->find_bar()->IsFindBarVisible()); 519 ASSERT_TRUE(browser->GetFindBarController()->find_bar()->IsFindBarVisible());
550 panel->Close(); 520 panel->Close();
551 } 521 }
552 522
553 // TODO(jianli): remove the guard when overflow support is enabled on other 523 // TODO(jianli): remove the guard when overflow support is enabled on other
554 // platforms. http://crbug.com/105073 524 // platforms. http://crbug.com/105073
555 #if defined(OS_WIN) 525 #if defined(OS_WIN)
556 #define MAYBE_CreatePanelOnOverflow CreatePanelOnOverflow 526 #define MAYBE_CreateOverflowPanels CreateOverflowPanels
527 #define MAYBE_CloseOverflowPanels CloseOverflowPanels
528 #define MAYBE_ActivateOverflowPanels ActivateOverflowPanels
529 #define MAYBE_HoverOverOverflowPanels HoverOverOverflowPanels
557 #else 530 #else
558 #define MAYBE_CreatePanelOnOverflow DISABLED_CreatePanelOnOverflow 531 #define MAYBE_CreateOverflowPanels DISABLED_CreateOverflowPanels
532 #define MAYBE_CloseOverflowPanels DISABLED_CloseOverflowPanels
533 #define MAYBE_ActivateOverflowPanels DISABLED_ActivateOverflowPanels
534 #define MAYBE_HoverOverOverflowPanels DISABLED_HoverOverOverflowPanels
559 #endif 535 #endif
560 IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_CreatePanelOnOverflow) { 536
561 TestCreatePanelOnOverflow(); 537 IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_CreateOverflowPanels) {
538 // Create normal and overflow panels.
539 const int panel_widthes[] = {
540 250, 260, 200, // in panel strip.
541 255, 220 // in overflow strip.
542 };
543 CreateOverflowPanels(3, 2, panel_widthes);
544
545 PanelManager::GetInstance()->RemoveAll();
562 } 546 }
563 547
548 IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_CloseOverflowPanels) {
549 PanelManager* panel_manager = PanelManager::GetInstance();
550 PanelStrip* panel_strip = panel_manager->panel_strip();
551 PanelOverflowStrip* panel_overflow_strip =
552 panel_manager->panel_overflow_strip();
553
554 const int kMaxVisibleOverflow = 3;
555 panel_overflow_strip->set_max_visible_panels(kMaxVisibleOverflow);
556
557 // Create normal and overflow panels.
558 // normal: P0, P1, P2
559 // overflow: P3, P4, P5
560 // overflow-on-overflow: P6, P7, P8
561 int num_normal_panels = 3;
562 int num_overflow_panels = 6; // including overflow-on-overflow panels.
563 const int panel_widthes[] = {
564 250, 260, 200, // normal
565 255, 220, 260, // overflow
566 140, 210, 258 // overflow-on-overflow
567 };
568 CreateOverflowPanels(num_normal_panels, num_overflow_panels, panel_widthes);
569 PanelDataList panel_data_list = GetAllPanelData();
570 Panel* panel0 = panel_data_list[0].panel;
571 Panel* panel1 = panel_data_list[1].panel;
572 Panel* panel2 = panel_data_list[2].panel;
573 Panel* panel3 = panel_data_list[3].panel;
574 Panel* panel4 = panel_data_list[4].panel;
575 Panel* panel5 = panel_data_list[5].panel;
576 Panel* panel6 = panel_data_list[6].panel;
577 Panel* panel7 = panel_data_list[7].panel;
578 Panel* panel8 = panel_data_list[8].panel;
579
580 // Close an overflow-on-overflow panel. Expect only that panel is closed.
581 // normal: P0, P1, P2
582 // overflow: P3, P4, P5,
583 // overflow-on-overflow: P6, P8
584 CloseWindowAndWait(panel7->browser());
585 num_overflow_panels--;
586 ASSERT_EQ(num_normal_panels + num_overflow_panels,
587 panel_manager->num_panels());
588 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
589 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
590 panel_data_list.remove(panel7);
591 EXPECT_EQ(panel_data_list, GetAllPanelData());
592
593 // Close an overflow panel. Expect an overflow-on-overflow panel to become
594 // visible in the overflow strip.
595 // normal: P0, P1, P2
596 // overflow: P3, P5, P6
597 // overflow-on-overflow: P8
598 CloseWindowAndWait(panel4->browser());
599 num_overflow_panels--;
600 ASSERT_EQ(num_normal_panels + num_overflow_panels,
601 panel_manager->num_panels());
602 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
603 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
604 panel_data_list.remove(panel4);
605 panel_data_list.get(panel6)->visible = true;
606 EXPECT_EQ(panel_data_list, GetAllPanelData());
607
608 // Close a normal panel. Expect an overflow panel to move over and an
609 // overflow-on-overflow panel to become visible.
610 // normal: P0, P2, P3
611 // overflow: P5, P6, P8
612 CloseWindowAndWait(panel1->browser());
613 num_overflow_panels--;
614 ASSERT_EQ(num_normal_panels + num_overflow_panels,
615 panel_manager->num_panels());
616 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
617 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
618 panel_data_list.remove(panel1);
619 panel_data_list.get(panel3)->expansion_state = Panel::EXPANDED;
620 panel_data_list.get(panel8)->visible = true;
621 EXPECT_EQ(panel_data_list, GetAllPanelData());
622
623 // Close another normal panel. Remaining overflow panels cannot move over
624 // due to not enough room.
625 // normal: P0, P3
626 // overflow: P5, P6, P8
627 CloseWindowAndWait(panel2->browser());
628 num_normal_panels--;
629 ASSERT_EQ(num_normal_panels + num_overflow_panels,
630 panel_manager->num_panels());
631 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
632 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
633 panel_data_list.remove(panel2);
634 EXPECT_EQ(panel_data_list, GetAllPanelData());
635
636 // Closing one more normal panel makes room for two overflow panels.
637 // normal: P0, P5, P6
638 // overflow: P8
639 CloseWindowAndWait(panel3->browser());
640 num_normal_panels++;
641 num_overflow_panels -= 2;
642 ASSERT_EQ(num_normal_panels + num_overflow_panels,
643 panel_manager->num_panels());
644 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
645 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
646 panel_data_list.remove(panel3);
647 panel_data_list.get(panel5)->expansion_state = Panel::EXPANDED;
648 panel_data_list.get(panel6)->expansion_state = Panel::EXPANDED;
649 EXPECT_EQ(panel_data_list, GetAllPanelData());
650
651 // Close another normal panel. The remaining overflow can also fit.
652 // normal: P5, P6, P8
653 CloseWindowAndWait(panel0->browser());
654 num_overflow_panels--;
655 ASSERT_EQ(num_normal_panels + num_overflow_panels,
656 panel_manager->num_panels());
657 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
658 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
659 panel_data_list.remove(panel0);
660 panel_data_list.get(panel8)->expansion_state = Panel::EXPANDED;
661 EXPECT_EQ(panel_data_list, GetAllPanelData());
662
663 panel_manager->RemoveAll();
664 }
665
666 IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_ActivateOverflowPanels) {
667 PanelManager* panel_manager = PanelManager::GetInstance();
668 PanelStrip* panel_strip = panel_manager->panel_strip();
669 PanelOverflowStrip* panel_overflow_strip =
670 panel_manager->panel_overflow_strip();
671 panel_overflow_strip->set_max_visible_panels(3);
672
673 // Create normal and overflow panels.
674 // normal: P0, P1, P2
675 // overflow: P3, P4, P5
676 // overflow-on-overflow: P6, P7
677 const int panel_widthes[] = {
678 250, 260, 200, // normal
679 210, 260, 230, // overflow
680 255, 210 // overflow-on-overflow
681 };
682 int num_normal_panels = 3;
683 int num_overflow_panels = 5; // including overflow-on-overflow panels.
684 CreateOverflowPanels(num_normal_panels, num_overflow_panels, panel_widthes);
685 PanelDataList panel_data_list = GetAllPanelData();
686 Panel* panel1 = panel_data_list[1].panel;
687 Panel* panel2 = panel_data_list[2].panel;
688 Panel* panel3 = panel_data_list[3].panel;
689 Panel* panel4 = panel_data_list[4].panel;
690 Panel* panel5 = panel_data_list[5].panel;
691 Panel* panel6 = panel_data_list[6].panel;
692 Panel* panel7 = panel_data_list[7].panel;
693
694 // Activate an overflow panel. Expect one normal panel is swapped into the
695 // overflow strip.
696 // normal: P0, P1, P3
697 // overflow: P2, P4, P5
698 // overflow-on-overflow: P6, P7
699 panel3->Activate();
700 WaitForPanelActiveState(panel3, SHOW_AS_ACTIVE);
701 panel_data_list.get(panel3)->expansion_state = Panel::EXPANDED;
702 panel_data_list.get(panel3)->active = true;
703 panel_data_list.get(panel2)->expansion_state = Panel::IN_OVERFLOW;
704 PanelData temp_panel_data = panel_data_list.remove(panel3);
705 panel_data_list.insertBefore(panel2, temp_panel_data);
706 EXPECT_EQ(panel_data_list, GetAllPanelData());
707
708 // Activate an overflow panel. Expect two normal panels are swapped into the
709 // overflow strip and one more overflow-on-overflow panel.
710 // normal: P0, P4
711 // overflow: P1, P3, P2
712 // overflow-on-overflow: P5, P6, P7
713 panel4->Activate();
714 WaitForPanelActiveState(panel4, SHOW_AS_ACTIVE);
715 WaitForPanelActiveState(panel3, SHOW_AS_INACTIVE);
716 panel_data_list.get(panel4)->expansion_state = Panel::EXPANDED;
717 panel_data_list.get(panel4)->active = true;
718 panel_data_list.get(panel1)->expansion_state = Panel::IN_OVERFLOW;
719 panel_data_list.get(panel3)->expansion_state = Panel::IN_OVERFLOW;
720 panel_data_list.get(panel3)->active = false;
721 panel_data_list.get(panel5)->visible = false;
722 temp_panel_data = panel_data_list.remove(panel4);
723 panel_data_list.insertBefore(panel1, temp_panel_data);
724 EXPECT_EQ(panel_data_list, GetAllPanelData());
725
726 // Activate an overflow-on-overflow panel. Expect one normal panel is swapped
727 // into the overflow strip.
728 // normal: P0, P6
729 // overflow: P4, P1, P3,
730 // overflow-on-overflow: P2, P5, P7
731 panel6->Activate();
732 WaitForPanelActiveState(panel6, SHOW_AS_ACTIVE);
733 WaitForPanelActiveState(panel4, SHOW_AS_INACTIVE);
734 panel_data_list.get(panel6)->expansion_state = Panel::EXPANDED;
735 panel_data_list.get(panel6)->visible = true;
736 panel_data_list.get(panel6)->active = true;
737 panel_data_list.get(panel4)->expansion_state = Panel::IN_OVERFLOW;
738 panel_data_list.get(panel4)->active = false;
739 panel_data_list.get(panel2)->visible = false;
740 temp_panel_data = panel_data_list.remove(panel6);
741 panel_data_list.insertBefore(panel4, temp_panel_data);
742 EXPECT_EQ(panel_data_list, GetAllPanelData());
743
744 // Activate an overflow-on-overflow panel. Not any normal panel is swapped
745 // since there is enough space in the panel strip.
746 // normal: P0, P6, P7
747 // overflow: P4, P1, P3,
748 // overflow-on-overflow: P2, P5
749 panel7->Activate();
750 WaitForPanelActiveState(panel7, SHOW_AS_ACTIVE);
751 WaitForPanelActiveState(panel6, SHOW_AS_INACTIVE);
752 panel_data_list.get(panel7)->expansion_state = Panel::EXPANDED;
753 panel_data_list.get(panel7)->visible = true;
754 panel_data_list.get(panel7)->active = true;
755 panel_data_list.get(panel6)->active = false;
756 temp_panel_data = panel_data_list.remove(panel7);
757 panel_data_list.insertBefore(panel4, temp_panel_data);
758 EXPECT_EQ(panel_data_list, GetAllPanelData());
759
760 panel_manager->RemoveAll();
761 }
762
763 IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_HoverOverOverflowPanels) {
764 PanelManager* panel_manager = PanelManager::GetInstance();
765 PanelMouseWatcher* mouse_watcher = new TestPanelMouseWatcher();
766 panel_manager->set_mouse_watcher(mouse_watcher);
767 PanelStrip* panel_strip = panel_manager->panel_strip();
768 PanelOverflowStrip* panel_overflow_strip =
769 panel_manager->panel_overflow_strip();
770 panel_overflow_strip->set_max_visible_panels(3);
771 int hover_width = PanelOverflowStrip::kOverflowAreaHoverWidth;
772
773 // Create normal and overflow panels.
774 // normal: P0, P1, P2
775 // overflow: P3, P4, P5
776 // overflow-on-overflow: P6, P7
777 const int panel_widthes[] = {
778 250, 260, 200, // normal
779 255, 220, 260, // overflow
780 140, 210 // overflow-on-overflow
781 };
782 int num_normal_panels = 3;
783 int num_overflow_panels = 5; // including overflow-on-overflow panels.
784 CreateOverflowPanels(num_normal_panels, num_overflow_panels, panel_widthes);
785 PanelDataList panel_data_list = GetAllPanelData();
786 Panel* panel4 = panel_data_list[4].panel;
787 int iconified_width = panel_data_list[4].panel->GetBounds().width();
788 gfx::Rect bounds3 = panel_data_list[3].panel->GetBounds();
789 gfx::Rect bounds5 = panel_data_list[5].panel->GetBounds();
790
791 // Test that only the mouse point within the shrunk overflow area will
792 // expand the overflow area.
793 EXPECT_TRUE(panel_overflow_strip->TestShouldShowOverflowTitles(
794 bounds5.origin()));
795 EXPECT_TRUE(panel_overflow_strip->TestShouldShowOverflowTitles(
796 gfx::Point(bounds5.x() - 1, bounds5.y())));
797 EXPECT_FALSE(panel_overflow_strip->TestShouldShowOverflowTitles(
798 gfx::Point(bounds5.right() + 1, bounds5.y())));
799 EXPECT_FALSE(panel_overflow_strip->TestShouldShowOverflowTitles(
800 gfx::Point(bounds5.x(), bounds5.y() - 1)));
801 EXPECT_FALSE(panel_overflow_strip->TestShouldShowOverflowTitles(
802 gfx::Point(bounds3.x(), bounds3.bottom() + 1)));
803
804 // Hover mouse on an overflow panel.
805 gfx::Point hover_point(panel_data_list[4].panel->GetBounds().origin());
806 MoveMouseAndWaitForOverflowAnimationEnded(hover_point);
807 EXPECT_EQ(hover_width, panel_data_list[3].panel->GetBounds().width());
808 EXPECT_EQ(hover_width, panel_data_list[4].panel->GetBounds().width());
809 EXPECT_EQ(hover_width, panel_data_list[5].panel->GetBounds().width());
810 EXPECT_EQ(hover_width, panel_data_list[6].panel->GetBounds().width());
811 EXPECT_EQ(hover_width, panel_data_list[7].panel->GetBounds().width());
812
813 // Test that only the mouse outside the expanded overflow area will
814 // shrink the overflow area.
815 gfx::Rect bounds7 = panel_data_list[7].panel->GetBounds();
816 EXPECT_TRUE(panel_overflow_strip->TestShouldShowOverflowTitles(
817 bounds5.origin()));
818 EXPECT_TRUE(panel_overflow_strip->TestShouldShowOverflowTitles(
819 gfx::Point(bounds5.x() - 1, bounds5.y())));
820 EXPECT_TRUE(panel_overflow_strip->TestShouldShowOverflowTitles(
821 gfx::Point(bounds5.x() + hover_width, bounds5.y())));
822 EXPECT_FALSE(panel_overflow_strip->TestShouldShowOverflowTitles(
823 gfx::Point(bounds5.x() + hover_width + 1, bounds5.y())));
824
825 EXPECT_TRUE(panel_overflow_strip->TestShouldShowOverflowTitles(
826 gfx::Point(bounds7.x(), bounds7.y())));
827 EXPECT_FALSE(panel_overflow_strip->TestShouldShowOverflowTitles(
828 gfx::Point(bounds7.x(), bounds7.y() - 1)));
829 EXPECT_TRUE(panel_overflow_strip->TestShouldShowOverflowTitles(
830 gfx::Point(bounds3.x(), bounds3.bottom())));
831 EXPECT_FALSE(panel_overflow_strip->TestShouldShowOverflowTitles(
832 gfx::Point(bounds3.x(), bounds3.bottom() + 1)));
833
834 // Move mouse away from the expanded overflow area.
835 hover_point.set_x(hover_point.x() + hover_width + 10);
836 MoveMouseAndWaitForOverflowAnimationEnded(hover_point);
837 EXPECT_EQ(iconified_width, panel_data_list[3].panel->GetBounds().width());
838 EXPECT_EQ(iconified_width, panel_data_list[4].panel->GetBounds().width());
839 EXPECT_EQ(iconified_width, panel_data_list[5].panel->GetBounds().width());
840 EXPECT_EQ(0, panel_data_list[6].panel->GetBounds().width());
841 EXPECT_EQ(0, panel_data_list[7].panel->GetBounds().width());
842
843 panel_manager->RemoveAll();
844 }
845
564 IN_PROC_BROWSER_TEST_F(PanelBrowserTest, DragPanels) { 846 IN_PROC_BROWSER_TEST_F(PanelBrowserTest, DragPanels) {
565 static const int max_panels = 3; 847 static const int max_panels = 3;
566 static const int zero_delta = 0; 848 static const int zero_delta = 0;
567 static const int small_delta = 10; 849 static const int small_delta = 10;
568 static const int big_delta = 70; 850 static const int big_delta = 70;
569 static const int bigger_delta = 120; 851 static const int bigger_delta = 120;
570 static const int biggest_delta = 200; 852 static const int biggest_delta = 200;
571 static const std::vector<int> zero_deltas(max_panels, zero_delta); 853 static const std::vector<int> zero_deltas(max_panels, zero_delta);
572 854
573 std::vector<int> expected_delta_x_after_drag(max_panels, zero_delta); 855 std::vector<int> expected_delta_x_after_drag(max_panels, zero_delta);
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 #else 1387 #else
1106 #define MAYBE_ActivateDeactivateMultiple DISABLED_ActivateDeactivateMultiple 1388 #define MAYBE_ActivateDeactivateMultiple DISABLED_ActivateDeactivateMultiple
1107 #endif 1389 #endif
1108 1390
1109 IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_ActivateDeactivateMultiple) { 1391 IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_ActivateDeactivateMultiple) {
1110 BrowserWindow* tabbed_window = BrowserList::GetLastActive()->window(); 1392 BrowserWindow* tabbed_window = BrowserList::GetLastActive()->window();
1111 1393
1112 // Create 4 panels in the following screen layout: 1394 // Create 4 panels in the following screen layout:
1113 // P3 P2 P1 P0 1395 // P3 P2 P1 P0
1114 const int kNumPanels = 4; 1396 const int kNumPanels = 4;
1115 std::string panel_name_base("PanelTest"); 1397 for (int i = 0; i < kNumPanels; ++i)
1116 for (int i = 0; i < kNumPanels; ++i) { 1398 CreatePanelWithBounds(GetPanelName(i), gfx::Rect(0, 0, 100, 100));
1117 CreatePanelWithBounds(panel_name_base + base::IntToString(i),
1118 gfx::Rect(0, 0, 100, 100));
1119 }
1120 const std::vector<Panel*>& panels = PanelManager::GetInstance()->panels(); 1399 const std::vector<Panel*>& panels = PanelManager::GetInstance()->panels();
1121 1400
1122 std::vector<bool> expected_active_states; 1401 std::vector<bool> expected_active_states;
1123 std::vector<bool> last_active_states; 1402 std::vector<bool> last_active_states;
1124 1403
1125 // The last created panel, P3, should be active. 1404 // The last created panel, P3, should be active.
1126 expected_active_states = ProduceExpectedActiveStates(3); 1405 expected_active_states = ProduceExpectedActiveStates(3);
1127 EXPECT_EQ(expected_active_states, GetAllPanelActiveStates()); 1406 EXPECT_EQ(expected_active_states, GetAllPanelActiveStates());
1128 EXPECT_FALSE(tabbed_window->IsActive()); 1407 EXPECT_FALSE(tabbed_window->IsActive());
1129 1408
(...skipping 829 matching lines...) Expand 10 before | Expand all | Expand 10 after
1959 // position when tall panel brings up its titlebar. 2238 // position when tall panel brings up its titlebar.
1960 CloseWindowAndWait(panel1->browser()); 2239 CloseWindowAndWait(panel1->browser());
1961 EXPECT_EQ(balloon_bottom_after_tall_panel_titlebar_up, 2240 EXPECT_EQ(balloon_bottom_after_tall_panel_titlebar_up,
1962 GetBalloonBottomPosition(balloon)); 2241 GetBalloonBottomPosition(balloon));
1963 2242
1964 // Closing the remaining tall panel should move the notification balloon back 2243 // Closing the remaining tall panel should move the notification balloon back
1965 // to its original position. 2244 // to its original position.
1966 CloseWindowAndWait(panel2->browser()); 2245 CloseWindowAndWait(panel2->browser());
1967 EXPECT_EQ(original_balloon_bottom, GetBalloonBottomPosition(balloon)); 2246 EXPECT_EQ(original_balloon_bottom, GetBalloonBottomPosition(balloon));
1968 } 2247 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698