Index: components/ntp_tiles/popular_sites_impl_unittest.cc |
diff --git a/components/ntp_tiles/popular_sites_impl_unittest.cc b/components/ntp_tiles/popular_sites_impl_unittest.cc |
index 86fbfde2fd26ec406224532cb39d0dd28a0c74e0..8a2ef3aa2aee802475c33fb791f8a18eebe4be48 100644 |
--- a/components/ntp_tiles/popular_sites_impl_unittest.cc |
+++ b/components/ntp_tiles/popular_sites_impl_unittest.cc |
@@ -53,6 +53,13 @@ using TestPopularSiteVector = std::vector<TestPopularSite>; |
return ::testing::Eq(GURL(s)); |
} |
+size_t GetNumberOfDefaultPopularSitesForPlatform() { |
+#if defined(OS_IOS) || defined(OS_ANDROID) |
+ return 8ul; |
+#endif |
sfiera
2017/02/13 10:58:01
I'd put "return 0" in an #else because it would ot
fhorschig
2017/02/13 14:57:00
Done.
|
+ return 0; |
+} |
+ |
class PopularSitesTest : public ::testing::Test { |
protected: |
PopularSitesTest() |
@@ -117,15 +124,12 @@ class PopularSitesTest : public ::testing::Test { |
scoped_refptr<net::TestURLRequestContextGetter> url_request_context( |
new net::TestURLRequestContextGetter( |
base::ThreadTaskRunnerHandle::Get())); |
- PopularSitesImpl popular_sites(worker_pool_owner_.pool().get(), &prefs_, |
- /*template_url_service=*/nullptr, |
- /*variations_service=*/nullptr, |
- url_request_context.get(), cache_dir_, |
- base::Bind(JsonUnsafeParser::Parse)); |
+ std::unique_ptr<PopularSites> popular_sites = |
+ CreatePopularSites(url_request_context.get()); |
base::RunLoop loop; |
base::Optional<bool> save_success; |
- if (popular_sites.MaybeStartFetch( |
+ if (popular_sites->MaybeStartFetch( |
force_download, base::Bind( |
[](base::Optional<bool>* save_success, |
base::RunLoop* loop, bool success) { |
@@ -135,10 +139,19 @@ class PopularSitesTest : public ::testing::Test { |
&save_success, &loop))) { |
loop.Run(); |
} |
- *sites = popular_sites.sites(); |
+ *sites = popular_sites->sites(); |
return save_success; |
} |
+ std::unique_ptr<PopularSites> CreatePopularSites( |
+ net::URLRequestContextGetter* context) { |
+ return base::MakeUnique<PopularSitesImpl>( |
+ worker_pool_owner_.pool().get(), &prefs_, |
+ /*template_url_service=*/nullptr, |
+ /*variations_service=*/nullptr, context, cache_dir_, |
+ base::Bind(JsonUnsafeParser::Parse)); |
+ } |
+ |
const TestPopularSite kWikipedia; |
const TestPopularSite kYouTube; |
const TestPopularSite kChromium; |
@@ -169,6 +182,15 @@ TEST_F(PopularSitesTest, Basic) { |
EXPECT_THAT(sites[0].favicon_url, URLEq("")); |
} |
+TEST_F(PopularSitesTest, ContainsDefaultTilesRightAfterConstruction) { |
+ scoped_refptr<net::TestURLRequestContextGetter> url_request_context( |
+ new net::TestURLRequestContextGetter( |
+ base::ThreadTaskRunnerHandle::Get())); |
+ |
+ EXPECT_THAT(CreatePopularSites(url_request_context.get())->sites().size(), |
+ Eq(GetNumberOfDefaultPopularSitesForPlatform())); |
+} |
+ |
TEST_F(PopularSitesTest, Fallback) { |
SetCountryAndVersion("ZZ", "9"); |
RespondWith404( |
@@ -194,7 +216,7 @@ TEST_F(PopularSitesTest, Fallback) { |
URLEq("https://www.chromium.org/favicon.ico")); |
} |
-TEST_F(PopularSitesTest, Failure) { |
+TEST_F(PopularSitesTest, PopulatesWithDefaultResoucesOnFailure) { |
SetCountryAndVersion("ZZ", "9"); |
RespondWith404( |
"https://www.gstatic.com/chrome/ntp/suggested_sites_ZZ_9.json"); |
@@ -204,7 +226,43 @@ TEST_F(PopularSitesTest, Failure) { |
PopularSites::SitesVector sites; |
EXPECT_THAT(FetchPopularSites(/*force_download=*/false, &sites), |
Eq(base::Optional<bool>(false))); |
- ASSERT_THAT(sites, IsEmpty()); |
+ EXPECT_THAT(sites.size(), Eq(GetNumberOfDefaultPopularSitesForPlatform())); |
+} |
+ |
+TEST_F(PopularSitesTest, ProvidesDefaultSitesUntilCallbackReturns) { |
+ SetCountryAndVersion("ZZ", "9"); |
+ RespondWithJSON( |
+ "https://www.gstatic.com/chrome/ntp/suggested_sites_ZZ_9.json", |
+ {kWikipedia}); |
+ scoped_refptr<net::TestURLRequestContextGetter> url_request_context( |
+ new net::TestURLRequestContextGetter( |
+ base::ThreadTaskRunnerHandle::Get())); |
+ std::unique_ptr<PopularSites> popular_sites = |
+ CreatePopularSites(url_request_context.get()); |
+ |
+ base::RunLoop loop; |
+ base::Optional<bool> save_success = false; |
+ |
+ bool callback_was_scheduled = popular_sites->MaybeStartFetch( |
+ /*force_download=*/true, base::Bind( |
+ [](base::Optional<bool>* save_success, |
+ base::RunLoop* loop, bool success) { |
+ save_success->emplace(success); |
+ loop->Quit(); |
+ }, |
+ &save_success, &loop)); |
+ |
+ // Assert that callback was scheduled so we can wait for its completion. |
+ ASSERT_TRUE(callback_was_scheduled); |
+ // There should be 8 default sites as nothing was fetched yet. |
+ EXPECT_THAT(popular_sites->sites().size(), |
+ Eq(GetNumberOfDefaultPopularSitesForPlatform())); |
+ |
+ loop.Run(); // Wait for the fetch to finish and the callback to return. |
+ |
+ EXPECT_TRUE(save_success.value()); |
+ // The 1 fetched site should replace the default sites. |
+ EXPECT_THAT(popular_sites->sites().size(), Eq(1ul)); |
} |
TEST_F(PopularSitesTest, ClearsCacheFileFromOldVersions) { |