Avi Drissman | 4e1b7bc3 | 2022-09-15 14:03:50 | [diff] [blame] | 1 | // Copyright 2011 The Chromium Authors |
[email protected] | 0f08340 | 2011-11-22 02:59:01 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Nasko Oskov | ee48dfb4 | 2024-06-08 05:13:06 | [diff] [blame] | 5 | |
[email protected] | 5c925087 | 2012-01-30 17:24:05 | [diff] [blame] | 6 | #include "content/browser/host_zoom_map_impl.h" |
[email protected] | 0f08340 | 2011-11-22 02:59:01 | [diff] [blame] | 7 | |
avi | b734894 | 2015-12-25 20:57:10 | [diff] [blame] | 8 | #include <stddef.h> |
| 9 | |
Arthur Sonzogni | d5ce01f7 | 2024-12-13 13:35:28 | [diff] [blame] | 10 | #include <array> |
| 11 | |
[email protected] | 0f08340 | 2011-11-22 02:59:01 | [diff] [blame] | 12 | #include "base/memory/ref_counted.h" |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 13 | #include "base/test/simple_test_clock.h" |
Gabriel Charette | c710874 | 2019-08-23 03:31:40 | [diff] [blame] | 14 | #include "content/public/test/browser_task_environment.h" |
[email protected] | 0f08340 | 2011-11-22 02:59:01 | [diff] [blame] | 15 | #include "testing/gtest/include/gtest/gtest.h" |
| 16 | |
[email protected] | 4648832 | 2012-10-30 03:22:20 | [diff] [blame] | 17 | namespace content { |
| 18 | |
[email protected] | 0f08340 | 2011-11-22 02:59:01 | [diff] [blame] | 19 | class HostZoomMapTest : public testing::Test { |
| 20 | public: |
Francois Doray | 1d716a97 | 2018-12-05 21:08:43 | [diff] [blame] | 21 | HostZoomMapTest() = default; |
[email protected] | 0f08340 | 2011-11-22 02:59:01 | [diff] [blame] | 22 | |
Francois Doray | 1d716a97 | 2018-12-05 21:08:43 | [diff] [blame] | 23 | private: |
Gabriel Charette | 798fde7 | 2019-08-20 22:24:04 | [diff] [blame] | 24 | BrowserTaskEnvironment task_environment_; |
[email protected] | 0f08340 | 2011-11-22 02:59:01 | [diff] [blame] | 25 | }; |
| 26 | |
| 27 | TEST_F(HostZoomMapTest, GetSetZoomLevel) { |
[email protected] | 5fe3713a | 2012-02-22 08:31:56 | [diff] [blame] | 28 | HostZoomMapImpl host_zoom_map; |
[email protected] | 0f08340 | 2011-11-22 02:59:01 | [diff] [blame] | 29 | |
| 30 | double zoomed = 2.5; |
[email protected] | 367c5c1d | 2013-03-11 18:59:02 | [diff] [blame] | 31 | host_zoom_map.SetZoomLevelForHost("zoomed.com", zoomed); |
[email protected] | 0f08340 | 2011-11-22 02:59:01 | [diff] [blame] | 32 | |
[email protected] | 367c5c1d | 2013-03-11 18:59:02 | [diff] [blame] | 33 | EXPECT_DOUBLE_EQ(0, |
| 34 | host_zoom_map.GetZoomLevelForHostAndScheme("http", "normal.com")); |
| 35 | EXPECT_DOUBLE_EQ(zoomed, |
| 36 | host_zoom_map.GetZoomLevelForHostAndScheme("http", "zoomed.com")); |
| 37 | } |
| 38 | |
| 39 | TEST_F(HostZoomMapTest, GetSetZoomLevelWithScheme) { |
| 40 | HostZoomMapImpl host_zoom_map; |
| 41 | |
| 42 | double zoomed = 2.5; |
| 43 | double default_zoom = 1.5; |
| 44 | |
| 45 | host_zoom_map.SetZoomLevelForHostAndScheme("chrome", "login", 0); |
| 46 | |
| 47 | host_zoom_map.SetDefaultZoomLevel(default_zoom); |
| 48 | |
| 49 | EXPECT_DOUBLE_EQ(0, |
| 50 | host_zoom_map.GetZoomLevelForHostAndScheme("chrome", "login")); |
| 51 | EXPECT_DOUBLE_EQ(default_zoom, |
| 52 | host_zoom_map.GetZoomLevelForHostAndScheme("http", "login")); |
| 53 | |
| 54 | host_zoom_map.SetZoomLevelForHost("login", zoomed); |
| 55 | |
| 56 | EXPECT_DOUBLE_EQ(0, |
| 57 | host_zoom_map.GetZoomLevelForHostAndScheme("chrome", "login")); |
| 58 | EXPECT_DOUBLE_EQ(zoomed, |
| 59 | host_zoom_map.GetZoomLevelForHostAndScheme("http", "login")); |
[email protected] | 0f08340 | 2011-11-22 02:59:01 | [diff] [blame] | 60 | } |
[email protected] | 4648832 | 2012-10-30 03:22:20 | [diff] [blame] | 61 | |
[email protected] | 0f37405 | 2014-03-18 20:37:22 | [diff] [blame] | 62 | TEST_F(HostZoomMapTest, GetAllZoomLevels) { |
| 63 | HostZoomMapImpl host_zoom_map; |
| 64 | |
| 65 | double zoomed = 2.5; |
| 66 | host_zoom_map.SetZoomLevelForHost("zoomed.com", zoomed); |
| 67 | host_zoom_map.SetZoomLevelForHostAndScheme("https", "zoomed.com", zoomed); |
| 68 | host_zoom_map.SetZoomLevelForHostAndScheme("chrome", "login", zoomed); |
| 69 | |
| 70 | HostZoomMap::ZoomLevelVector levels = host_zoom_map.GetAllZoomLevels(); |
Arthur Sonzogni | d5ce01f7 | 2024-12-13 13:35:28 | [diff] [blame] | 71 | auto expected = std::to_array<HostZoomMap::ZoomLevelChange>({ |
[email protected] | 0f37405 | 2014-03-18 20:37:22 | [diff] [blame] | 72 | {HostZoomMap::ZOOM_CHANGED_FOR_HOST, "zoomed.com", std::string(), zoomed}, |
| 73 | {HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST, "login", "chrome", |
| 74 | zoomed}, |
| 75 | {HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST, "zoomed.com", "https", |
Arthur Sonzogni | d5ce01f7 | 2024-12-13 13:35:28 | [diff] [blame] | 76 | zoomed}, |
| 77 | }); |
Daniel Cheng | ad44af2f | 2022-02-26 18:07:54 | [diff] [blame] | 78 | ASSERT_EQ(std::size(expected), levels.size()); |
| 79 | for (size_t i = 0; i < std::size(expected); ++i) { |
[email protected] | 0f37405 | 2014-03-18 20:37:22 | [diff] [blame] | 80 | SCOPED_TRACE(testing::Message() << "levels[" << i << "]"); |
| 81 | EXPECT_EQ(expected[i].mode, levels[i].mode); |
| 82 | EXPECT_EQ(expected[i].scheme, levels[i].scheme); |
| 83 | EXPECT_EQ(expected[i].host, levels[i].host); |
| 84 | EXPECT_EQ(expected[i].zoom_level, levels[i].zoom_level); |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 85 | EXPECT_EQ(expected[i].last_modified, base::Time()); |
[email protected] | 0f37405 | 2014-03-18 20:37:22 | [diff] [blame] | 86 | } |
| 87 | } |
| 88 | |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 89 | TEST_F(HostZoomMapTest, LastModifiedTimestamp) { |
| 90 | HostZoomMapImpl host_zoom_map; |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 91 | base::Time now = base::Time::Now(); |
tzik | 67025f67 | 2017-11-29 05:04:44 | [diff] [blame] | 92 | base::SimpleTestClock test_clock; |
| 93 | host_zoom_map.SetClockForTesting(&test_clock); |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 94 | |
tzik | 67025f67 | 2017-11-29 05:04:44 | [diff] [blame] | 95 | test_clock.SetNow(now); |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 96 | host_zoom_map.SetZoomLevelForHost("zoomed.com", 1.5); |
| 97 | host_zoom_map.SetZoomLevelForHost("zoomed2.com", 2.0); |
| 98 | |
Peter Kasting | e5a38ed | 2021-10-02 03:06:35 | [diff] [blame] | 99 | base::Time later = now + base::Seconds(1); |
tzik | 67025f67 | 2017-11-29 05:04:44 | [diff] [blame] | 100 | test_clock.SetNow(later); |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 101 | host_zoom_map.SetZoomLevelForHost("zoomed2.com", 2.5); |
| 102 | host_zoom_map.SetZoomLevelForHost("zoomzoom.com", 3); |
| 103 | host_zoom_map.SetZoomLevelForHostAndScheme("chrome", "login", 3); |
| 104 | |
| 105 | HostZoomMap::ZoomLevelVector levels = host_zoom_map.GetAllZoomLevels(); |
| 106 | std::string scheme; |
Arthur Sonzogni | d5ce01f7 | 2024-12-13 13:35:28 | [diff] [blame] | 107 | auto expected = std::to_array<HostZoomMap::ZoomLevelChange>({ |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 108 | {HostZoomMap::ZOOM_CHANGED_FOR_HOST, "zoomed.com", scheme, 1.5, now}, |
| 109 | {HostZoomMap::ZOOM_CHANGED_FOR_HOST, "zoomed2.com", scheme, 2.5, later}, |
| 110 | {HostZoomMap::ZOOM_CHANGED_FOR_HOST, "zoomzoom.com", scheme, 3.0, later}, |
| 111 | {HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST, "login", "chrome", 3.0, |
| 112 | base::Time()}, |
Arthur Sonzogni | d5ce01f7 | 2024-12-13 13:35:28 | [diff] [blame] | 113 | }); |
Daniel Cheng | ad44af2f | 2022-02-26 18:07:54 | [diff] [blame] | 114 | ASSERT_EQ(std::size(expected), levels.size()); |
| 115 | for (size_t i = 0; i < std::size(expected); ++i) { |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 116 | SCOPED_TRACE(testing::Message() << "levels[" << i << "]"); |
| 117 | EXPECT_EQ(expected[i].mode, levels[i].mode); |
| 118 | EXPECT_EQ(expected[i].scheme, levels[i].scheme); |
| 119 | EXPECT_EQ(expected[i].host, levels[i].host); |
| 120 | EXPECT_EQ(expected[i].zoom_level, levels[i].zoom_level); |
| 121 | EXPECT_EQ(expected[i].last_modified, levels[i].last_modified); |
| 122 | } |
| 123 | } |
| 124 | |
| 125 | TEST_F(HostZoomMapTest, ClearZoomLevels) { |
| 126 | HostZoomMapImpl host_zoom_map; |
tzik | 67025f67 | 2017-11-29 05:04:44 | [diff] [blame] | 127 | base::SimpleTestClock test_clock; |
| 128 | host_zoom_map.SetClockForTesting(&test_clock); |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 129 | |
| 130 | base::Time now = base::Time::Now(); |
Peter Kasting | e5a38ed | 2021-10-02 03:06:35 | [diff] [blame] | 131 | test_clock.SetNow(now - base::Hours(3)); |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 132 | host_zoom_map.SetZoomLevelForHost("zoomzoom.com", 3.5); |
Peter Kasting | e5a38ed | 2021-10-02 03:06:35 | [diff] [blame] | 133 | test_clock.SetNow(now - base::Hours(1)); |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 134 | host_zoom_map.SetZoomLevelForHost("zoom.com", 1.5); |
Peter Kasting | e5a38ed | 2021-10-02 03:06:35 | [diff] [blame] | 135 | test_clock.SetNow(now - base::Days(31)); |
Sarath Singapati | 0156b67 | 2018-04-05 09:37:00 | [diff] [blame] | 136 | host_zoom_map.SetZoomLevelForHost("zoom2.com", 2.5); |
| 137 | EXPECT_EQ(3u, host_zoom_map.GetAllZoomLevels().size()); |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 138 | |
Peter Kasting | e5a38ed | 2021-10-02 03:06:35 | [diff] [blame] | 139 | host_zoom_map.ClearZoomLevels(now - base::Hours(2), base::Time::Max()); |
Sarath Singapati | 0156b67 | 2018-04-05 09:37:00 | [diff] [blame] | 140 | ASSERT_EQ(2u, host_zoom_map.GetAllZoomLevels().size()); |
| 141 | EXPECT_EQ("zoom2.com", host_zoom_map.GetAllZoomLevels()[0].host); |
| 142 | EXPECT_EQ("zoomzoom.com", host_zoom_map.GetAllZoomLevels()[1].host); |
| 143 | |
Peter Kasting | e5a38ed | 2021-10-02 03:06:35 | [diff] [blame] | 144 | host_zoom_map.ClearZoomLevels(base::Time(), now - base::Days(30)); |
Sarath Singapati | 0156b67 | 2018-04-05 09:37:00 | [diff] [blame] | 145 | ASSERT_EQ(1u, host_zoom_map.GetAllZoomLevels().size()); |
Christian Dullweber | cc736c1 | 2017-09-04 09:27:50 | [diff] [blame] | 146 | EXPECT_EQ("zoomzoom.com", host_zoom_map.GetAllZoomLevels()[0].host); |
| 147 | |
| 148 | host_zoom_map.ClearZoomLevels(base::Time(), base::Time::Max()); |
| 149 | EXPECT_EQ(0u, host_zoom_map.GetAllZoomLevels().size()); |
| 150 | |
| 151 | // Host and scheme settings should not be affected. |
| 152 | host_zoom_map.SetZoomLevelForHostAndScheme("chrome", "login", 3); |
| 153 | host_zoom_map.ClearZoomLevels(base::Time(), base::Time::Max()); |
| 154 | EXPECT_EQ(1u, host_zoom_map.GetAllZoomLevels().size()); |
| 155 | } |
| 156 | |
[email protected] | 4648832 | 2012-10-30 03:22:20 | [diff] [blame] | 157 | } // namespace content |