Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1004)

Unified Diff: components/ntp_tiles/popular_sites_impl_unittest.cc

Issue 2668943002: provide static popular sites for first run (Closed)
Patch Set: Revert test changes. Construction of PopularSites is always safe. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698