| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |