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

Side by Side Diff: chrome/browser/ui/cocoa/task_manager_mac_browsertest.mm

Issue 2197483003: Move the Mac Task Manager to the new backend code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: mark Created 4 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #import <Cocoa/Cocoa.h>
5 #include <stddef.h> 6 #include <stddef.h>
6 7
7 #include "base/macros.h" 8 #include "base/macros.h"
8 #include "base/strings/pattern.h" 9 #include "base/strings/pattern.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/sessions/session_tab_helper.h" 11 #include "chrome/browser/sessions/session_tab_helper.h"
12 #include "chrome/browser/task_management/task_manager_browsertest_util.h" 12 #include "chrome/browser/task_management/task_manager_browsertest_util.h"
13 #include "chrome/browser/task_management/task_manager_tester.h" 13 #include "chrome/browser/task_management/task_manager_tester.h"
14 #include "chrome/browser/ui/browser.h"
15 #include "chrome/browser/ui/browser_commands.h" 14 #include "chrome/browser/ui/browser_commands.h"
16 #include "chrome/browser/ui/browser_dialogs.h" 15 #include "chrome/browser/ui/browser_dialogs.h"
17 #include "chrome/browser/ui/browser_tabstrip.h" 16 #include "chrome/browser/ui/browser_tabstrip.h"
17 #include "chrome/browser/ui/cocoa/task_manager_mac.h"
18 #include "chrome/browser/ui/tab_contents/tab_contents_iterator.h" 18 #include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
19 #include "chrome/browser/ui/tabs/tab_strip_model.h"
20 #include "chrome/browser/ui/task_manager/task_manager_columns.h" 19 #include "chrome/browser/ui/task_manager/task_manager_columns.h"
21 #include "chrome/browser/ui/task_manager/task_manager_table_model.h" 20 #include "chrome/browser/ui/task_manager/task_manager_table_model.h"
22 #include "chrome/browser/ui/views/new_task_manager_view.h"
23 #include "chrome/common/pref_names.h" 21 #include "chrome/common/pref_names.h"
24 #include "chrome/test/base/in_process_browser_test.h" 22 #include "chrome/test/base/in_process_browser_test.h"
25 #include "chrome/test/base/ui_test_utils.h" 23 #include "chrome/test/base/ui_test_utils.h"
26 #include "components/prefs/pref_service.h" 24 #include "components/prefs/pref_service.h"
27 #include "components/prefs/scoped_user_pref_update.h" 25 #include "components/prefs/scoped_user_pref_update.h"
28 #include "content/public/browser/web_contents.h" 26 #include "content/public/browser/web_contents.h"
29 #include "content/public/browser/web_contents_delegate.h" 27 #include "content/public/browser/web_contents_delegate.h"
30 #include "content/public/test/browser_test_utils.h" 28 #include "content/public/test/browser_test_utils.h"
31 #include "content/public/test/test_utils.h" 29 #include "content/public/test/test_utils.h"
32 #include "net/dns/mock_host_resolver.h" 30 #include "net/dns/mock_host_resolver.h"
33 #include "net/test/embedded_test_server/embedded_test_server.h" 31 #include "net/test/embedded_test_server/embedded_test_server.h"
34 #include "ui/views/controls/table/table_view.h" 32 #include "testing/gtest_mac.h"
35 33
36 namespace task_management { 34 namespace task_management {
37 35
38 using browsertest_util::WaitForTaskManagerRows; 36 using browsertest_util::WaitForTaskManagerRows;
39 37
40 class NewTaskManagerViewTest : public InProcessBrowserTest { 38 class TaskManagerMacTest : public InProcessBrowserTest {
41 public: 39 public:
42 NewTaskManagerViewTest() {} 40 TaskManagerMacTest() {}
43 ~NewTaskManagerViewTest() override {} 41 ~TaskManagerMacTest() override {}
44 42
45 void SetUpOnMainThread() override { 43 void SetUpOnMainThread() override {
44 ASSERT_FALSE(GetTaskManagerMac());
46 host_resolver()->AddRule("*", "127.0.0.1"); 45 host_resolver()->AddRule("*", "127.0.0.1");
47 ASSERT_TRUE(embedded_test_server()->Start()); 46 ASSERT_TRUE(embedded_test_server()->Start());
48 } 47 }
49 48
50 void TearDownOnMainThread() override { 49 void TearDownOnMainThread() override {
51 // Make sure the task manager is closed (if any). 50 // Make sure the task manager is closed (if any).
52 chrome::HideTaskManager(); 51 chrome::HideTaskManager();
53 content::RunAllPendingInMessageLoop(); 52 ASSERT_FALSE(GetTaskManagerMac());
54 ASSERT_FALSE(GetView());
55 53
56 InProcessBrowserTest::TearDownOnMainThread(); 54 InProcessBrowserTest::TearDownOnMainThread();
57 } 55 }
58 56
59 NewTaskManagerView* GetView() const { 57 TaskManagerMac* GetTaskManagerMac() const {
60 return NewTaskManagerView::GetInstanceForTests(); 58 return TaskManagerMac::GetInstanceForTests();
61 } 59 }
62 60
63 views::TableView* GetTable() const { 61 NSTableView* GetTable() const {
64 return GetView() ? GetView()->tab_table_ : nullptr; 62 return GetTaskManagerMac() ? [GetTaskManagerMac()->CocoaControllerForTests()
63 tableViewForTesting]
64 : nullptr;
65 } 65 }
66 66
67 void PressKillButton() { GetView()->Accept(); } 67 int TableFirstSelectedRow() const {
68 return [[GetTable() selectedRowIndexes] firstIndex];
69 }
70
71 void PressKillButton() {
72 [[GetTaskManagerMac()->CocoaControllerForTests() endProcessButtonForTesting]
73 performClick:nil];
74 }
68 75
69 void ClearStoredColumnSettings() const { 76 void ClearStoredColumnSettings() const {
70 PrefService* local_state = g_browser_process->local_state(); 77 PrefService* local_state = g_browser_process->local_state();
71 if (!local_state) 78 if (!local_state)
72 FAIL(); 79 FAIL();
73 80
74 DictionaryPrefUpdate dict_update(local_state, 81 DictionaryPrefUpdate dict_update(local_state,
75 prefs::kTaskManagerColumnVisibility); 82 prefs::kTaskManagerColumnVisibility);
76 dict_update->Clear(); 83 dict_update->Clear();
77 } 84 }
78 85
79 void ToggleColumnVisibility(NewTaskManagerView* view, int col_id) { 86 void ToggleColumnVisibility(TaskManagerMac* task_manager, int col_id) {
80 DCHECK(view); 87 DCHECK(task_manager);
81 view->table_model_->ToggleColumnVisibility(col_id); 88 task_manager->GetTableModelForTests()->ToggleColumnVisibility(col_id);
82 } 89 }
83 90
84 // Looks up a tab based on its tab ID. 91 // Looks up a tab based on its tab ID.
85 content::WebContents* FindWebContentsByTabId(SessionID::id_type tab_id) { 92 content::WebContents* FindWebContentsByTabId(SessionID::id_type tab_id) {
86 for (TabContentsIterator it; !it.done(); it.Next()) { 93 for (TabContentsIterator it; !it.done(); it.Next()) {
87 if (SessionTabHelper::IdForTab(*it) == tab_id) 94 if (SessionTabHelper::IdForTab(*it) == tab_id)
88 return *it; 95 return *it;
89 } 96 }
90 return nullptr; 97 return nullptr;
91 } 98 }
92 99
93 // Returns the current TaskManagerTableModel index for a particular tab. Don't 100 // Returns the current TaskManagerTableModel index for a particular tab. Don't
94 // cache this value, since it can change whenever the message loop runs. 101 // cache this value, since it can change whenever the message loop runs.
95 int FindRowForTab(content::WebContents* tab) { 102 int FindRowForTab(content::WebContents* tab) {
96 int32_t tab_id = SessionTabHelper::IdForTab(tab); 103 int32_t tab_id = SessionTabHelper::IdForTab(tab);
97 std::unique_ptr<TaskManagerTester> tester = 104 std::unique_ptr<TaskManagerTester> tester =
98 TaskManagerTester::Create(base::Closure()); 105 TaskManagerTester::Create(base::Closure());
99 for (int i = 0; i < tester->GetRowCount(); ++i) { 106 for (int i = 0; i < tester->GetRowCount(); ++i) {
100 if (tester->GetTabId(i) == tab_id) 107 if (tester->GetTabId(i) == tab_id)
101 return i; 108 return i;
102 } 109 }
103 return -1; 110 return -1;
104 } 111 }
105 112
106 private: 113 private:
107 DISALLOW_COPY_AND_ASSIGN(NewTaskManagerViewTest); 114 DISALLOW_COPY_AND_ASSIGN(TaskManagerMacTest);
108 }; 115 };
109 116
110 // Tests that all defined columns have a corresponding string IDs for keying 117 // Tests that all defined columns have a corresponding string IDs for keying
111 // into the user preferences dictionary. 118 // into the user preferences dictionary.
112 IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, AllColumnsHaveStringIds) { 119 IN_PROC_BROWSER_TEST_F(TaskManagerMacTest, AllColumnsHaveStringIds) {
113 for (size_t i = 0; i < kColumnsSize; ++i) 120 for (size_t i = 0; i < kColumnsSize; ++i)
114 EXPECT_NE("", GetColumnIdAsString(kColumns[i].id)); 121 EXPECT_NE("", GetColumnIdAsString(kColumns[i].id));
115 } 122 }
116 123
117 // In the case of no settings stored in the user preferences local store, test 124 // In the case of no settings stored in the user preferences local store, test
118 // that the task manager table starts with the default columns visibility as 125 // that the task manager table starts with the default columns visibility as
119 // stored in |kColumns|. 126 // stored in |kColumns|.
120 IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, TableStartsWithDefaultColumns) { 127 IN_PROC_BROWSER_TEST_F(TaskManagerMacTest, TableStartsWithDefaultColumns) {
121 ASSERT_NO_FATAL_FAILURE(ClearStoredColumnSettings()); 128 ASSERT_NO_FATAL_FAILURE(ClearStoredColumnSettings());
122 129
123 chrome::ShowTaskManager(browser()); 130 chrome::ShowTaskManager(browser());
124 views::TableView* table = GetTable(); 131 NSTableView* table = GetTable();
125 ASSERT_TRUE(table); 132 ASSERT_TRUE(table);
126 133
127 EXPECT_FALSE(table->is_sorted()); 134 EXPECT_EQ(0u, [[table sortDescriptors] count]);
135 NSArray* tableColumns = [table tableColumns];
128 for (size_t i = 0; i < kColumnsSize; ++i) { 136 for (size_t i = 0; i < kColumnsSize; ++i) {
137 EXPECT_EQ(kColumns[i].id,
138 [[[tableColumns objectAtIndex:i] identifier] intValue]);
129 EXPECT_EQ(kColumns[i].default_visibility, 139 EXPECT_EQ(kColumns[i].default_visibility,
130 table->IsColumnVisible(kColumns[i].id)); 140 ![[tableColumns objectAtIndex:i] isHidden]);
131 } 141 }
132 } 142 }
133 143
134 // Tests that changing columns visibility and sort order will be stored upon 144 // Tests that changing columns visibility and sort order will be stored upon
135 // closing the task manager view and restored when re-opened. 145 // closing the task manager view and restored when re-opened.
136 IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, ColumnsSettingsAreRestored) { 146 IN_PROC_BROWSER_TEST_F(TaskManagerMacTest, ColumnsSettingsAreRestored) {
137 ASSERT_NO_FATAL_FAILURE(ClearStoredColumnSettings()); 147 ASSERT_NO_FATAL_FAILURE(ClearStoredColumnSettings());
138 148
139 chrome::ShowTaskManager(browser()); 149 chrome::ShowTaskManager(browser());
140 NewTaskManagerView* view = GetView(); 150 TaskManagerMac* task_manager = GetTaskManagerMac();
141 ASSERT_TRUE(view); 151 ASSERT_TRUE(task_manager);
142 views::TableView* table = GetTable(); 152 NSTableView* table = GetTable();
143 ASSERT_TRUE(table); 153 ASSERT_TRUE(table);
144 154
145 // Toggle the visibility of all columns. 155 // Toggle the visibility of all columns.
146 EXPECT_FALSE(table->is_sorted()); 156 EXPECT_EQ(0u, [[table sortDescriptors] count]);
157 NSArray* tableColumns = [table tableColumns];
147 for (size_t i = 0; i < kColumnsSize; ++i) { 158 for (size_t i = 0; i < kColumnsSize; ++i) {
159 EXPECT_EQ(kColumns[i].id,
160 [[[tableColumns objectAtIndex:i] identifier] intValue]);
148 EXPECT_EQ(kColumns[i].default_visibility, 161 EXPECT_EQ(kColumns[i].default_visibility,
149 table->IsColumnVisible(kColumns[i].id)); 162 ![[tableColumns objectAtIndex:i] isHidden]);
150 ToggleColumnVisibility(view, kColumns[i].id); 163 ToggleColumnVisibility(task_manager, kColumns[i].id);
151 } 164 }
152 165
153 // Sort by the first visible and initially ascending sortable column. 166 // Sort by the first visible and initially ascending sortable column. It would
167 // be nice to fake a click with -performClick: but that doesn't work (see
168 // http://www.cocoabuilder.com/archive/cocoa/177610-programmatically-click-col umn-header-in-nstableview.html).
154 bool is_sorted = false; 169 bool is_sorted = false;
155 int sorted_col_id = -1; 170 int sorted_col_id = -1;
156 for (size_t i = 0; i < table->visible_columns().size(); ++i) { 171 for (NSTableColumn* column in tableColumns) {
157 const ui::TableColumn& column = table->visible_columns()[i].column; 172 if ([column isHidden])
158 if (column.sortable && column.initial_sort_is_ascending) { 173 continue;
159 // Toggle the sort twice for a descending sort. 174 if ([column sortDescriptorPrototype].ascending) {
160 table->ToggleSortOrder(static_cast<int>(i)); 175 // Toggle the sort for a descending sort.
161 table->ToggleSortOrder(static_cast<int>(i)); 176 NSSortDescriptor* newSortDescriptor =
177 [[column sortDescriptorPrototype] reversedSortDescriptor];
178 [table setSortDescriptors:@[ newSortDescriptor ]];
162 is_sorted = true; 179 is_sorted = true;
163 sorted_col_id = column.id; 180 sorted_col_id = [[column identifier] intValue];
164 break; 181 break;
165 } 182 }
166 } 183 }
167 184
168 if (is_sorted) { 185 NSArray* expectedSortDescriptors = [table sortDescriptors];
169 EXPECT_TRUE(table->is_sorted()); 186 EXPECT_EQ(is_sorted, [expectedSortDescriptors count] > 0);
170 EXPECT_FALSE(table->sort_descriptors().front().ascending);
171 EXPECT_EQ(table->sort_descriptors().front().column_id, sorted_col_id);
172 }
173 187
174 // Close the task manager view and re-open. Expect the inverse of the default 188 // Close the task manager view and re-open. Expect the inverse of the default
175 // visibility, and the last sort order. 189 // visibility, and the last sort order.
176 chrome::HideTaskManager(); 190 chrome::HideTaskManager();
177 content::RunAllPendingInMessageLoop(); 191 ASSERT_FALSE(GetTaskManagerMac());
178 ASSERT_FALSE(GetView());
179 chrome::ShowTaskManager(browser()); 192 chrome::ShowTaskManager(browser());
180 view = GetView(); 193 task_manager = GetTaskManagerMac();
181 ASSERT_TRUE(view); 194 ASSERT_TRUE(task_manager);
182 table = GetTable(); 195 table = GetTable();
183 ASSERT_TRUE(table); 196 ASSERT_TRUE(table);
184 197
185 if (is_sorted) { 198 if (is_sorted) {
186 EXPECT_TRUE(table->is_sorted()); 199 EXPECT_NSEQ(expectedSortDescriptors, [table sortDescriptors]);
187 EXPECT_FALSE(table->sort_descriptors().front().ascending);
188 EXPECT_EQ(table->sort_descriptors().front().column_id, sorted_col_id);
189 }
190 for (size_t i = 0; i < kColumnsSize; ++i) {
191 EXPECT_EQ(!kColumns[i].default_visibility,
192 table->IsColumnVisible(kColumns[i].id));
193 } 200 }
194 } 201 }
195 202
196 IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, InitialSelection) { 203 IN_PROC_BROWSER_TEST_F(TaskManagerMacTest, SelectionConsistency) {
197 // Navigate the first tab. 204 ASSERT_NO_FATAL_FAILURE(ClearStoredColumnSettings());
198 ui_test_utils::NavigateToURL(
199 browser(), embedded_test_server()->GetURL("a.com", "/title2.html"));
200 205
201 ui_test_utils::NavigateToURLWithDisposition(
202 browser(), embedded_test_server()->GetURL("b.com", "/title3.html"),
203 NEW_FOREGROUND_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
204
205 // When the task manager is initially shown, the row for the active tab should
206 // be selected.
207 chrome::ShowTaskManager(browser());
208
209 EXPECT_EQ(1, GetTable()->SelectedRowCount());
210 EXPECT_EQ(GetTable()->FirstSelectedRow(),
211 FindRowForTab(browser()->tab_strip_model()->GetWebContentsAt(1)));
212
213 // Activate tab 0. The selection should not change.
214 browser()->tab_strip_model()->ActivateTabAt(0, true);
215 EXPECT_EQ(1, GetTable()->SelectedRowCount());
216 EXPECT_EQ(GetTable()->FirstSelectedRow(),
217 FindRowForTab(browser()->tab_strip_model()->GetWebContentsAt(1)));
218
219 // If the user re-triggers chrome::ShowTaskManager (e.g. via shift-esc), this
220 // should set the TaskManager selection to the active tab.
221 chrome::ShowTaskManager(browser());
222
223 EXPECT_EQ(1, GetTable()->SelectedRowCount());
224 EXPECT_EQ(GetTable()->FirstSelectedRow(),
225 FindRowForTab(browser()->tab_strip_model()->GetWebContentsAt(0)));
226 }
227
228 IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, SelectionConsistency) {
229 chrome::ShowTaskManager(browser()); 206 chrome::ShowTaskManager(browser());
230 207
231 // Set up a total of three tabs in different processes. 208 // Set up a total of three tabs in different processes.
232 ui_test_utils::NavigateToURL( 209 ui_test_utils::NavigateToURL(
233 browser(), embedded_test_server()->GetURL("a.com", "/title2.html")); 210 browser(), embedded_test_server()->GetURL("a.com", "/title2.html"));
234 ui_test_utils::NavigateToURLWithDisposition( 211 ui_test_utils::NavigateToURLWithDisposition(
235 browser(), embedded_test_server()->GetURL("b.com", "/title2.html"), 212 browser(), embedded_test_server()->GetURL("b.com", "/title2.html"),
236 NEW_FOREGROUND_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 213 NEW_FOREGROUND_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
237 ui_test_utils::NavigateToURLWithDisposition( 214 ui_test_utils::NavigateToURLWithDisposition(
238 browser(), embedded_test_server()->GetURL("c.com", "/title2.html"), 215 browser(), embedded_test_server()->GetURL("c.com", "/title2.html"),
(...skipping 14 matching lines...) Expand all
253 // Filter based on our title. 230 // Filter based on our title.
254 if (!base::MatchPattern(tester->GetRowTitle(i), pattern)) 231 if (!base::MatchPattern(tester->GetRowTitle(i), pattern))
255 continue; 232 continue;
256 content::WebContents* tab = FindWebContentsByTabId(tester->GetTabId(i)); 233 content::WebContents* tab = FindWebContentsByTabId(tester->GetTabId(i));
257 EXPECT_NE(nullptr, tab); 234 EXPECT_NE(nullptr, tab);
258 tabs.push_back(tab); 235 tabs.push_back(tab);
259 } 236 }
260 EXPECT_EQ(3U, tabs.size()); 237 EXPECT_EQ(3U, tabs.size());
261 238
262 // Select the middle row, and store its tab id. 239 // Select the middle row, and store its tab id.
263 GetTable()->Select(FindRowForTab(tabs[1])); 240 [GetTable()
264 EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1])); 241 selectRowIndexes:[NSIndexSet indexSetWithIndex:FindRowForTab(tabs[1])]
242 byExtendingSelection:NO];
243 EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
244 EXPECT_EQ(1, [GetTable() numberOfSelectedRows]);
265 245
266 // Add 3 rows above the selection. The selected tab should not change. 246 // Add 3 rows above the selection. The selected tab should not change.
267 for (int i = 0; i < 3; ++i) { 247 for (int i = 0; i < 3; ++i) {
268 ASSERT_TRUE(content::ExecuteScript(tabs[0], "window.open('title3.html');")); 248 ASSERT_TRUE(content::ExecuteScript(tabs[0], "window.open('title3.html');"));
269 EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1])); 249 EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
270 } 250 }
271 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 3), pattern)); 251 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 3), pattern));
272 EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1])); 252 EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
253 EXPECT_EQ(1, [GetTable() numberOfSelectedRows]);
273 254
274 // Add 2 rows below the selection. The selected tab should not change. 255 // Add 2 rows below the selection. The selected tab should not change.
275 for (int i = 0; i < 2; ++i) { 256 for (int i = 0; i < 2; ++i) {
276 ASSERT_TRUE(content::ExecuteScript(tabs[2], "window.open('title3.html');")); 257 ASSERT_TRUE(content::ExecuteScript(tabs[2], "window.open('title3.html');"));
277 EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1])); 258 EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
278 } 259 }
279 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 2), pattern)); 260 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 2), pattern));
280 EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1])); 261 EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
262 EXPECT_EQ(1, [GetTable() numberOfSelectedRows]);
281 263
282 // Add a new row in the same process as the selection. The selected tab should 264 // Add a new row in the same process as the selection. The selected tab should
283 // not change. 265 // not change.
284 ASSERT_TRUE(content::ExecuteScript(tabs[1], "window.open('title3.html');")); 266 ASSERT_TRUE(content::ExecuteScript(tabs[1], "window.open('title3.html');"));
285 EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1])); 267 EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
286 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 1), pattern)); 268 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 1), pattern));
287 EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1])); 269 EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
288 EXPECT_EQ(1, GetTable()->SelectedRowCount()); 270 EXPECT_EQ(2, [GetTable() numberOfSelectedRows]);
289 271
290 // Press the button, which kills the process of the selected row. 272 // Press the button, which kills the process of the selected row.
291 PressKillButton(); 273 PressKillButton();
292 274
293 // Two rows should disappear. 275 // Two rows should disappear.
294 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows -= 2), pattern)); 276 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows -= 2), pattern));
295 277
296 // A later row should now be selected. The selection should be after the 4 278 // No row should now be selected.
297 // rows sharing the tabs[0] process, and it should be at or before 279 ASSERT_EQ(-1, TableFirstSelectedRow());
298 // the tabs[2] row.
299 ASSERT_LT(FindRowForTab(tabs[0]) + 3, GetTable()->FirstSelectedRow());
300 ASSERT_LE(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[2]));
301 280
302 // Now select tabs[2]. 281 // Now select tabs[2].
303 GetTable()->Select(FindRowForTab(tabs[2])); 282 [GetTable()
283 selectRowIndexes:[NSIndexSet indexSetWithIndex:FindRowForTab(tabs[2])]
284 byExtendingSelection:NO];
304 285
305 // Focus and reload one of the sad tabs. It should reappear in the TM. The 286 // Focus and reload one of the sad tabs. It should reappear in the TM. The
306 // other sad tab should not reappear. 287 // other sad tab should not reappear.
307 tabs[1]->GetDelegate()->ActivateContents(tabs[1]); 288 tabs[1]->GetDelegate()->ActivateContents(tabs[1]);
308 chrome::Reload(browser(), CURRENT_TAB); 289 chrome::Reload(browser(), CURRENT_TAB);
309 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 1), pattern)); 290 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 1), pattern));
310 291
311 // tabs[2] should still be selected. 292 // tabs[2] should still be selected.
312 EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[2])); 293 EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[2]));
313 294
314 // Close tabs[0]. The selection should not change. 295 // Close tabs[0]. The selection should not change.
315 chrome::CloseWebContents(browser(), tabs[0], false); 296 chrome::CloseWebContents(browser(), tabs[0], false);
316 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows -= 1), pattern)); 297 ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows -= 1), pattern));
317 EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[2])); 298 EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[2]));
318 } 299 }
319 300
320 } // namespace task_management 301 } // namespace task_management
321
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/task_manager_mac.mm ('k') | chrome/browser/ui/cocoa/task_manager_mac_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698