Index: components/suggestions/suggestions_service_unittest.cc |
diff --git a/components/suggestions/suggestions_service_unittest.cc b/components/suggestions/suggestions_service_unittest.cc |
index dfd0e59472cb06a2f1d15e1f8e639df4e19daac6..355450c96f1a56a2605e2592344fb2554108162c 100644 |
--- a/components/suggestions/suggestions_service_unittest.cc |
+++ b/components/suggestions/suggestions_service_unittest.cc |
@@ -36,6 +36,9 @@ namespace { |
const char kTestTitle[] = "a title"; |
const char kTestUrl[] = "http://go.com"; |
+const char kTestFaviconUrl[] = |
+ "https://s2.googleusercontent.com/s2/favicons?domain_url=" |
+ "http://go.com&alt=s&sz=32"; |
const char kBlacklistUrl[] = "http://blacklist.com"; |
const char kBlacklistUrlAlt[] = "http://blacklist-atl.com"; |
const int64 kTestDefaultExpiry = 1402200000000000; |
@@ -59,7 +62,7 @@ scoped_ptr<net::FakeURLFetcher> CreateURLFetcher( |
std::string GetExpectedBlacklistRequestUrl(const GURL& blacklist_url) { |
std::stringstream request_url; |
- request_url << "https://www.google.com/chromesuggestions/blacklist?t=2&url=" |
+ request_url << suggestions::kSuggestionsBlacklistURLPrefix |
<< net::EscapeQueryParamValue(blacklist_url.spec(), true); |
return request_url.str(); |
} |
@@ -109,15 +112,12 @@ class TestSuggestionsStore : public suggestions::SuggestionsStore { |
cached_suggestions = CreateSuggestionsProfile(); |
} |
bool LoadSuggestions(SuggestionsProfile* suggestions) override { |
- if (cached_suggestions.suggestions_size()) { |
- *suggestions = cached_suggestions; |
- return true; |
- } |
- return false; |
+ suggestions->CopyFrom(cached_suggestions); |
+ return cached_suggestions.suggestions_size(); |
} |
bool StoreSuggestions(const SuggestionsProfile& suggestions) |
override { |
- cached_suggestions = suggestions; |
+ cached_suggestions.CopyFrom(suggestions); |
return true; |
} |
void ClearSuggestions() override { |
@@ -147,15 +147,23 @@ class MockBlacklistStore : public suggestions::BlacklistStore { |
MOCK_METHOD1(GetCandidateForUpload, bool(GURL*)); |
MOCK_METHOD1(RemoveUrl, bool(const GURL&)); |
MOCK_METHOD1(FilterSuggestions, void(SuggestionsProfile*)); |
+ MOCK_METHOD0(ClearBlacklist, void()); |
}; |
class SuggestionsServiceTest : public testing::Test { |
public: |
- void CheckSuggestionsData(const SuggestionsProfile& suggestions_profile) { |
+ void CheckCallback(const SuggestionsProfile& suggestions_profile) { |
+ ++suggestions_data_callback_count_; |
+ } |
+ |
+ void CheckSuggestionsData() { |
+ SuggestionsProfile suggestions_profile; |
+ test_suggestions_store_->LoadSuggestions(&suggestions_profile); |
EXPECT_EQ(1, suggestions_profile.suggestions_size()); |
EXPECT_EQ(kTestTitle, suggestions_profile.suggestions(0).title()); |
EXPECT_EQ(kTestUrl, suggestions_profile.suggestions(0).url()); |
- ++suggestions_data_check_count_; |
+ EXPECT_EQ(kTestFaviconUrl, |
+ suggestions_profile.suggestions(0).favicon_url()); |
} |
void SetBlacklistFailure() { |
@@ -171,14 +179,14 @@ class SuggestionsServiceTest : public testing::Test { |
++suggestions_empty_data_count_; |
} |
- int suggestions_data_check_count_; |
+ int suggestions_data_callback_count_; |
int suggestions_empty_data_count_; |
bool blacklisting_failed_; |
bool undo_blacklisting_failed_; |
protected: |
SuggestionsServiceTest() |
- : suggestions_data_check_count_(0), |
+ : suggestions_data_callback_count_(0), |
suggestions_empty_data_count_(0), |
blacklisting_failed_(false), |
undo_blacklisting_failed_(false), |
@@ -199,10 +207,7 @@ class SuggestionsServiceTest : public testing::Test { |
CreateSuggestionsServiceWithMocks()); |
EXPECT_TRUE(suggestions_service != NULL); |
- // Add some suggestions in the cache. |
- FillSuggestionsStore(); |
- SuggestionsProfile suggestions_profile; |
- test_suggestions_store_->LoadSuggestions(&suggestions_profile); |
+ SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); |
// Set up net::FakeURLFetcherFactory. |
factory_.SetFakeResponse(GURL(kSuggestionsURL), |
@@ -218,15 +223,16 @@ class SuggestionsServiceTest : public testing::Test { |
// Send the request. The data will be returned to the callback. |
suggestions_service->FetchSuggestionsData( |
- sync_state, |
- base::Bind(&SuggestionsServiceTest::CheckSuggestionsData, |
- base::Unretained(this))); |
+ sync_state, base::Bind(&SuggestionsServiceTest::CheckCallback, |
+ base::Unretained(this))); |
// Ensure that CheckSuggestionsData() ran once. |
- EXPECT_EQ(1, suggestions_data_check_count_); |
+ EXPECT_EQ(1, suggestions_data_callback_count_); |
// Let the network request run. |
io_message_loop_.RunUntilIdle(); |
+ |
+ CheckSuggestionsData(); |
} |
SuggestionsService* CreateSuggestionsServiceWithMocks() { |
@@ -242,24 +248,18 @@ class SuggestionsServiceTest : public testing::Test { |
scoped_ptr<BlacklistStore>(mock_blacklist_store_)); |
} |
- void FillSuggestionsStore() { |
- test_suggestions_store_->StoreSuggestions(CreateSuggestionsProfile()); |
- } |
- |
void Blacklist(SuggestionsService* suggestions_service, GURL url) { |
suggestions_service->BlacklistURL( |
- url, |
- base::Bind(&SuggestionsServiceTest::CheckSuggestionsData, |
- base::Unretained(this)), |
+ url, base::Bind(&SuggestionsServiceTest::CheckCallback, |
+ base::Unretained(this)), |
base::Bind(&SuggestionsServiceTest::SetBlacklistFailure, |
base::Unretained(this))); |
} |
void UndoBlacklist(SuggestionsService* suggestions_service, GURL url) { |
suggestions_service->UndoBlacklistURL( |
- url, |
- base::Bind(&SuggestionsServiceTest::CheckSuggestionsData, |
- base::Unretained(this)), |
+ url, base::Bind(&SuggestionsServiceTest::CheckCallback, |
+ base::Unretained(this)), |
base::Bind(&SuggestionsServiceTest::SetUndoBlacklistFailure, |
base::Unretained(this))); |
} |
@@ -302,7 +302,7 @@ class SuggestionsServiceTest : public testing::Test { |
Blacklist(suggestions_service.get(), blacklist_url); |
UndoBlacklist(suggestions_service.get(), blacklist_url); |
- EXPECT_EQ(1, suggestions_data_check_count_); |
+ EXPECT_EQ(1, suggestions_data_callback_count_); |
EXPECT_FALSE(blacklisting_failed_); |
EXPECT_TRUE(undo_blacklisting_failed_); |
} |
@@ -333,8 +333,6 @@ TEST_F(SuggestionsServiceTest, FetchSuggestionsDataSyncDisabled) { |
CreateSuggestionsServiceWithMocks()); |
EXPECT_TRUE(suggestions_service != NULL); |
- FillSuggestionsStore(); |
- |
// Send the request. Cache is cleared and empty data will be returned to the |
// callback. |
suggestions_service->FetchSuggestionsData( |
@@ -370,9 +368,6 @@ TEST_F(SuggestionsServiceTest, IssueRequestIfNoneOngoingResponseNotOK) { |
CreateSuggestionsServiceWithMocks()); |
EXPECT_TRUE(suggestions_service != NULL); |
- // Add some suggestions in the cache. |
- FillSuggestionsStore(); |
- |
// Fake a non-200 response code. |
factory_.SetFakeResponse(GURL(kSuggestionsURL), "irrelevant", |
net::HTTP_BAD_REQUEST, |
@@ -431,9 +426,9 @@ TEST_F(SuggestionsServiceTest, BlacklistURL) { |
io_message_loop_.RunUntilIdle(); |
base::MessageLoop::current()->RunUntilIdle(); |
- // Ensure that CheckSuggestionsData() ran once. |
- EXPECT_EQ(1, suggestions_data_check_count_); |
+ EXPECT_EQ(1, suggestions_data_callback_count_); |
EXPECT_FALSE(blacklisting_failed_); |
+ CheckSuggestionsData(); |
} |
TEST_F(SuggestionsServiceTest, BlacklistURLFails) { |
@@ -447,7 +442,7 @@ TEST_F(SuggestionsServiceTest, BlacklistURLFails) { |
Blacklist(suggestions_service.get(), blacklist_url); |
EXPECT_TRUE(blacklisting_failed_); |
- EXPECT_EQ(0, suggestions_data_check_count_); |
+ EXPECT_EQ(0, suggestions_data_callback_count_); |
} |
// Initial blacklist request fails, triggering a second which succeeds. |
@@ -493,7 +488,7 @@ TEST_F(SuggestionsServiceTest, BlacklistURLRequestFails) { |
// Blacklist call, first request attempt. |
Blacklist(suggestions_service.get(), blacklist_url); |
- EXPECT_EQ(1, suggestions_data_check_count_); |
+ EXPECT_EQ(1, suggestions_data_callback_count_); |
EXPECT_FALSE(blacklisting_failed_); |
// Wait for the first scheduling, the first request, the second scheduling, |
@@ -505,6 +500,7 @@ TEST_F(SuggestionsServiceTest, BlacklistURLRequestFails) { |
base::MessageLoop::current()->RunUntilIdle(); |
io_message_loop_.RunUntilIdle(); |
base::MessageLoop::current()->RunUntilIdle(); |
+ CheckSuggestionsData(); |
} |
TEST_F(SuggestionsServiceTest, UndoBlacklistURL) { |
@@ -537,11 +533,43 @@ TEST_F(SuggestionsServiceTest, UndoBlacklistURL) { |
Blacklist(suggestions_service.get(), blacklist_url); |
UndoBlacklist(suggestions_service.get(), blacklist_url); |
- EXPECT_EQ(2, suggestions_data_check_count_); |
+ EXPECT_EQ(2, suggestions_data_callback_count_); |
EXPECT_FALSE(blacklisting_failed_); |
EXPECT_FALSE(undo_blacklisting_failed_); |
} |
+TEST_F(SuggestionsServiceTest, ClearBlacklist) { |
+ scoped_ptr<SuggestionsService> suggestions_service( |
+ CreateSuggestionsServiceWithMocks()); |
+ EXPECT_TRUE(suggestions_service != NULL); |
+ // Ensure scheduling the request doesn't happen before undo. |
+ base::TimeDelta delay = base::TimeDelta::FromHours(1); |
+ suggestions_service->set_blacklist_delay(delay); |
+ SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); |
+ GURL blacklist_url(kBlacklistUrl); |
+ |
+ factory_.SetFakeResponse(GURL(suggestions::kSuggestionsBlacklistClearURL), |
+ suggestions_profile.SerializeAsString(), |
+ net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
+ |
+ // Blacklist expectations. |
+ EXPECT_CALL(*mock_blacklist_store_, BlacklistUrl(Eq(blacklist_url))) |
+ .WillOnce(Return(true)); |
+ EXPECT_CALL(*mock_thumbnail_manager_, |
+ Initialize(EqualsProto(suggestions_profile))) |
+ .Times(AnyNumber()); |
+ EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_)).Times(AnyNumber()); |
+ EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) |
+ .WillOnce(DoAll(SetArgPointee<0>(delay), Return(true))); |
+ EXPECT_CALL(*mock_blacklist_store_, ClearBlacklist()); |
+ |
+ Blacklist(suggestions_service.get(), blacklist_url); |
+ suggestions_service->ClearBlacklist(base::Bind( |
+ &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); |
+ |
+ EXPECT_EQ(2, suggestions_data_callback_count_); |
+ EXPECT_FALSE(blacklisting_failed_); |
+} |
TEST_F(SuggestionsServiceTest, UndoBlacklistURLFailsIfNotInBlacklist) { |
UndoBlacklistURLFailsHelper(true); |