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, ShouldShowFromEngagement) { |
| 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 one_year_ago = reference_time - base::TimeDelta::FromDays(366); |
| 160 |
| 161 // By default the banner should not be shown. |
| 162 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( |
| 163 web_contents(), url, kTestPackageName, reference_time)); |
| 164 |
| 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)); |
| 171 |
| 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)); |
| 178 |
| 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)); |
| 185 } |
| 186 |
| 187 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterBlocking) { |
| 188 GURL url(kTestURL); |
| 189 NavigateAndCommit(url); |
| 190 |
| 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); |
| 195 |
| 196 // By default the banner should not be shown. |
| 197 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( |
| 198 web_contents(), url, kTestPackageName, reference_time)); |
| 199 |
| 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)); |
| 209 |
| 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)); |
| 216 |
| 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)); |
| 223 } |
| 224 |
| 225 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterShowing) { |
| 226 GURL url(kTestURL); |
| 227 NavigateAndCommit(url); |
| 228 |
| 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); |
| 233 |
| 234 // By default the banner should not be shown. |
| 235 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( |
| 236 web_contents(), url, kTestPackageName, reference_time)); |
| 237 |
| 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)); |
| 247 |
| 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)); |
| 254 |
| 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)); |
| 261 } |
| 262 |
| 263 TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterAdding) { |
| 264 GURL url(kTestURL); |
| 265 NavigateAndCommit(url); |
| 266 |
| 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); |
| 270 |
| 271 // By default the banner should not be shown. |
| 272 EXPECT_FALSE(AppBannerSettingsHelper::ShouldShowBanner( |
| 273 web_contents(), url, kTestPackageName, reference_time)); |
| 274 |
| 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)); |
| 284 |
| 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)); |
| 292 } |
OLD | NEW |