blob: 5c6840cb835c522c02cacb221396e10510910b27 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/resource_coordinator/tab_manager_web_contents_data.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/simple_test_tick_clock.h"
#include "chrome/browser/resource_coordinator/time.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/web_contents_tester.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
using content::WebContents;
using content::WebContentsTester;
namespace resource_coordinator {
namespace {
constexpr TabLoadTracker::LoadingState UNLOADED =
TabLoadTracker::LoadingState::UNLOADED;
constexpr TabLoadTracker::LoadingState LOADING =
TabLoadTracker::LoadingState::LOADING;
constexpr TabLoadTracker::LoadingState LOADED =
TabLoadTracker::LoadingState::LOADED;
class TabManagerWebContentsDataTest : public ChromeRenderViewHostTestHarness {
public:
TabManagerWebContentsDataTest()
: scoped_set_tick_clock_for_testing_(&test_clock_) {
// Fast-forward time to prevent the first call to NowTicks() in a test from
// returning a null TimeTicks.
test_clock_.Advance(base::TimeDelta::FromMilliseconds(1));
}
void SetUp() override {
ChromeRenderViewHostTestHarness::SetUp();
tab_data_ = CreateWebContentsAndTabData(&web_contents_);
}
void TearDown() override {
web_contents_.reset();
ChromeRenderViewHostTestHarness::TearDown();
}
TabManager::WebContentsData* tab_data() { return tab_data_; }
base::SimpleTestTickClock& test_clock() { return test_clock_; }
TabManager::WebContentsData* CreateWebContentsAndTabData(
std::unique_ptr<WebContents>* web_contents) {
*web_contents =
WebContentsTester::CreateTestWebContents(browser_context(), nullptr);
TabManager::WebContentsData::CreateForWebContents(web_contents->get());
return TabManager::WebContentsData::FromWebContents(web_contents->get());
}
private:
std::unique_ptr<WebContents> web_contents_;
TabManager::WebContentsData* tab_data_;
base::SimpleTestTickClock test_clock_;
ScopedSetTickClockForTesting scoped_set_tick_clock_for_testing_;
};
const char kDefaultUrl[] = "https://www.google.com";
} // namespace
TEST_F(TabManagerWebContentsDataTest, LastInactiveTime) {
EXPECT_TRUE(tab_data()->LastInactiveTime().is_null());
auto now = NowTicks();
tab_data()->SetLastInactiveTime(now);
EXPECT_EQ(now, tab_data()->LastInactiveTime());
}
TEST_F(TabManagerWebContentsDataTest, TabLoadingState) {
EXPECT_EQ(UNLOADED, tab_data()->tab_loading_state());
tab_data()->SetTabLoadingState(LOADING);
EXPECT_EQ(LOADING, tab_data()->tab_loading_state());
tab_data()->SetTabLoadingState(LOADED);
EXPECT_EQ(LOADED, tab_data()->tab_loading_state());
}
TEST_F(TabManagerWebContentsDataTest, CopyState) {
tab_data()->SetLastInactiveTime(base::TimeTicks() +
base::TimeDelta::FromSeconds(42));
tab_data()->SetTabLoadingState(LOADED);
tab_data()->SetIsInSessionRestore(true);
tab_data()->SetIsRestoredInForeground(true);
std::unique_ptr<WebContents> web_contents2;
auto* tab_data2 = CreateWebContentsAndTabData(&web_contents2);
EXPECT_NE(tab_data()->tab_data_, tab_data2->tab_data_);
TabManager::WebContentsData::CopyState(tab_data()->web_contents(),
tab_data2->web_contents());
EXPECT_EQ(tab_data()->tab_data_, tab_data2->tab_data_);
}
TEST_F(TabManagerWebContentsDataTest, IsInSessionRestoreWithTabLoading) {
EXPECT_FALSE(tab_data()->is_in_session_restore());
tab_data()->SetIsInSessionRestore(true);
EXPECT_TRUE(tab_data()->is_in_session_restore());
WebContents* contents = tab_data()->web_contents();
WebContentsTester::For(contents)->NavigateAndCommit(GURL(kDefaultUrl));
WebContentsTester::For(contents)->TestSetIsLoading(false);
EXPECT_FALSE(tab_data()->is_in_session_restore());
}
TEST_F(TabManagerWebContentsDataTest, IsInSessionRestoreWithTabClose) {
EXPECT_FALSE(tab_data()->is_in_session_restore());
tab_data()->SetIsInSessionRestore(true);
EXPECT_TRUE(tab_data()->is_in_session_restore());
tab_data()->WebContentsDestroyed();
EXPECT_FALSE(tab_data()->is_in_session_restore());
}
TEST_F(TabManagerWebContentsDataTest, IsTabRestoredInForeground) {
EXPECT_FALSE(tab_data()->is_restored_in_foreground());
tab_data()->SetIsRestoredInForeground(true);
EXPECT_TRUE(tab_data()->is_restored_in_foreground());
}
} // namespace resource_coordinator