OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "components/ntp_tiles/popular_sites_impl.h" | 5 #include "components/ntp_tiles/popular_sites_impl.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
110 net::URLRequestStatus::SUCCESS); | 110 net::URLRequestStatus::SUCCESS); |
111 } | 111 } |
112 | 112 |
113 // Returns an optional bool representing whether the completion callback was | 113 // Returns an optional bool representing whether the completion callback was |
114 // called at all, and if yes which was the returned bool value. | 114 // called at all, and if yes which was the returned bool value. |
115 base::Optional<bool> FetchPopularSites(bool force_download, | 115 base::Optional<bool> FetchPopularSites(bool force_download, |
116 PopularSites::SitesVector* sites) { | 116 PopularSites::SitesVector* sites) { |
117 scoped_refptr<net::TestURLRequestContextGetter> url_request_context( | 117 scoped_refptr<net::TestURLRequestContextGetter> url_request_context( |
118 new net::TestURLRequestContextGetter( | 118 new net::TestURLRequestContextGetter( |
119 base::ThreadTaskRunnerHandle::Get())); | 119 base::ThreadTaskRunnerHandle::Get())); |
120 PopularSitesImpl popular_sites(worker_pool_owner_.pool().get(), &prefs_, | 120 std::unique_ptr<PopularSites> popular_sites = |
121 /*template_url_service=*/nullptr, | 121 CreatePopularSites(url_request_context.get()); |
122 /*variations_service=*/nullptr, | |
123 url_request_context.get(), cache_dir_, | |
124 base::Bind(JsonUnsafeParser::Parse)); | |
125 | 122 |
126 base::RunLoop loop; | 123 base::RunLoop loop; |
127 base::Optional<bool> save_success; | 124 base::Optional<bool> save_success; |
128 if (popular_sites.MaybeStartFetch( | 125 if (popular_sites->MaybeStartFetch( |
129 force_download, base::Bind( | 126 force_download, base::Bind( |
130 [](base::Optional<bool>* save_success, | 127 [](base::Optional<bool>* save_success, |
131 base::RunLoop* loop, bool success) { | 128 base::RunLoop* loop, bool success) { |
132 save_success->emplace(success); | 129 save_success->emplace(success); |
133 loop->Quit(); | 130 loop->Quit(); |
134 }, | 131 }, |
135 &save_success, &loop))) { | 132 &save_success, &loop))) { |
136 loop.Run(); | 133 loop.Run(); |
137 } | 134 } |
138 *sites = popular_sites.sites(); | 135 *sites = popular_sites->sites(); |
139 return save_success; | 136 return save_success; |
140 } | 137 } |
141 | 138 |
139 std::unique_ptr<PopularSites> CreatePopularSites( | |
140 net::URLRequestContextGetter* context) { | |
141 return base::MakeUnique<PopularSitesImpl>( | |
142 worker_pool_owner_.pool().get(), &prefs_, | |
143 /*template_url_service=*/nullptr, | |
144 /*variations_service=*/nullptr, context, cache_dir_, | |
145 base::Bind(JsonUnsafeParser::Parse)); | |
146 } | |
147 | |
142 const TestPopularSite kWikipedia; | 148 const TestPopularSite kWikipedia; |
143 const TestPopularSite kYouTube; | 149 const TestPopularSite kYouTube; |
144 const TestPopularSite kChromium; | 150 const TestPopularSite kChromium; |
145 | 151 |
146 base::MessageLoopForUI ui_loop_; | 152 base::MessageLoopForUI ui_loop_; |
147 base::SequencedWorkerPoolOwner worker_pool_owner_; | 153 base::SequencedWorkerPoolOwner worker_pool_owner_; |
148 base::ScopedTempDir scoped_cache_dir_; | 154 base::ScopedTempDir scoped_cache_dir_; |
149 base::FilePath cache_dir_; | 155 base::FilePath cache_dir_; |
150 sync_preferences::TestingPrefServiceSyncable prefs_; | 156 sync_preferences::TestingPrefServiceSyncable prefs_; |
151 net::FakeURLFetcherFactory url_fetcher_factory_; | 157 net::FakeURLFetcherFactory url_fetcher_factory_; |
152 }; | 158 }; |
153 | 159 |
sfiera
2017/02/09 12:39:06
I think I'd like to see a test of what sites() ret
fhorschig
2017/02/09 15:30:18
Good idea, especially when reading prefs in the ct
| |
154 TEST_F(PopularSitesTest, Basic) { | 160 TEST_F(PopularSitesTest, Basic) { |
155 SetCountryAndVersion("ZZ", "9"); | 161 SetCountryAndVersion("ZZ", "9"); |
156 RespondWithJSON( | 162 RespondWithJSON( |
157 "https://www.gstatic.com/chrome/ntp/suggested_sites_ZZ_9.json", | 163 "https://www.gstatic.com/chrome/ntp/suggested_sites_ZZ_9.json", |
158 {kWikipedia}); | 164 {kWikipedia}); |
159 | 165 |
160 PopularSites::SitesVector sites; | 166 PopularSites::SitesVector sites; |
161 EXPECT_THAT(FetchPopularSites(/*force_download=*/false, &sites), | 167 EXPECT_THAT(FetchPopularSites(/*force_download=*/false, &sites), |
162 Eq(base::Optional<bool>(true))); | 168 Eq(base::Optional<bool>(true))); |
163 | 169 |
(...skipping 23 matching lines...) Expand all Loading... | |
187 EXPECT_THAT(sites[0].large_icon_url, | 193 EXPECT_THAT(sites[0].large_icon_url, |
188 URLEq("https://s.ytimg.com/apple-touch-icon.png")); | 194 URLEq("https://s.ytimg.com/apple-touch-icon.png")); |
189 EXPECT_THAT(sites[0].favicon_url, URLEq("")); | 195 EXPECT_THAT(sites[0].favicon_url, URLEq("")); |
190 EXPECT_THAT(sites[1].title, Str16Eq("The Chromium Project")); | 196 EXPECT_THAT(sites[1].title, Str16Eq("The Chromium Project")); |
191 EXPECT_THAT(sites[1].url, URLEq("https://www.chromium.org/")); | 197 EXPECT_THAT(sites[1].url, URLEq("https://www.chromium.org/")); |
192 EXPECT_THAT(sites[1].large_icon_url, URLEq("")); | 198 EXPECT_THAT(sites[1].large_icon_url, URLEq("")); |
193 EXPECT_THAT(sites[1].favicon_url, | 199 EXPECT_THAT(sites[1].favicon_url, |
194 URLEq("https://www.chromium.org/favicon.ico")); | 200 URLEq("https://www.chromium.org/favicon.ico")); |
195 } | 201 } |
196 | 202 |
197 TEST_F(PopularSitesTest, Failure) { | 203 TEST_F(PopularSitesTest, PopulatesWithDefaultResoucesOnFailure) { |
198 SetCountryAndVersion("ZZ", "9"); | 204 SetCountryAndVersion("ZZ", "9"); |
199 RespondWith404( | 205 RespondWith404( |
200 "https://www.gstatic.com/chrome/ntp/suggested_sites_ZZ_9.json"); | 206 "https://www.gstatic.com/chrome/ntp/suggested_sites_ZZ_9.json"); |
201 RespondWith404( | 207 RespondWith404( |
202 "https://www.gstatic.com/chrome/ntp/suggested_sites_DEFAULT_5.json"); | 208 "https://www.gstatic.com/chrome/ntp/suggested_sites_DEFAULT_5.json"); |
203 | 209 |
204 PopularSites::SitesVector sites; | 210 PopularSites::SitesVector sites; |
205 EXPECT_THAT(FetchPopularSites(/*force_download=*/false, &sites), | 211 EXPECT_THAT(FetchPopularSites(/*force_download=*/false, &sites), |
206 Eq(base::Optional<bool>(false))); | 212 Eq(base::Optional<bool>(false))); |
207 ASSERT_THAT(sites, IsEmpty()); | 213 EXPECT_THAT(sites.size(), Eq(8ul)); |
214 } | |
215 | |
216 TEST_F(PopularSitesTest, ProvidesDefaultSitesUntilCallbackReturns) { | |
217 SetCountryAndVersion("ZZ", "9"); | |
218 RespondWithJSON( | |
219 "https://www.gstatic.com/chrome/ntp/suggested_sites_ZZ_9.json", | |
220 {kWikipedia}); | |
221 scoped_refptr<net::TestURLRequestContextGetter> url_request_context( | |
222 new net::TestURLRequestContextGetter( | |
223 base::ThreadTaskRunnerHandle::Get())); | |
224 std::unique_ptr<PopularSites> popular_sites = | |
225 CreatePopularSites(url_request_context.get()); | |
226 | |
227 base::RunLoop loop; | |
228 base::Optional<bool> save_success; | |
229 | |
230 bool callback_was_scheduled = popular_sites->MaybeStartFetch( | |
231 /*force_download=*/true, base::Bind( | |
232 [](base::Optional<bool>* save_success, | |
233 base::RunLoop* loop, bool success) { | |
234 save_success->emplace(success); | |
235 loop->Quit(); | |
236 }, | |
237 &save_success, &loop)); | |
238 | |
239 // Assert that callback was scheduled so we can wait for its completion. | |
240 ASSERT_TRUE(callback_was_scheduled); | |
241 // There should be 8 default sites as nothing was fetched yet. | |
242 EXPECT_THAT(popular_sites->sites().size(), Eq(8ul)); | |
243 | |
244 loop.Run(); // Wait for the fetch to finish and the callback to return. | |
245 | |
246 ASSERT_TRUE(save_success.has_value()); | |
247 EXPECT_TRUE(save_success.value()); | |
248 // The 1 fetched site should replace the default sites. | |
249 EXPECT_THAT(popular_sites->sites().size(), Eq(1ul)); | |
208 } | 250 } |
209 | 251 |
210 TEST_F(PopularSitesTest, ClearsCacheFileFromOldVersions) { | 252 TEST_F(PopularSitesTest, ClearsCacheFileFromOldVersions) { |
211 SetCountryAndVersion("ZZ", "9"); | 253 SetCountryAndVersion("ZZ", "9"); |
212 RespondWithJSON( | 254 RespondWithJSON( |
213 "https://www.gstatic.com/chrome/ntp/suggested_sites_ZZ_9.json", | 255 "https://www.gstatic.com/chrome/ntp/suggested_sites_ZZ_9.json", |
214 {kWikipedia}); | 256 {kWikipedia}); |
215 | 257 |
216 PopularSites::SitesVector sites; | 258 PopularSites::SitesVector sites; |
217 const base::FilePath old_cache_path = | 259 const base::FilePath old_cache_path = |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
352 "https://www.gstatic.com/chrome/ntp/suggested_sites_ZZ_9.json", | 394 "https://www.gstatic.com/chrome/ntp/suggested_sites_ZZ_9.json", |
353 {kChromium}); | 395 {kChromium}); |
354 EXPECT_THAT(FetchPopularSites(/*force_download=*/false, &sites), | 396 EXPECT_THAT(FetchPopularSites(/*force_download=*/false, &sites), |
355 Eq(base::Optional<bool>(true))); | 397 Eq(base::Optional<bool>(true))); |
356 ASSERT_THAT(sites.size(), Eq(1u)); | 398 ASSERT_THAT(sites.size(), Eq(1u)); |
357 EXPECT_THAT(sites[0].url, URLEq("https://www.chromium.org/")); | 399 EXPECT_THAT(sites[0].url, URLEq("https://www.chromium.org/")); |
358 } | 400 } |
359 | 401 |
360 } // namespace | 402 } // namespace |
361 } // namespace ntp_tiles | 403 } // namespace ntp_tiles |
OLD | NEW |