ozone: evdev: Sync caps lock LED state to evdev
[chromium-blink-merge.git] / chrome / browser / banners / app_banner_settings_helper_unittest.cc
blobe744c0eb8fa7343a279fd70c443318708c45491a
1 // Copyright 2015 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.
5 #include <vector>
7 #include "chrome/browser/banners/app_banner_settings_helper.h"
8 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
10 namespace {
12 const char kTestURL[] = "https://www.google.com";
13 const char kTestPackageName[] = "test.package";
15 base::Time GetReferenceTime() {
16 base::Time::Exploded exploded_reference_time;
17 exploded_reference_time.year = 2015;
18 exploded_reference_time.month = 1;
19 exploded_reference_time.day_of_month = 30;
20 exploded_reference_time.day_of_week = 5;
21 exploded_reference_time.hour = 11;
22 exploded_reference_time.minute = 0;
23 exploded_reference_time.second = 0;
24 exploded_reference_time.millisecond = 0;
26 return base::Time::FromLocalExploded(exploded_reference_time);
29 bool IsWithinDay(base::Time time1, base::Time time2) {
30 return time1 - time2 < base::TimeDelta::FromDays(1) ||
31 time2 - time1 < base::TimeDelta::FromDays(1);
34 class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness {};
36 } // namespace
38 TEST_F(AppBannerSettingsHelperTest, Block) {
39 GURL url(kTestURL);
40 NavigateAndCommit(url);
42 // Check that by default, showing the banner is allowed.
43 EXPECT_TRUE(AppBannerSettingsHelper::IsAllowed(web_contents(), url,
44 kTestPackageName));
46 // Block the banner and test it is no longer allowed.
47 AppBannerSettingsHelper::Block(web_contents(), url, kTestPackageName);
48 EXPECT_FALSE(AppBannerSettingsHelper::IsAllowed(web_contents(), url,
49 kTestPackageName));
52 TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) {
53 GURL url(kTestURL);
54 NavigateAndCommit(url);
56 // Check that by default, there are no events recorded.
57 std::vector<base::Time> events =
58 AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url,
59 kTestPackageName);
60 EXPECT_TRUE(events.empty());
62 base::Time reference_time = GetReferenceTime();
63 base::Time same_day = reference_time + base::TimeDelta::FromHours(2);
64 base::Time three_days_prior = reference_time - base::TimeDelta::FromDays(3);
65 base::Time previous_fortnight =
66 reference_time - base::TimeDelta::FromDays(14);
68 // Test adding the first date.
69 AppBannerSettingsHelper::RecordBannerEvent(
70 web_contents(), url, kTestPackageName,
71 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, previous_fortnight);
73 // It should be the only date recorded.
74 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
75 web_contents(), url, kTestPackageName);
76 EXPECT_EQ(1u, events.size());
77 EXPECT_TRUE(IsWithinDay(events[0], previous_fortnight));
79 // Now add the next date.
80 AppBannerSettingsHelper::RecordBannerEvent(
81 web_contents(), url, kTestPackageName,
82 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, three_days_prior);
84 // Now there should be two days.
85 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
86 web_contents(), url, kTestPackageName);
87 EXPECT_EQ(2u, events.size());
88 EXPECT_TRUE(IsWithinDay(events[0], previous_fortnight));
89 EXPECT_TRUE(IsWithinDay(events[1], three_days_prior));
91 // Now add the reference date.
92 AppBannerSettingsHelper::RecordBannerEvent(
93 web_contents(), url, kTestPackageName,
94 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time);
96 // Now there should still be two days, but the first date should have been
97 // removed.
98 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
99 web_contents(), url, kTestPackageName);
100 EXPECT_EQ(2u, events.size());
101 EXPECT_TRUE(IsWithinDay(events[0], three_days_prior));
102 EXPECT_TRUE(IsWithinDay(events[1], reference_time));
104 // Now add the the other day on the reference date.
105 AppBannerSettingsHelper::RecordBannerEvent(
106 web_contents(), url, kTestPackageName,
107 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, same_day);
109 // Now there should still be the same two days.
110 events = AppBannerSettingsHelper::GetCouldShowBannerEvents(
111 web_contents(), url, kTestPackageName);
112 EXPECT_EQ(2u, events.size());
113 EXPECT_TRUE(IsWithinDay(events[0], three_days_prior));
114 EXPECT_TRUE(IsWithinDay(events[1], reference_time));
117 TEST_F(AppBannerSettingsHelperTest, SingleEvents) {
118 GURL url(kTestURL);
119 NavigateAndCommit(url);
121 base::Time reference_time = GetReferenceTime();
122 base::Time other_time = reference_time - base::TimeDelta::FromDays(3);
123 for (int event = AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW;
124 event < AppBannerSettingsHelper::APP_BANNER_EVENT_NUM_EVENTS; ++event) {
125 // Check that by default, there is no event.
126 base::Time event_time = AppBannerSettingsHelper::GetSingleBannerEvent(
127 web_contents(), url, kTestPackageName,
128 AppBannerSettingsHelper::AppBannerEvent(event));
129 EXPECT_TRUE(event_time.is_null());
131 // Check that a time can be recorded.
132 AppBannerSettingsHelper::RecordBannerEvent(
133 web_contents(), url, kTestPackageName,
134 AppBannerSettingsHelper::AppBannerEvent(event), reference_time);
136 event_time = AppBannerSettingsHelper::GetSingleBannerEvent(
137 web_contents(), url, kTestPackageName,
138 AppBannerSettingsHelper::AppBannerEvent(event));
139 EXPECT_EQ(reference_time, event_time);
141 // Check that another time can be recorded.
142 AppBannerSettingsHelper::RecordBannerEvent(
143 web_contents(), url, kTestPackageName,
144 AppBannerSettingsHelper::AppBannerEvent(event), other_time);
146 event_time = AppBannerSettingsHelper::GetSingleBannerEvent(
147 web_contents(), url, kTestPackageName,
148 AppBannerSettingsHelper::AppBannerEvent(event));
149 EXPECT_EQ(other_time, event_time);
153 TEST_F(AppBannerSettingsHelperTest, ShouldShowFromEngagement) {
154 GURL url(kTestURL);
155 NavigateAndCommit(url);
157 base::Time reference_time = GetReferenceTime();
158 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
159 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
161 // By default the banner should not be shown.
162 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
163 web_contents(), url, kTestPackageName, reference_time));
165 // Visit the site once, it still should not be shown.
166 AppBannerSettingsHelper::RecordBannerEvent(
167 web_contents(), url, kTestPackageName,
168 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_year_ago);
169 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
170 web_contents(), url, kTestPackageName, reference_time));
172 // Visit the site again after a long delay, it still should not be shown.
173 AppBannerSettingsHelper::RecordBannerEvent(
174 web_contents(), url, kTestPackageName,
175 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_day_ago);
176 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
177 web_contents(), url, kTestPackageName, reference_time));
179 // Visit the site again; now it should be shown.
180 AppBannerSettingsHelper::RecordBannerEvent(
181 web_contents(), url, kTestPackageName,
182 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time);
183 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
184 web_contents(), url, kTestPackageName, reference_time));
187 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterBlocking) {
188 GURL url(kTestURL);
189 NavigateAndCommit(url);
191 base::Time reference_time = GetReferenceTime();
192 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
193 base::Time two_months_ago = reference_time - base::TimeDelta::FromDays(60);
194 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
196 // By default the banner should not be shown.
197 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
198 web_contents(), url, kTestPackageName, reference_time));
200 // Record events such that the banner should show.
201 AppBannerSettingsHelper::RecordBannerEvent(
202 web_contents(), url, kTestPackageName,
203 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_day_ago);
204 AppBannerSettingsHelper::RecordBannerEvent(
205 web_contents(), url, kTestPackageName,
206 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time);
207 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
208 web_contents(), url, kTestPackageName, reference_time));
210 // Block the site a long time ago. It should still be shown.
211 AppBannerSettingsHelper::RecordBannerEvent(
212 web_contents(), url, kTestPackageName,
213 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, one_year_ago);
214 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
215 web_contents(), url, kTestPackageName, reference_time));
217 // Block the site more recently. Now it should not be shown.
218 AppBannerSettingsHelper::RecordBannerEvent(
219 web_contents(), url, kTestPackageName,
220 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, two_months_ago);
221 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
222 web_contents(), url, kTestPackageName, reference_time));
225 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterShowing) {
226 GURL url(kTestURL);
227 NavigateAndCommit(url);
229 base::Time reference_time = GetReferenceTime();
230 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
231 base::Time three_weeks_ago = reference_time - base::TimeDelta::FromDays(21);
232 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
234 // By default the banner should not be shown.
235 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
236 web_contents(), url, kTestPackageName, reference_time));
238 // Record events such that the banner should show.
239 AppBannerSettingsHelper::RecordBannerEvent(
240 web_contents(), url, kTestPackageName,
241 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_day_ago);
242 AppBannerSettingsHelper::RecordBannerEvent(
243 web_contents(), url, kTestPackageName,
244 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time);
245 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
246 web_contents(), url, kTestPackageName, reference_time));
248 // Show the banner a long time ago. It should still be shown.
249 AppBannerSettingsHelper::RecordBannerEvent(
250 web_contents(), url, kTestPackageName,
251 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, one_year_ago);
252 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
253 web_contents(), url, kTestPackageName, reference_time));
255 // Show the site more recently. Now it should not be shown.
256 AppBannerSettingsHelper::RecordBannerEvent(
257 web_contents(), url, kTestPackageName,
258 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, three_weeks_ago);
259 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
260 web_contents(), url, kTestPackageName, reference_time));
263 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterAdding) {
264 GURL url(kTestURL);
265 NavigateAndCommit(url);
267 base::Time reference_time = GetReferenceTime();
268 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1);
269 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366);
271 // By default the banner should not be shown.
272 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
273 web_contents(), url, kTestPackageName, reference_time));
275 // Record events such that the banner should show.
276 AppBannerSettingsHelper::RecordBannerEvent(
277 web_contents(), url, kTestPackageName,
278 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_day_ago);
279 AppBannerSettingsHelper::RecordBannerEvent(
280 web_contents(), url, kTestPackageName,
281 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time);
282 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner(
283 web_contents(), url, kTestPackageName, reference_time));
285 // Add the site a long time ago. It should not be shown.
286 AppBannerSettingsHelper::RecordBannerEvent(
287 web_contents(), url, kTestPackageName,
288 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
289 one_year_ago);
290 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner(
291 web_contents(), url, kTestPackageName, reference_time));