blob: 665c093cf60da5ee76f23a4809221e831c2edbec [file] [log] [blame]
// Copyright (c) 2011 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 "content/browser/host_zoom_map_impl.h"
#include <stddef.h>
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/test/scoped_task_environment.h"
#include "base/test/simple_test_clock.h"
#include "base/threading/thread_task_runner_handle.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/test/test_browser_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace content {
class HostZoomMapTest : public testing::Test {
public:
HostZoomMapTest()
: ui_thread_(BrowserThread::UI, base::ThreadTaskRunnerHandle::Get()) {}
protected:
base::test::ScopedTaskEnvironment task_environment_;
TestBrowserThread ui_thread_;
};
TEST_F(HostZoomMapTest, GetSetZoomLevel) {
HostZoomMapImpl host_zoom_map;
double zoomed = 2.5;
host_zoom_map.SetZoomLevelForHost("zoomed.com", zoomed);
EXPECT_DOUBLE_EQ(0,
host_zoom_map.GetZoomLevelForHostAndScheme("http", "normal.com"));
EXPECT_DOUBLE_EQ(zoomed,
host_zoom_map.GetZoomLevelForHostAndScheme("http", "zoomed.com"));
}
TEST_F(HostZoomMapTest, GetSetZoomLevelWithScheme) {
HostZoomMapImpl host_zoom_map;
double zoomed = 2.5;
double default_zoom = 1.5;
host_zoom_map.SetZoomLevelForHostAndScheme("chrome", "login", 0);
host_zoom_map.SetDefaultZoomLevel(default_zoom);
EXPECT_DOUBLE_EQ(0,
host_zoom_map.GetZoomLevelForHostAndScheme("chrome", "login"));
EXPECT_DOUBLE_EQ(default_zoom,
host_zoom_map.GetZoomLevelForHostAndScheme("http", "login"));
host_zoom_map.SetZoomLevelForHost("login", zoomed);
EXPECT_DOUBLE_EQ(0,
host_zoom_map.GetZoomLevelForHostAndScheme("chrome", "login"));
EXPECT_DOUBLE_EQ(zoomed,
host_zoom_map.GetZoomLevelForHostAndScheme("http", "login"));
}
TEST_F(HostZoomMapTest, GetAllZoomLevels) {
HostZoomMapImpl host_zoom_map;
double zoomed = 2.5;
host_zoom_map.SetZoomLevelForHost("zoomed.com", zoomed);
host_zoom_map.SetZoomLevelForHostAndScheme("https", "zoomed.com", zoomed);
host_zoom_map.SetZoomLevelForHostAndScheme("chrome", "login", zoomed);
HostZoomMap::ZoomLevelVector levels = host_zoom_map.GetAllZoomLevels();
HostZoomMap::ZoomLevelChange expected[] = {
{HostZoomMap::ZOOM_CHANGED_FOR_HOST, "zoomed.com", std::string(), zoomed},
{HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST, "login", "chrome",
zoomed},
{HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST, "zoomed.com", "https",
zoomed}, };
ASSERT_EQ(arraysize(expected), levels.size());
for (size_t i = 0; i < arraysize(expected); ++i) {
SCOPED_TRACE(testing::Message() << "levels[" << i << "]");
EXPECT_EQ(expected[i].mode, levels[i].mode);
EXPECT_EQ(expected[i].scheme, levels[i].scheme);
EXPECT_EQ(expected[i].host, levels[i].host);
EXPECT_EQ(expected[i].zoom_level, levels[i].zoom_level);
EXPECT_EQ(expected[i].last_modified, base::Time());
}
}
TEST_F(HostZoomMapTest, LastModifiedTimestamp) {
HostZoomMapImpl host_zoom_map;
base::Time now = base::Time::Now();
base::SimpleTestClock test_clock;
host_zoom_map.SetClockForTesting(&test_clock);
test_clock.SetNow(now);
host_zoom_map.SetZoomLevelForHost("zoomed.com", 1.5);
host_zoom_map.SetZoomLevelForHost("zoomed2.com", 2.0);
base::Time later = now + base::TimeDelta::FromSeconds(1);
test_clock.SetNow(later);
host_zoom_map.SetZoomLevelForHost("zoomed2.com", 2.5);
host_zoom_map.SetZoomLevelForHost("zoomzoom.com", 3);
host_zoom_map.SetZoomLevelForHostAndScheme("chrome", "login", 3);
HostZoomMap::ZoomLevelVector levels = host_zoom_map.GetAllZoomLevels();
std::string scheme;
HostZoomMap::ZoomLevelChange expected[] = {
{HostZoomMap::ZOOM_CHANGED_FOR_HOST, "zoomed.com", scheme, 1.5, now},
{HostZoomMap::ZOOM_CHANGED_FOR_HOST, "zoomed2.com", scheme, 2.5, later},
{HostZoomMap::ZOOM_CHANGED_FOR_HOST, "zoomzoom.com", scheme, 3.0, later},
{HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST, "login", "chrome", 3.0,
base::Time()},
};
ASSERT_EQ(arraysize(expected), levels.size());
for (size_t i = 0; i < arraysize(expected); ++i) {
SCOPED_TRACE(testing::Message() << "levels[" << i << "]");
EXPECT_EQ(expected[i].mode, levels[i].mode);
EXPECT_EQ(expected[i].scheme, levels[i].scheme);
EXPECT_EQ(expected[i].host, levels[i].host);
EXPECT_EQ(expected[i].zoom_level, levels[i].zoom_level);
EXPECT_EQ(expected[i].last_modified, levels[i].last_modified);
}
}
TEST_F(HostZoomMapTest, ClearZoomLevels) {
HostZoomMapImpl host_zoom_map;
base::SimpleTestClock test_clock;
host_zoom_map.SetClockForTesting(&test_clock);
base::Time now = base::Time::Now();
test_clock.SetNow(now - base::TimeDelta::FromHours(3));
host_zoom_map.SetZoomLevelForHost("zoomzoom.com", 3.5);
test_clock.SetNow(now - base::TimeDelta::FromHours(1));
host_zoom_map.SetZoomLevelForHost("zoom.com", 1.5);
test_clock.SetNow(now - base::TimeDelta::FromDays(31));
host_zoom_map.SetZoomLevelForHost("zoom2.com", 2.5);
EXPECT_EQ(3u, host_zoom_map.GetAllZoomLevels().size());
host_zoom_map.ClearZoomLevels(now - base::TimeDelta::FromHours(2),
base::Time::Max());
ASSERT_EQ(2u, host_zoom_map.GetAllZoomLevels().size());
EXPECT_EQ("zoom2.com", host_zoom_map.GetAllZoomLevels()[0].host);
EXPECT_EQ("zoomzoom.com", host_zoom_map.GetAllZoomLevels()[1].host);
host_zoom_map.ClearZoomLevels(base::Time(),
now - base::TimeDelta::FromDays(30));
ASSERT_EQ(1u, host_zoom_map.GetAllZoomLevels().size());
EXPECT_EQ("zoomzoom.com", host_zoom_map.GetAllZoomLevels()[0].host);
host_zoom_map.ClearZoomLevels(base::Time(), base::Time::Max());
EXPECT_EQ(0u, host_zoom_map.GetAllZoomLevels().size());
// Host and scheme settings should not be affected.
host_zoom_map.SetZoomLevelForHostAndScheme("chrome", "login", 3);
host_zoom_map.ClearZoomLevels(base::Time(), base::Time::Max());
EXPECT_EQ(1u, host_zoom_map.GetAllZoomLevels().size());
}
} // namespace content