OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <vector> | 5 #include <vector> |
6 | 6 |
7 #include "chrome/browser/banners/app_banner_settings_helper.h" | 7 #include "chrome/browser/banners/app_banner_settings_helper.h" |
8 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 8 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
9 | 9 |
10 namespace { | 10 namespace { |
11 | 11 |
12 const char kTestURL[] = "http://www.google.com"; | 12 const char kTestURL[] = "http://www.google.com"; |
13 const char kTestPackageName[] = "test.package"; | 13 const char kTestPackageName[] = "test.package"; |
14 | 14 |
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; | |
25 | |
26 return base::Time::FromLocalExploded(exploded_reference_time); | |
27 } | |
28 | |
15 bool IsWithinDay(base::Time time1, base::Time time2) { | 29 bool IsWithinDay(base::Time time1, base::Time time2) { |
16 return time1 - time2 < base::TimeDelta::FromDays(1) || | 30 return time1 - time2 < base::TimeDelta::FromDays(1) || |
17 time2 - time1 < base::TimeDelta::FromDays(1); | 31 time2 - time1 < base::TimeDelta::FromDays(1); |
18 } | 32 } |
19 | 33 |
20 class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness {}; | 34 class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness {}; |
21 | 35 |
22 } // namespace | 36 } // namespace |
23 | 37 |
24 TEST_F(AppBannerSettingsHelperTest, Block) { | 38 TEST_F(AppBannerSettingsHelperTest, Block) { |
(...skipping 13 matching lines...) Expand all Loading... | |
38 TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) { | 52 TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) { |
39 GURL url(kTestURL); | 53 GURL url(kTestURL); |
40 NavigateAndCommit(url); | 54 NavigateAndCommit(url); |
41 | 55 |
42 // Check that by default, there are no events recorded. | 56 // Check that by default, there are no events recorded. |
43 std::vector<base::Time> events = | 57 std::vector<base::Time> events = |
44 AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url, | 58 AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url, |
45 kTestPackageName); | 59 kTestPackageName); |
46 EXPECT_TRUE(events.empty()); | 60 EXPECT_TRUE(events.empty()); |
47 | 61 |
48 base::Time::Exploded exploded_reference_time; | 62 base::Time reference_time = GetReferenceTime(); |
49 exploded_reference_time.year = 2015; | |
50 exploded_reference_time.month = 1; | |
51 exploded_reference_time.day_of_month = 30; | |
52 exploded_reference_time.day_of_week = 5; | |
53 exploded_reference_time.hour = 11; | |
54 exploded_reference_time.minute = 0; | |
55 exploded_reference_time.second = 0; | |
56 exploded_reference_time.millisecond = 0; | |
57 | |
58 base::Time reference_time = | |
59 base::Time::FromLocalExploded(exploded_reference_time); | |
60 base::Time same_day = reference_time + base::TimeDelta::FromHours(2); | 63 base::Time same_day = reference_time + base::TimeDelta::FromHours(2); |
61 base::Time three_days_prior = reference_time - base::TimeDelta::FromDays(3); | 64 base::Time three_days_prior = reference_time - base::TimeDelta::FromDays(3); |
62 base::Time previous_fortnight = | 65 base::Time previous_fortnight = |
63 reference_time - base::TimeDelta::FromDays(14); | 66 reference_time - base::TimeDelta::FromDays(14); |
64 | 67 |
65 // Test adding the first date. | 68 // Test adding the first date. |
66 AppBannerSettingsHelper::RecordCouldShowBannerEvent( | 69 AppBannerSettingsHelper::RecordBannerEvent( |
67 web_contents(), url, kTestPackageName, previous_fortnight); | 70 web_contents(), url, kTestPackageName, |
71 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, previous_fortnight); | |
68 | 72 |
69 // It should be the only date recorded. | 73 // It should be the only date recorded. |
70 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 74 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
71 web_contents(), url, kTestPackageName); | 75 web_contents(), url, kTestPackageName); |
72 EXPECT_EQ(1u, events.size()); | 76 EXPECT_EQ(1u, events.size()); |
73 EXPECT_TRUE(IsWithinDay(events[0], previous_fortnight)); | 77 EXPECT_TRUE(IsWithinDay(events[0], previous_fortnight)); |
74 | 78 |
75 // Now add the next date. | 79 // Now add the next date. |
76 AppBannerSettingsHelper::RecordCouldShowBannerEvent( | 80 AppBannerSettingsHelper::RecordBannerEvent( |
77 web_contents(), url, kTestPackageName, three_days_prior); | 81 web_contents(), url, kTestPackageName, |
82 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, three_days_prior); | |
78 | 83 |
79 // Now there should be two days. | 84 // Now there should be two days. |
80 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 85 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
81 web_contents(), url, kTestPackageName); | 86 web_contents(), url, kTestPackageName); |
82 EXPECT_EQ(2u, events.size()); | 87 EXPECT_EQ(2u, events.size()); |
83 EXPECT_TRUE(IsWithinDay(events[0], previous_fortnight)); | 88 EXPECT_TRUE(IsWithinDay(events[0], previous_fortnight)); |
84 EXPECT_TRUE(IsWithinDay(events[1], three_days_prior)); | 89 EXPECT_TRUE(IsWithinDay(events[1], three_days_prior)); |
85 | 90 |
86 // Now add the reference date. | 91 // Now add the reference date. |
87 AppBannerSettingsHelper::RecordCouldShowBannerEvent( | 92 AppBannerSettingsHelper::RecordBannerEvent( |
88 web_contents(), url, kTestPackageName, reference_time); | 93 web_contents(), url, kTestPackageName, |
94 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time); | |
89 | 95 |
90 // Now there should still be two days, but the first date should have been | 96 // Now there should still be two days, but the first date should have been |
91 // removed. | 97 // removed. |
92 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 98 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
93 web_contents(), url, kTestPackageName); | 99 web_contents(), url, kTestPackageName); |
94 EXPECT_EQ(2u, events.size()); | 100 EXPECT_EQ(2u, events.size()); |
95 EXPECT_TRUE(IsWithinDay(events[0], three_days_prior)); | 101 EXPECT_TRUE(IsWithinDay(events[0], three_days_prior)); |
96 EXPECT_TRUE(IsWithinDay(events[1], reference_time)); | 102 EXPECT_TRUE(IsWithinDay(events[1], reference_time)); |
97 | 103 |
98 // Now add the the other day on the reference date. | 104 // Now add the the other day on the reference date. |
99 AppBannerSettingsHelper::RecordCouldShowBannerEvent( | 105 AppBannerSettingsHelper::RecordBannerEvent( |
100 web_contents(), url, kTestPackageName, same_day); | 106 web_contents(), url, kTestPackageName, |
107 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, same_day); | |
101 | 108 |
102 // Now there should still be the same two days. | 109 // Now there should still be the same two days. |
103 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( | 110 events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
104 web_contents(), url, kTestPackageName); | 111 web_contents(), url, kTestPackageName); |
105 EXPECT_EQ(2u, events.size()); | 112 EXPECT_EQ(2u, events.size()); |
106 EXPECT_TRUE(IsWithinDay(events[0], three_days_prior)); | 113 EXPECT_TRUE(IsWithinDay(events[0], three_days_prior)); |
107 EXPECT_TRUE(IsWithinDay(events[1], reference_time)); | 114 EXPECT_TRUE(IsWithinDay(events[1], reference_time)); |
108 } | 115 } |
116 | |
117 TEST_F(AppBannerSettingsHelperTest, SingleEvents) { | |
118 GURL url(kTestURL); | |
119 NavigateAndCommit(url); | |
120 | |
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()); | |
130 | |
131 // Check that a time can be recorded. | |
132 AppBannerSettingsHelper::RecordBannerEvent( | |
133 web_contents(), url, kTestPackageName, | |
134 AppBannerSettingsHelper::AppBannerEvent(event), reference_time); | |
135 | |
136 event_time = AppBannerSettingsHelper::GetSingleBannerEvent( | |
137 web_contents(), url, kTestPackageName, | |
138 AppBannerSettingsHelper::AppBannerEvent(event)); | |
139 EXPECT_EQ(reference_time, event_time); | |
140 | |
141 // Check that another time can be recorded. | |
142 AppBannerSettingsHelper::RecordBannerEvent( | |
143 web_contents(), url, kTestPackageName, | |
144 AppBannerSettingsHelper::AppBannerEvent(event), other_time); | |
145 | |
146 event_time = AppBannerSettingsHelper::GetSingleBannerEvent( | |
147 web_contents(), url, kTestPackageName, | |
148 AppBannerSettingsHelper::AppBannerEvent(event)); | |
149 EXPECT_EQ(other_time, event_time); | |
150 } | |
151 } | |
152 | |
153 TEST_F(AppBannerSettingsHelperTest, ShouldShow) { | |
gone
2015/02/05 22:21:10
Maybe split into multiple tests?
benwells
2015/02/06 16:36:28
Done.
| |
154 GURL url(kTestURL); | |
155 NavigateAndCommit(url); | |
156 | |
157 base::Time reference_time = GetReferenceTime(); | |
158 base::Time one_day_ago = reference_time - base::TimeDelta::FromDays(1); | |
159 base::Time three_weeks_ago = reference_time - base::TimeDelta::FromDays(21); | |
160 base::Time four_months_ago = reference_time - base::TimeDelta::FromDays(120); | |
161 base::Time one_year_ago = reference_time - base::TimeDelta::FromDays(366); | |
162 | |
163 // By default the banner should not be shown. | |
164 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( | |
165 web_contents(), url, kTestPackageName, reference_time)); | |
166 | |
167 // Visit the site one, it still should not be shown. | |
gone
2015/02/05 22:21:10
one year later?
benwells
2015/02/06 16:36:28
Something like that. Fixed.
| |
168 AppBannerSettingsHelper::RecordBannerEvent( | |
169 web_contents(), url, kTestPackageName, | |
170 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_year_ago); | |
171 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( | |
172 web_contents(), url, kTestPackageName, reference_time)); | |
173 | |
174 // Visit the site again after a long delay, it still should not be shown. | |
175 AppBannerSettingsHelper::RecordBannerEvent( | |
176 web_contents(), url, kTestPackageName, | |
177 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, one_day_ago); | |
178 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( | |
179 web_contents(), url, kTestPackageName, reference_time)); | |
180 | |
181 // Visit the site again; now it should be shown. | |
182 AppBannerSettingsHelper::RecordBannerEvent( | |
183 web_contents(), url, kTestPackageName, | |
184 AppBannerSettingsHelper::APP_BANNER_EVENT_COULD_SHOW, reference_time); | |
185 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner( | |
186 web_contents(), url, kTestPackageName, reference_time)); | |
187 | |
188 // Block the site a long time ago. It should still be shown. | |
189 AppBannerSettingsHelper::RecordBannerEvent( | |
190 web_contents(), url, kTestPackageName, | |
191 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, one_year_ago); | |
192 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner( | |
193 web_contents(), url, kTestPackageName, reference_time)); | |
194 | |
195 // Block the site more recently. Now it should not be shown. | |
196 AppBannerSettingsHelper::RecordBannerEvent( | |
197 web_contents(), url, kTestPackageName, | |
198 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, four_months_ago); | |
199 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( | |
200 web_contents(), url, kTestPackageName, reference_time)); | |
201 | |
202 // Clear the block event. | |
203 AppBannerSettingsHelper::RecordBannerEvent( | |
204 web_contents(), url, kTestPackageName, | |
205 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_BLOCK, base::Time()); | |
206 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner( | |
207 web_contents(), url, kTestPackageName, reference_time)); | |
208 | |
209 // Show the banner a long time ago. It should still be shown. | |
210 AppBannerSettingsHelper::RecordBannerEvent( | |
211 web_contents(), url, kTestPackageName, | |
212 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, one_year_ago); | |
213 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner( | |
214 web_contents(), url, kTestPackageName, reference_time)); | |
215 | |
216 // Show the site more recently. Now it should not be shown. | |
217 AppBannerSettingsHelper::RecordBannerEvent( | |
218 web_contents(), url, kTestPackageName, | |
219 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, three_weeks_ago); | |
220 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( | |
221 web_contents(), url, kTestPackageName, reference_time)); | |
222 | |
223 // Clear the show event. | |
224 AppBannerSettingsHelper::RecordBannerEvent( | |
225 web_contents(), url, kTestPackageName, | |
226 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_SHOW, base::Time()); | |
227 EXPECT_TRUE(AppBannerSettingsHelper::ShouldShowBanner( | |
228 web_contents(), url, kTestPackageName, reference_time)); | |
229 | |
230 // Add the site a long time ago. It should not be shown. | |
231 AppBannerSettingsHelper::RecordBannerEvent( | |
232 web_contents(), url, kTestPackageName, | |
233 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, | |
234 one_year_ago); | |
235 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( | |
236 web_contents(), url, kTestPackageName, reference_time)); | |
237 } | |
OLD | NEW |