chromium/chrome/browser/ash/crosapi/task_manager_ash_browsertest.cc

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/ash/crosapi/ash_requires_lacros_browsertestbase.h"
#include "chrome/browser/ash/crosapi/browser_manager.h"
#include "chrome/browser/ash/crosapi/browser_util.h"
#include "chrome/browser/task_manager/task_manager_tester.h"
#include "chrome/browser/ui/views/task_manager_view.h"
#include "chromeos/ash/services/network_config/public/cpp/cros_network_config_test_observer.h"
#include "chromeos/crosapi/mojom/crosapi.mojom.h"
#include "content/public/test/browser_test.h"
#include "ui/views/controls/table/table_view.h"

using task_manager::browsertest_util::WaitForTaskManagerRows;

class TaskManagerAshBrowserTest
    : public crosapi::AshRequiresLacrosBrowserTestBase {
 public:
  task_manager::TaskManagerView* GetView() const {
    return task_manager::TaskManagerView::GetInstanceForTests();
  }
};

IN_PROC_BROWSER_TEST_F(TaskManagerAshBrowserTest,
                       OpenTaskManagerSelectActiveTab) {
  if (!HasLacrosArgument()) {
    GTEST_SKIP() << "TaskManagerAshBrowserTest not supported without Lacros.";
  }

  // Open task manager, verify the current Lacros tab is the selected task.
  auto tester =
      task_manager::TaskManagerTester::Create(base::RepeatingClosure());
  WaitForTaskManagerRows(1, u"Lacros: Tab: New Tab");
  std::optional<size_t> row = tester->GetRowForActiveTask();
  EXPECT_TRUE(row.has_value());
  EXPECT_EQ(u"Lacros: Tab: New Tab", tester->GetRowTitle(row.value()));

  task_manager::TaskManagerView* task_manager_view = GetView();
  CHECK(task_manager_view);

  views::TableView* tab_table = task_manager_view->tab_table_for_testing();
  CHECK(tab_table);

  // Verify the selected row is highlighted.
  EXPECT_EQ(row.value(), tab_table->GetFirstSelectedRow());

  // Create a new tab in the foreground, verify the new tab is not highlighted
  // since it's already highlighted before.
  crosapi::BrowserManager::Get()->OpenUrl(
      GURL("about:blank"), crosapi::mojom::OpenUrlFrom::kUnspecified,
      crosapi::mojom::OpenUrlParams::WindowOpenDisposition::kNewForegroundTab);
  WaitForTaskManagerRows(1, u"Lacros: Tab: about:blank");
  row = tester->GetRowForActiveTask();
  EXPECT_TRUE(row.has_value());
  EXPECT_EQ(u"Lacros: Tab: New Tab", tester->GetRowTitle(row.value()));
  EXPECT_EQ(row.value(), tab_table->GetFirstSelectedRow());
}