Chromium Code Reviews| 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 |