1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/offline_pages/core/prefetch/prefetch_prefs.h"
6 #include "base/test/scoped_feature_list.h"
7 #include "components/offline_pages/buildflags/buildflags.h"
8 #include "components/offline_pages/core/offline_clock.h"
9 #include "components/offline_pages/core/offline_page_feature.h"
10 #include "components/offline_pages/core/test_scoped_offline_clock.h"
11 #include "components/prefs/testing_pref_service.h"
12 #include "components/version_info/version_info.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace offline_pages {
16
17 class PrefetchPrefsTest : public testing::Test {
18 public:
19 void SetUp() override;
20
prefs()21 TestingPrefServiceSimple* prefs() { return &pref_service_; }
22
23 private:
24 TestingPrefServiceSimple pref_service_;
25 };
26
SetUp()27 void PrefetchPrefsTest::SetUp() {
28 prefetch_prefs::RegisterPrefs(prefs()->registry());
29 }
30
TEST_F(PrefetchPrefsTest,PrefetchingEnabled)31 TEST_F(PrefetchPrefsTest, PrefetchingEnabled) {
32 base::test::ScopedFeatureList feature_list;
33 feature_list.InitAndEnableFeature(kPrefetchingOfflinePagesFeature);
34 EXPECT_FALSE(prefetch_prefs::IsEnabled(prefs()));
35 prefetch_prefs::SetEnabledByServer(prefs(), true);
36 EXPECT_TRUE(prefetch_prefs::IsEnabled(prefs()));
37
38 prefetch_prefs::SetPrefetchingEnabledInSettings(prefs(), false);
39 EXPECT_FALSE(prefetch_prefs::IsEnabled(prefs()));
40
41 base::test::ScopedFeatureList disabled_feature_list;
42 disabled_feature_list.InitAndDisableFeature(kPrefetchingOfflinePagesFeature);
43 // If disabled by default, should remain disabled.
44 prefetch_prefs::SetPrefetchingEnabledInSettings(prefs(), true);
45 EXPECT_FALSE(prefetch_prefs::IsEnabled(prefs()));
46 }
47
TEST_F(PrefetchPrefsTest,LimitlessPrefetchingEnabled)48 TEST_F(PrefetchPrefsTest, LimitlessPrefetchingEnabled) {
49 // Check that the default value is false.
50 EXPECT_FALSE(prefetch_prefs::IsLimitlessPrefetchingEnabled(prefs()));
51
52 // Check that limitless can be enabled.
53 prefetch_prefs::SetLimitlessPrefetchingEnabled(prefs(), true);
54 EXPECT_TRUE(prefetch_prefs::IsLimitlessPrefetchingEnabled(prefs()));
55
56 // Check that it can be disabled.
57 prefetch_prefs::SetLimitlessPrefetchingEnabled(prefs(), false);
58 EXPECT_FALSE(prefetch_prefs::IsLimitlessPrefetchingEnabled(prefs()));
59
60 // Simulate time passing to check that the setting turns itself off as
61 // expected.
62 base::TimeDelta enabled_duration;
63 if (version_info::IsOfficialBuild())
64 enabled_duration = base::TimeDelta::FromDays(1);
65 else
66 enabled_duration = base::TimeDelta::FromDays(365);
67
68 base::TimeDelta advance_delta = base::TimeDelta::FromHours(2);
69 base::Time now = OfflineTimeNow();
70
71 prefetch_prefs::SetLimitlessPrefetchingEnabled(prefs(), true);
72 TestScopedOfflineClock test_clock;
73
74 // Set time to just before the setting expires:
75 test_clock.SetNow(now + enabled_duration - advance_delta);
76 EXPECT_TRUE(prefetch_prefs::IsLimitlessPrefetchingEnabled(prefs()));
77
78 // Advance to just after it expires:
79 test_clock.Advance(2 * advance_delta);
80 EXPECT_FALSE(prefetch_prefs::IsLimitlessPrefetchingEnabled(prefs()));
81 }
82
TEST_F(PrefetchPrefsTest,TestingHeaderValuePref)83 TEST_F(PrefetchPrefsTest, TestingHeaderValuePref) {
84 // Should be empty string by default.
85 EXPECT_EQ(std::string(), prefetch_prefs::GetPrefetchTestingHeader(prefs()));
86
87 prefetch_prefs::SetPrefetchTestingHeader(prefs(), "ForceEnable");
88 EXPECT_EQ("ForceEnable", prefetch_prefs::GetPrefetchTestingHeader(prefs()));
89
90 prefetch_prefs::SetPrefetchTestingHeader(prefs(), "ForceDisable");
91 EXPECT_EQ("ForceDisable", prefetch_prefs::GetPrefetchTestingHeader(prefs()));
92
93 // We're not doing any checking/changing of the value (the server does that).
94 prefetch_prefs::SetPrefetchTestingHeader(prefs(), "asdfasdfasdf");
95 EXPECT_EQ("asdfasdfasdf", prefetch_prefs::GetPrefetchTestingHeader(prefs()));
96 }
97
TEST_F(PrefetchPrefsTest,EnabledByServer)98 TEST_F(PrefetchPrefsTest, EnabledByServer) {
99 EXPECT_FALSE(prefetch_prefs::IsEnabledByServer(prefs()));
100
101 prefetch_prefs::SetEnabledByServer(prefs(), true);
102 EXPECT_TRUE(prefetch_prefs::IsEnabledByServer(prefs()));
103
104 prefetch_prefs::SetEnabledByServer(prefs(), false);
105 EXPECT_FALSE(prefetch_prefs::IsEnabledByServer(prefs()));
106 }
107
TEST_F(PrefetchPrefsTest,ForbiddenCheck)108 TEST_F(PrefetchPrefsTest, ForbiddenCheck) {
109 base::test::ScopedFeatureList feature_list;
110 feature_list.InitAndEnableFeature(kPrefetchingOfflinePagesFeature);
111
112 // Check should be due in seven days.
113 prefetch_prefs::SetEnabledByServer(prefs(), false);
114 EXPECT_FALSE(prefetch_prefs::IsForbiddenCheckDue(prefs()));
115
116 TestScopedOfflineClock test_clock;
117 base::Time later = OfflineTimeNow() + base::TimeDelta::FromDays(8);
118 test_clock.SetNow(later);
119
120 prefetch_prefs::SetPrefetchingEnabledInSettings(prefs(), false);
121 EXPECT_FALSE(prefetch_prefs::IsForbiddenCheckDue(prefs()));
122 prefetch_prefs::SetPrefetchingEnabledInSettings(prefs(), true);
123 EXPECT_TRUE(prefetch_prefs::IsForbiddenCheckDue(prefs()));
124
125 // The check is not due if we are server-enabled.
126 prefetch_prefs::SetEnabledByServer(prefs(), true);
127 EXPECT_FALSE(prefetch_prefs::IsForbiddenCheckDue(prefs()));
128
129 // Simulate the feature being disabled.
130 test_clock.SetNow(OfflineTimeNow());
131 prefetch_prefs::SetEnabledByServer(prefs(), false);
132
133 base::test::ScopedFeatureList disabled_feature_list;
134 disabled_feature_list.InitAndDisableFeature(kPrefetchingOfflinePagesFeature);
135 test_clock.SetNow(later);
136 EXPECT_FALSE(prefetch_prefs::IsForbiddenCheckDue(prefs()));
137 }
138
TEST_F(PrefetchPrefsTest,FirstForbiddenCheck)139 TEST_F(PrefetchPrefsTest, FirstForbiddenCheck) {
140 base::test::ScopedFeatureList feature_list;
141 feature_list.InitAndEnableFeature(kPrefetchingOfflinePagesFeature);
142
143 EXPECT_TRUE(prefetch_prefs::IsForbiddenCheckDue(prefs()));
144 EXPECT_TRUE(prefetch_prefs::IsEnabledByServerUnknown(prefs()));
145
146 // Pretend a check was performed and failed.
147 prefetch_prefs::SetEnabledByServer(prefs(), false);
148
149 // Jump ahead in time so that a check should be due.
150 TestScopedOfflineClock test_clock;
151 test_clock.SetNow(OfflineTimeNow() + base::TimeDelta::FromDays(8));
152
153 EXPECT_TRUE(prefetch_prefs::IsForbiddenCheckDue(prefs()));
154 EXPECT_FALSE(prefetch_prefs::IsEnabledByServerUnknown(prefs()));
155 }
156
157 } // namespace offline_pages
158