Chromium Code Reviews| 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" | |
| 6 #include "chrome/browser/net/url_request_mock_util.h" | 7 #include "chrome/browser/net/url_request_mock_util.h" |
| 7 #include "chrome/browser/prefs/pref_service.h" | 8 #include "chrome/browser/prefs/pref_service.h" |
| 8 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" |
| 9 #include "chrome/browser/ui/browser_list.h" | 10 #include "chrome/browser/ui/browser_list.h" |
| 10 #include "chrome/browser/ui/browser_window.h" | 11 #include "chrome/browser/ui/browser_window.h" |
| 11 #include "chrome/browser/ui/find_bar/find_bar.h" | 12 #include "chrome/browser/ui/find_bar/find_bar.h" |
| 12 #include "chrome/browser/ui/find_bar/find_bar_controller.h" | 13 #include "chrome/browser/ui/find_bar/find_bar_controller.h" |
| 13 #include "chrome/browser/ui/panels/base_panel_browser_test.h" | 14 #include "chrome/browser/ui/panels/base_panel_browser_test.h" |
| 14 #include "chrome/browser/ui/panels/native_panel.h" | 15 #include "chrome/browser/ui/panels/native_panel.h" |
| 15 #include "chrome/browser/ui/panels/panel.h" | 16 #include "chrome/browser/ui/panels/panel.h" |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 170 } | 171 } |
| 171 | 172 |
| 172 std::vector<Panel::ExpansionState> GetAllPanelExpansionStates() { | 173 std::vector<Panel::ExpansionState> GetAllPanelExpansionStates() { |
| 173 std::vector<Panel*> panels = PanelManager::GetInstance()->panels(); | 174 std::vector<Panel*> panels = PanelManager::GetInstance()->panels(); |
| 174 std::vector<Panel::ExpansionState> expansion_states; | 175 std::vector<Panel::ExpansionState> expansion_states; |
| 175 for (size_t i = 0; i < panels.size(); i++) | 176 for (size_t i = 0; i < panels.size(); i++) |
| 176 expansion_states.push_back(panels[i]->expansion_state()); | 177 expansion_states.push_back(panels[i]->expansion_state()); |
| 177 return expansion_states; | 178 return expansion_states; |
| 178 } | 179 } |
| 179 | 180 |
| 181 std::vector<bool> GetAllPanelActiveStates() { | |
| 182 std::vector<Panel*> panels = PanelManager::GetInstance()->panels(); | |
| 183 std::vector<bool> active_states; | |
| 184 for (size_t i = 0; i < panels.size(); i++) | |
| 185 active_states.push_back(panels[i]->IsActive()); | |
| 186 return active_states; | |
| 187 } | |
| 188 | |
| 189 std::vector<bool> ProduceExpectedActiveStates( | |
| 190 int expected_active_panel_index) { | |
| 191 std::vector<Panel*> panels = PanelManager::GetInstance()->panels(); | |
| 192 std::vector<bool> active_states; | |
| 193 for (int i = 0; i < static_cast<int>(panels.size()); i++) | |
| 194 active_states.push_back(i == expected_active_panel_index); | |
| 195 return active_states; | |
| 196 } | |
| 197 | |
| 198 void WaitForPanelActiveStates(const std::vector<bool>& old_states, | |
| 199 const std::vector<bool>& new_states) { | |
| 200 DCHECK(old_states.size() == new_states.size()); | |
| 201 std::vector<Panel*> panels = PanelManager::GetInstance()->panels(); | |
| 202 for (size_t i = 0; i < old_states.size(); i++) { | |
| 203 if (old_states[i] != new_states[i]){ | |
| 204 WaitForPanelActiveState( | |
| 205 panels[i], new_states[i] ? SHOW_AS_ACTIVE : SHOW_AS_INACTIVE); | |
| 206 } | |
| 207 } | |
| 208 } | |
| 209 | |
| 180 void TestDragging(int delta_x, | 210 void TestDragging(int delta_x, |
| 181 int delta_y, | 211 int delta_y, |
| 182 size_t drag_index, | 212 size_t drag_index, |
| 183 std::vector<int> expected_delta_x_after_drag, | 213 std::vector<int> expected_delta_x_after_drag, |
| 184 std::vector<int> expected_delta_x_after_finish, | 214 std::vector<int> expected_delta_x_after_finish, |
| 185 std::vector<gfx::Rect> expected_bounds_after_cancel, | 215 std::vector<gfx::Rect> expected_bounds_after_cancel, |
| 186 int drag_action) { | 216 int drag_action) { |
| 187 std::vector<Panel*> panels = PanelManager::GetInstance()->panels(); | 217 std::vector<Panel*> panels = PanelManager::GetInstance()->panels(); |
| 188 | 218 |
| 189 // These are bounds at the beginning of this test. This would be different | 219 // These are bounds at the beginning of this test. This would be different |
| (...skipping 819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1009 // Test that the attention is cleared when panel gets focus. | 1039 // Test that the attention is cleared when panel gets focus. |
| 1010 panel->Activate(); | 1040 panel->Activate(); |
| 1011 MessageLoop::current()->RunAllPending(); | 1041 MessageLoop::current()->RunAllPending(); |
| 1012 WaitForPanelActiveState(panel, SHOW_AS_ACTIVE); | 1042 WaitForPanelActiveState(panel, SHOW_AS_ACTIVE); |
| 1013 EXPECT_FALSE(panel->IsDrawingAttention()); | 1043 EXPECT_FALSE(panel->IsDrawingAttention()); |
| 1014 EXPECT_FALSE(native_panel_testing->VerifyDrawingAttention()); | 1044 EXPECT_FALSE(native_panel_testing->VerifyDrawingAttention()); |
| 1015 | 1045 |
| 1016 panel->Close(); | 1046 panel->Close(); |
| 1017 } | 1047 } |
| 1018 | 1048 |
| 1049 // TODO(jianli): To be enabled for other platforms. | |
| 1050 #if defined(OS_WIN) | |
| 1051 #define MAYBE_ActivateDeactivateBasic ActivateDeactivateBasic | |
| 1052 #else | |
| 1053 #define MAYBE_ActivateDeactivateBasic DISABLED_ActivateDeactivateBasic | |
| 1054 #endif | |
| 1055 IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_ActivateDeactivateBasic) { | |
| 1056 // Create an active panel. | |
| 1057 Panel* panel = CreatePanel("PanelTest"); | |
| 1058 scoped_ptr<NativePanelTesting> native_panel_testing( | |
| 1059 NativePanelTesting::Create(panel->native_panel())); | |
| 1060 EXPECT_TRUE(panel->IsActive()); | |
| 1061 EXPECT_TRUE(native_panel_testing->VerifyTitlebarPaintedAsActive(true)); | |
| 1062 | |
| 1063 // Deactivate the panel. | |
| 1064 panel->Deactivate(); | |
| 1065 WaitForPanelActiveState(panel, SHOW_AS_INACTIVE); | |
| 1066 EXPECT_FALSE(panel->IsActive()); | |
| 1067 EXPECT_TRUE(native_panel_testing->VerifyTitlebarPaintedAsActive(false)); | |
| 1068 | |
| 1069 // Reactivate the panel. | |
| 1070 panel->Activate(); | |
| 1071 WaitForPanelActiveState(panel, SHOW_AS_ACTIVE); | |
| 1072 EXPECT_TRUE(panel->IsActive()); | |
| 1073 EXPECT_TRUE(native_panel_testing->VerifyTitlebarPaintedAsActive(true)); | |
| 1074 } | |
| 1075 | |
| 1076 // TODO(jianli): To be enabled for other platforms. | |
| 1077 #if defined(OS_WIN) | |
| 1078 #define MAYBE_ActivateDeactivateMultiple ActivateDeactivateMultiple | |
| 1079 #else | |
| 1080 #define MAYBE_ActivateDeactivateMultiple DISABLED_ActivateDeactivateMultiple | |
| 1081 #endif | |
| 1082 IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_ActivateDeactivateMultiple) { | |
| 1083 BrowserWindow* tabbed_window = BrowserList::GetLastActive()->window(); | |
| 1084 | |
| 1085 // Create 4 panels in the following screen layout: | |
| 1086 // P3 P2 P1 P0 | |
| 1087 const int kNumPanels = 4; | |
| 1088 std::string panel_name_base("PanelTets"); | |
|
jennb
2011/10/07 22:08:30
typo
| |
| 1089 for (int i = 0; i < kNumPanels; ++i) { | |
| 1090 CreatePanelWithBounds(panel_name_base + base::IntToString(i), | |
|
jennb
2011/10/07 22:08:30
Does it break if they all have the same name?
jianli
2011/10/07 22:11:38
Nope. But it will make debugging easier.
| |
| 1091 gfx::Rect(0, 0, 100, 100)); | |
| 1092 } | |
| 1093 const std::vector<Panel*>& panels = PanelManager::GetInstance()->panels(); | |
| 1094 | |
| 1095 std::vector<bool> expected_active_states; | |
| 1096 std::vector<bool> last_active_states; | |
| 1097 | |
| 1098 // The last created panel, P3, should be active. | |
| 1099 expected_active_states = ProduceExpectedActiveStates(3); | |
| 1100 EXPECT_EQ(expected_active_states, GetAllPanelActiveStates()); | |
| 1101 EXPECT_FALSE(tabbed_window->IsActive()); | |
| 1102 | |
| 1103 // Activating P1 should cause P3 to lose focus. | |
| 1104 panels[1]->Activate(); | |
| 1105 last_active_states = expected_active_states; | |
| 1106 expected_active_states = ProduceExpectedActiveStates(1); | |
| 1107 WaitForPanelActiveStates(last_active_states, expected_active_states); | |
| 1108 EXPECT_EQ(expected_active_states, GetAllPanelActiveStates()); | |
| 1109 | |
| 1110 // Minimizing inactive panel P2 should not affect other panels' active states. | |
| 1111 panels[2]->SetExpansionState(Panel::MINIMIZED); | |
| 1112 EXPECT_EQ(expected_active_states, GetAllPanelActiveStates()); | |
| 1113 EXPECT_FALSE(tabbed_window->IsActive()); | |
| 1114 | |
| 1115 // Minimizing active panel P1 should activate last active panel P3. | |
| 1116 panels[1]->SetExpansionState(Panel::MINIMIZED); | |
| 1117 last_active_states = expected_active_states; | |
| 1118 expected_active_states = ProduceExpectedActiveStates(3); | |
| 1119 WaitForPanelActiveStates(last_active_states, expected_active_states); | |
| 1120 EXPECT_EQ(expected_active_states, GetAllPanelActiveStates()); | |
| 1121 EXPECT_FALSE(tabbed_window->IsActive()); | |
| 1122 | |
| 1123 // Minimizing active panel P3 should activate last active panel P0. | |
| 1124 panels[3]->SetExpansionState(Panel::MINIMIZED); | |
| 1125 last_active_states = expected_active_states; | |
| 1126 expected_active_states = ProduceExpectedActiveStates(0); | |
| 1127 WaitForPanelActiveStates(last_active_states, expected_active_states); | |
| 1128 EXPECT_EQ(expected_active_states, GetAllPanelActiveStates()); | |
| 1129 EXPECT_FALSE(tabbed_window->IsActive()); | |
| 1130 | |
| 1131 // Minimizing active panel P0 should cause activate lat active tabbed window. | |
|
jennb
2011/10/07 22:08:30
typo
| |
| 1132 panels[0]->SetExpansionState(Panel::MINIMIZED); | |
| 1133 last_active_states = expected_active_states; | |
| 1134 expected_active_states = ProduceExpectedActiveStates(-1); // -1 means none. | |
| 1135 WaitForPanelActiveStates(last_active_states, expected_active_states); | |
| 1136 EXPECT_EQ(expected_active_states, GetAllPanelActiveStates()); | |
| 1137 EXPECT_TRUE(tabbed_window->IsActive()); | |
| 1138 } | |
| 1139 | |
| 1019 class PanelDownloadTest : public PanelBrowserTest { | 1140 class PanelDownloadTest : public PanelBrowserTest { |
| 1020 public: | 1141 public: |
| 1021 PanelDownloadTest() : PanelBrowserTest() { } | 1142 PanelDownloadTest() : PanelBrowserTest() { } |
| 1022 | 1143 |
| 1023 // Creates a temporary directory for downloads that is auto-deleted | 1144 // Creates a temporary directory for downloads that is auto-deleted |
| 1024 // on destruction. | 1145 // on destruction. |
| 1025 bool CreateDownloadDirectory(Profile* profile) { | 1146 bool CreateDownloadDirectory(Profile* profile) { |
| 1026 bool created = downloads_directory_.CreateUniqueTempDir(); | 1147 bool created = downloads_directory_.CreateUniqueTempDir(); |
| 1027 if (!created) | 1148 if (!created) |
| 1028 return false; | 1149 return false; |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1182 EXPECT_EQ(1, tabbed_browser->tab_count()); | 1303 EXPECT_EQ(1, tabbed_browser->tab_count()); |
| 1183 ASSERT_TRUE(tabbed_browser->window()->IsDownloadShelfVisible()); | 1304 ASSERT_TRUE(tabbed_browser->window()->IsDownloadShelfVisible()); |
| 1184 tabbed_browser->CloseWindow(); | 1305 tabbed_browser->CloseWindow(); |
| 1185 #endif | 1306 #endif |
| 1186 | 1307 |
| 1187 EXPECT_EQ(1, panel_browser->tab_count()); | 1308 EXPECT_EQ(1, panel_browser->tab_count()); |
| 1188 ASSERT_FALSE(panel_browser->window()->IsDownloadShelfVisible()); | 1309 ASSERT_FALSE(panel_browser->window()->IsDownloadShelfVisible()); |
| 1189 | 1310 |
| 1190 panel_browser->CloseWindow(); | 1311 panel_browser->CloseWindow(); |
| 1191 } | 1312 } |
| OLD | NEW |