blob: eb879990c34d39272e557afbed611c8cd77b3930 [file]
// Copyright 2025 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/sessions/session_restore_delegate.h"
#include "base/memory_coordinator/test_memory_consumer_registry.h"
#include "chrome/browser/performance_manager/public/background_tab_loading_policy.h"
#include "chrome/browser/sessions/session_restore.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "components/favicon/content/content_favicon_driver.h"
#include "components/favicon/core/test/mock_favicon_service.h"
#include "components/performance_manager/test_support/page_node_utils.h"
#include "components/performance_manager/test_support/test_harness_helper.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/test/web_contents_tester.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
using ::content::BrowserContext;
using ::content::NavigationEntry;
using ::content::WebContents;
using ::content::WebContentsTester;
using ::favicon::ContentFaviconDriver;
using ::favicon::MockFaviconService;
using ::performance_manager::PerformanceManagerTestHarnessHelper;
using ::testing::Bool;
using ::testing::NiceMock;
using ::testing::WithParamInterface;
std::unique_ptr<WebContents> CreateRestoredWebContents(
BrowserContext* browser_context) {
std::unique_ptr<WebContents> test_contents =
WebContentsTester::CreateTestWebContents(browser_context, nullptr);
std::vector<std::unique_ptr<NavigationEntry>> entries;
entries.push_back(NavigationEntry::Create());
test_contents->GetController().Restore(0, content::RestoreType::kRestored,
&entries);
performance_manager::testing::SetPageNodeType(
performance_manager::testing::GetPageNodeForWebContents(
test_contents.get()),
performance_manager::PageType::kTab);
return test_contents;
}
class RestoreTabsTest : public ChromeRenderViewHostTestHarness {
public:
void SetUp() override {
ChromeRenderViewHostTestHarness::SetUp();
perf_manager_helper_.SetUp();
}
void TearDown() override {
perf_manager_helper_.TearDown();
ChromeRenderViewHostTestHarness::TearDown();
}
private:
base::TestMemoryConsumerRegistry test_memory_consumer_registry_;
PerformanceManagerTestHarnessHelper perf_manager_helper_;
};
TEST_F(RestoreTabsTest, RestoreTabsRestoresFavicons) {
performance_manager::policies::InstallBackgroundTabLoadingPolicyForTesting(
base::BindRepeating(&SessionRestore::OnTabLoaderFinishedLoadingTabs));
SetContents(CreateRestoredWebContents(browser_context()));
// Setup a mock favicon service.
NiceMock<MockFaviconService> favicon_service;
ContentFaviconDriver::CreateForWebContents(web_contents(), &favicon_service);
// Restoring a tab should fetch a favicon.
EXPECT_CALL(favicon_service, GetFaviconForPageURL);
SessionRestoreDelegate::RestoreTabs(
{SessionRestoreDelegate::RestoredTab(
web_contents(), /*is_active=*/false, /*is_app=*/false,
/*is_pinned=*/false, /*group=*/std::nullopt, /*split=*/std::nullopt)},
base::TimeTicks::Now());
}
} // namespace