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

Unified 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/task_manager_mac_browsertest.mm
diff --git a/chrome/browser/ui/views/new_task_manager_view_browsertest.cc b/chrome/browser/ui/cocoa/task_manager_mac_browsertest.mm
similarity index 59%
copy from chrome/browser/ui/views/new_task_manager_view_browsertest.cc
copy to chrome/browser/ui/cocoa/task_manager_mac_browsertest.mm
index d5b56b0e4d75f9fd7dec221abf0fdabe174e5c0d..f15f126b2d6706c6d4cfc1384c3081a29de5622b 100644
--- a/chrome/browser/ui/views/new_task_manager_view_browsertest.cc
+++ b/chrome/browser/ui/cocoa/task_manager_mac_browsertest.mm
@@ -2,24 +2,22 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#import <Cocoa/Cocoa.h>
#include <stddef.h>
#include "base/macros.h"
#include "base/strings/pattern.h"
-#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/sessions/session_tab_helper.h"
#include "chrome/browser/task_management/task_manager_browsertest_util.h"
#include "chrome/browser/task_management/task_manager_tester.h"
-#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/browser/ui/browser_tabstrip.h"
+#include "chrome/browser/ui/cocoa/task_manager_mac.h"
#include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/task_manager/task_manager_columns.h"
#include "chrome/browser/ui/task_manager/task_manager_table_model.h"
-#include "chrome/browser/ui/views/new_task_manager_view.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
@@ -31,18 +29,19 @@
#include "content/public/test/test_utils.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
-#include "ui/views/controls/table/table_view.h"
+#include "testing/gtest_mac.h"
namespace task_management {
using browsertest_util::WaitForTaskManagerRows;
-class NewTaskManagerViewTest : public InProcessBrowserTest {
+class TaskManagerMacTest : public InProcessBrowserTest {
public:
- NewTaskManagerViewTest() {}
- ~NewTaskManagerViewTest() override {}
+ TaskManagerMacTest() {}
+ ~TaskManagerMacTest() override {}
void SetUpOnMainThread() override {
+ ASSERT_FALSE(GetTaskManagerMac());
host_resolver()->AddRule("*", "127.0.0.1");
ASSERT_TRUE(embedded_test_server()->Start());
}
@@ -50,21 +49,29 @@ class NewTaskManagerViewTest : public InProcessBrowserTest {
void TearDownOnMainThread() override {
// Make sure the task manager is closed (if any).
chrome::HideTaskManager();
- content::RunAllPendingInMessageLoop();
- ASSERT_FALSE(GetView());
+ ASSERT_FALSE(GetTaskManagerMac());
InProcessBrowserTest::TearDownOnMainThread();
}
- NewTaskManagerView* GetView() const {
- return NewTaskManagerView::GetInstanceForTests();
+ TaskManagerMac* GetTaskManagerMac() const {
+ return TaskManagerMac::GetInstanceForTests();
}
- views::TableView* GetTable() const {
- return GetView() ? GetView()->tab_table_ : nullptr;
+ NSTableView* GetTable() const {
+ return GetTaskManagerMac() ? [GetTaskManagerMac()->CocoaControllerForTests()
+ tableViewForTesting]
+ : nullptr;
}
- void PressKillButton() { GetView()->Accept(); }
+ int TableFirstSelectedRow() const {
+ return [[GetTable() selectedRowIndexes] firstIndex];
+ }
+
+ void PressKillButton() {
+ [[GetTaskManagerMac()->CocoaControllerForTests() endProcessButtonForTesting]
+ performClick:nil];
+ }
void ClearStoredColumnSettings() const {
PrefService* local_state = g_browser_process->local_state();
@@ -76,9 +83,9 @@ class NewTaskManagerViewTest : public InProcessBrowserTest {
dict_update->Clear();
}
- void ToggleColumnVisibility(NewTaskManagerView* view, int col_id) {
- DCHECK(view);
- view->table_model_->ToggleColumnVisibility(col_id);
+ void ToggleColumnVisibility(TaskManagerMac* task_manager, int col_id) {
+ DCHECK(task_manager);
+ task_manager->GetTableModelForTests()->ToggleColumnVisibility(col_id);
}
// Looks up a tab based on its tab ID.
@@ -104,12 +111,12 @@ class NewTaskManagerViewTest : public InProcessBrowserTest {
}
private:
- DISALLOW_COPY_AND_ASSIGN(NewTaskManagerViewTest);
+ DISALLOW_COPY_AND_ASSIGN(TaskManagerMacTest);
};
// Tests that all defined columns have a corresponding string IDs for keying
// into the user preferences dictionary.
-IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, AllColumnsHaveStringIds) {
+IN_PROC_BROWSER_TEST_F(TaskManagerMacTest, AllColumnsHaveStringIds) {
for (size_t i = 0; i < kColumnsSize; ++i)
EXPECT_NE("", GetColumnIdAsString(kColumns[i].id));
}
@@ -117,115 +124,85 @@ IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, AllColumnsHaveStringIds) {
// In the case of no settings stored in the user preferences local store, test
// that the task manager table starts with the default columns visibility as
// stored in |kColumns|.
-IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, TableStartsWithDefaultColumns) {
+IN_PROC_BROWSER_TEST_F(TaskManagerMacTest, TableStartsWithDefaultColumns) {
ASSERT_NO_FATAL_FAILURE(ClearStoredColumnSettings());
chrome::ShowTaskManager(browser());
- views::TableView* table = GetTable();
+ NSTableView* table = GetTable();
ASSERT_TRUE(table);
- EXPECT_FALSE(table->is_sorted());
+ EXPECT_EQ(0u, [[table sortDescriptors] count]);
+ NSArray* tableColumns = [table tableColumns];
for (size_t i = 0; i < kColumnsSize; ++i) {
+ EXPECT_EQ(kColumns[i].id,
+ [[[tableColumns objectAtIndex:i] identifier] intValue]);
EXPECT_EQ(kColumns[i].default_visibility,
- table->IsColumnVisible(kColumns[i].id));
+ ![[tableColumns objectAtIndex:i] isHidden]);
}
}
// Tests that changing columns visibility and sort order will be stored upon
// closing the task manager view and restored when re-opened.
-IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, ColumnsSettingsAreRestored) {
+IN_PROC_BROWSER_TEST_F(TaskManagerMacTest, ColumnsSettingsAreRestored) {
ASSERT_NO_FATAL_FAILURE(ClearStoredColumnSettings());
chrome::ShowTaskManager(browser());
- NewTaskManagerView* view = GetView();
- ASSERT_TRUE(view);
- views::TableView* table = GetTable();
+ TaskManagerMac* task_manager = GetTaskManagerMac();
+ ASSERT_TRUE(task_manager);
+ NSTableView* table = GetTable();
ASSERT_TRUE(table);
// Toggle the visibility of all columns.
- EXPECT_FALSE(table->is_sorted());
+ EXPECT_EQ(0u, [[table sortDescriptors] count]);
+ NSArray* tableColumns = [table tableColumns];
for (size_t i = 0; i < kColumnsSize; ++i) {
+ EXPECT_EQ(kColumns[i].id,
+ [[[tableColumns objectAtIndex:i] identifier] intValue]);
EXPECT_EQ(kColumns[i].default_visibility,
- table->IsColumnVisible(kColumns[i].id));
- ToggleColumnVisibility(view, kColumns[i].id);
+ ![[tableColumns objectAtIndex:i] isHidden]);
+ ToggleColumnVisibility(task_manager, kColumns[i].id);
}
- // Sort by the first visible and initially ascending sortable column.
+ // Sort by the first visible and initially ascending sortable column. It would
+ // be nice to fake a click with -performClick: but that doesn't work (see
+ // http://www.cocoabuilder.com/archive/cocoa/177610-programmatically-click-column-header-in-nstableview.html).
bool is_sorted = false;
int sorted_col_id = -1;
- for (size_t i = 0; i < table->visible_columns().size(); ++i) {
- const ui::TableColumn& column = table->visible_columns()[i].column;
- if (column.sortable && column.initial_sort_is_ascending) {
- // Toggle the sort twice for a descending sort.
- table->ToggleSortOrder(static_cast<int>(i));
- table->ToggleSortOrder(static_cast<int>(i));
+ for (NSTableColumn* column in tableColumns) {
+ if ([column isHidden])
+ continue;
+ if ([column sortDescriptorPrototype].ascending) {
+ // Toggle the sort for a descending sort.
+ NSSortDescriptor* newSortDescriptor =
+ [[column sortDescriptorPrototype] reversedSortDescriptor];
+ [table setSortDescriptors:@[ newSortDescriptor ]];
is_sorted = true;
- sorted_col_id = column.id;
+ sorted_col_id = [[column identifier] intValue];
break;
}
}
- if (is_sorted) {
- EXPECT_TRUE(table->is_sorted());
- EXPECT_FALSE(table->sort_descriptors().front().ascending);
- EXPECT_EQ(table->sort_descriptors().front().column_id, sorted_col_id);
- }
+ NSArray* expectedSortDescriptors = [table sortDescriptors];
+ EXPECT_EQ(is_sorted, [expectedSortDescriptors count] > 0);
// Close the task manager view and re-open. Expect the inverse of the default
// visibility, and the last sort order.
chrome::HideTaskManager();
- content::RunAllPendingInMessageLoop();
- ASSERT_FALSE(GetView());
+ ASSERT_FALSE(GetTaskManagerMac());
chrome::ShowTaskManager(browser());
- view = GetView();
- ASSERT_TRUE(view);
+ task_manager = GetTaskManagerMac();
+ ASSERT_TRUE(task_manager);
table = GetTable();
ASSERT_TRUE(table);
if (is_sorted) {
- EXPECT_TRUE(table->is_sorted());
- EXPECT_FALSE(table->sort_descriptors().front().ascending);
- EXPECT_EQ(table->sort_descriptors().front().column_id, sorted_col_id);
- }
- for (size_t i = 0; i < kColumnsSize; ++i) {
- EXPECT_EQ(!kColumns[i].default_visibility,
- table->IsColumnVisible(kColumns[i].id));
+ EXPECT_NSEQ(expectedSortDescriptors, [table sortDescriptors]);
}
}
-IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, InitialSelection) {
- // Navigate the first tab.
- ui_test_utils::NavigateToURL(
- browser(), embedded_test_server()->GetURL("a.com", "/title2.html"));
-
- ui_test_utils::NavigateToURLWithDisposition(
- browser(), embedded_test_server()->GetURL("b.com", "/title3.html"),
- NEW_FOREGROUND_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
-
- // When the task manager is initially shown, the row for the active tab should
- // be selected.
- chrome::ShowTaskManager(browser());
-
- EXPECT_EQ(1, GetTable()->SelectedRowCount());
- EXPECT_EQ(GetTable()->FirstSelectedRow(),
- FindRowForTab(browser()->tab_strip_model()->GetWebContentsAt(1)));
-
- // Activate tab 0. The selection should not change.
- browser()->tab_strip_model()->ActivateTabAt(0, true);
- EXPECT_EQ(1, GetTable()->SelectedRowCount());
- EXPECT_EQ(GetTable()->FirstSelectedRow(),
- FindRowForTab(browser()->tab_strip_model()->GetWebContentsAt(1)));
-
- // If the user re-triggers chrome::ShowTaskManager (e.g. via shift-esc), this
- // should set the TaskManager selection to the active tab.
- chrome::ShowTaskManager(browser());
-
- EXPECT_EQ(1, GetTable()->SelectedRowCount());
- EXPECT_EQ(GetTable()->FirstSelectedRow(),
- FindRowForTab(browser()->tab_strip_model()->GetWebContentsAt(0)));
-}
+IN_PROC_BROWSER_TEST_F(TaskManagerMacTest, SelectionConsistency) {
+ ASSERT_NO_FATAL_FAILURE(ClearStoredColumnSettings());
-IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, SelectionConsistency) {
chrome::ShowTaskManager(browser());
// Set up a total of three tabs in different processes.
@@ -260,32 +237,37 @@ IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, SelectionConsistency) {
EXPECT_EQ(3U, tabs.size());
// Select the middle row, and store its tab id.
- GetTable()->Select(FindRowForTab(tabs[1]));
- EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1]));
+ [GetTable()
+ selectRowIndexes:[NSIndexSet indexSetWithIndex:FindRowForTab(tabs[1])]
+ byExtendingSelection:NO];
+ EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
+ EXPECT_EQ(1, [GetTable() numberOfSelectedRows]);
// Add 3 rows above the selection. The selected tab should not change.
for (int i = 0; i < 3; ++i) {
ASSERT_TRUE(content::ExecuteScript(tabs[0], "window.open('title3.html');"));
- EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1]));
+ EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
}
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 3), pattern));
- EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1]));
+ EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
+ EXPECT_EQ(1, [GetTable() numberOfSelectedRows]);
// Add 2 rows below the selection. The selected tab should not change.
for (int i = 0; i < 2; ++i) {
ASSERT_TRUE(content::ExecuteScript(tabs[2], "window.open('title3.html');"));
- EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1]));
+ EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
}
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 2), pattern));
- EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1]));
+ EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
+ EXPECT_EQ(1, [GetTable() numberOfSelectedRows]);
// Add a new row in the same process as the selection. The selected tab should
// not change.
ASSERT_TRUE(content::ExecuteScript(tabs[1], "window.open('title3.html');"));
- EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1]));
+ EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 1), pattern));
- EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[1]));
- EXPECT_EQ(1, GetTable()->SelectedRowCount());
+ EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[1]));
+ EXPECT_EQ(2, [GetTable() numberOfSelectedRows]);
// Press the button, which kills the process of the selected row.
PressKillButton();
@@ -293,14 +275,13 @@ IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, SelectionConsistency) {
// Two rows should disappear.
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows -= 2), pattern));
- // A later row should now be selected. The selection should be after the 4
- // rows sharing the tabs[0] process, and it should be at or before
- // the tabs[2] row.
- ASSERT_LT(FindRowForTab(tabs[0]) + 3, GetTable()->FirstSelectedRow());
- ASSERT_LE(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[2]));
+ // No row should now be selected.
+ ASSERT_EQ(-1, TableFirstSelectedRow());
// Now select tabs[2].
- GetTable()->Select(FindRowForTab(tabs[2]));
+ [GetTable()
+ selectRowIndexes:[NSIndexSet indexSetWithIndex:FindRowForTab(tabs[2])]
+ byExtendingSelection:NO];
// Focus and reload one of the sad tabs. It should reappear in the TM. The
// other sad tab should not reappear.
@@ -309,13 +290,12 @@ IN_PROC_BROWSER_TEST_F(NewTaskManagerViewTest, SelectionConsistency) {
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows += 1), pattern));
// tabs[2] should still be selected.
- EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[2]));
+ EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[2]));
// Close tabs[0]. The selection should not change.
chrome::CloseWebContents(browser(), tabs[0], false);
ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows((rows -= 1), pattern));
- EXPECT_EQ(GetTable()->FirstSelectedRow(), FindRowForTab(tabs[2]));
+ EXPECT_EQ(TableFirstSelectedRow(), FindRowForTab(tabs[2]));
}
} // namespace task_management
-
« 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