Index: components/ntp_snippets/ntp_snippets_service_unittest.cc |
diff --git a/components/ntp_snippets/ntp_snippets_service_unittest.cc b/components/ntp_snippets/ntp_snippets_service_unittest.cc |
index e55dc70720b63c10ca0f06ec288977e854754d48..4318142c93d3da0f7ccb9390925f7cf332792258 100644 |
--- a/components/ntp_snippets/ntp_snippets_service_unittest.cc |
+++ b/components/ntp_snippets/ntp_snippets_service_unittest.cc |
@@ -27,11 +27,13 @@ |
#include "components/ntp_snippets/ntp_snippets_fetcher.h" |
#include "components/ntp_snippets/ntp_snippets_scheduler.h" |
#include "components/ntp_snippets/switches.h" |
+#include "components/prefs/pref_registry_simple.h" |
#include "components/prefs/testing_pref_service.h" |
#include "components/signin/core/browser/account_tracker_service.h" |
#include "components/signin/core/browser/fake_profile_oauth2_token_service.h" |
#include "components/signin/core/browser/fake_signin_manager.h" |
#include "components/signin/core/browser/test_signin_client.h" |
+#include "components/signin/core/common/signin_pref_names.h" |
#include "components/sync_driver/fake_sync_service.h" |
#include "google_apis/google_api_keys.h" |
#include "net/url_request/test_url_fetcher_factory.h" |
@@ -229,6 +231,7 @@ class MockSyncService : public sync_driver::FakeSyncService { |
MOCK_CONST_METHOD0(CanSyncStart, bool()); |
MOCK_CONST_METHOD0(IsSyncActive, bool()); |
MOCK_CONST_METHOD0(ConfigurationDone, bool()); |
+ MOCK_CONST_METHOD0(IsEncryptEverythingEnabled, bool()); |
MOCK_CONST_METHOD0(GetActiveDataTypes, syncer::ModelTypeSet()); |
}; |
@@ -236,12 +239,14 @@ class MockServiceObserver : public NTPSnippetsServiceObserver { |
public: |
MOCK_METHOD0(NTPSnippetsServiceLoaded, void()); |
MOCK_METHOD0(NTPSnippetsServiceShutdown, void()); |
- MOCK_METHOD0(NTPSnippetsServiceDisabled, void()); |
+ MOCK_METHOD1(NTPSnippetsServiceDisabledReasonChanged, |
+ void(DisabledReason disabled_reason)); |
}; |
class WaitForDBLoad : public NTPSnippetsServiceObserver { |
public: |
- WaitForDBLoad(NTPSnippetsService* service) : service_(service) { |
+ WaitForDBLoad(NTPSnippetsService* service, bool check_state) |
+ : service_(service), check_state_(check_state) { |
service_->AddObserver(this); |
if (!service_->ready()) |
run_loop_.Run(); |
@@ -253,14 +258,17 @@ class WaitForDBLoad : public NTPSnippetsServiceObserver { |
private: |
void NTPSnippetsServiceLoaded() override { |
- EXPECT_TRUE(service_->ready()); |
+ if (check_state_) |
+ EXPECT_TRUE(service_->ready()); |
run_loop_.Quit(); |
} |
void NTPSnippetsServiceShutdown() override {} |
- void NTPSnippetsServiceDisabled() override {} |
+ void NTPSnippetsServiceDisabledReasonChanged( |
+ DisabledReason disabled_reason) override {} |
NTPSnippetsService* service_; |
+ bool check_state_; |
base::RunLoop run_loop_; |
DISALLOW_COPY_AND_ASSIGN(WaitForDBLoad); |
@@ -276,12 +284,12 @@ class NTPSnippetsServiceTest : public testing::Test { |
test_url_(base::StringPrintf(kTestContentSnippetsServerFormat, |
google_apis::GetAPIKey().c_str())), |
pref_service_(new TestingPrefServiceSimple()), |
- signin_client_(new TestSigninClient(nullptr)), |
+ signin_client_(new TestSigninClient(pref_service_.get())), |
account_tracker_(new AccountTrackerService()), |
- fake_signin_manager_(new FakeSigninManagerBase(signin_client_.get(), |
- account_tracker_.get())), |
fake_token_service_(new FakeProfileOAuth2TokenService()) { |
NTPSnippetsService::RegisterProfilePrefs(pref_service_->registry()); |
+ RegisterSigninManagerPrefs(); |
+ |
// Since no SuggestionsService is injected in tests, we need to force the |
// service to fetch from all hosts. |
base::CommandLine::ForCurrentProcess()->AppendSwitch( |
@@ -303,10 +311,10 @@ class NTPSnippetsServiceTest : public testing::Test { |
void SetUp() override { |
ResetSyncServiceMock(); |
EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); |
- CreateSnippetsService(/*enabled=*/true); |
+ CreateSnippetsService(/*enabled=*/true, /*sign_in=*/true); |
} |
- void CreateSnippetsService(bool enabled) { |
+ void CreateSnippetsService(bool enabled, bool sign_in) { |
if (service_) |
service_->Shutdown(); |
@@ -319,18 +327,29 @@ class NTPSnippetsServiceTest : public testing::Test { |
// create the new one, otherwise opening the new database will fail. |
service_.reset(); |
+ fake_signin_manager_.reset(new FakeSigninManagerBase( |
+ signin_client_.get(), account_tracker_.get())); |
+ |
+ NTPSnippetsFetcher* snippets_fetcher = new NTPSnippetsFetcher( |
+ fake_signin_manager_.get(), fake_token_service_.get(), |
+ std::move(request_context_getter), base::Bind(&ParseJson), |
+ /*is_stable_channel=*/true); |
+ |
+ if (sign_in) { |
+ fake_signin_manager_.get()->SignIn("foo@bar.com"); |
+ snippets_fetcher->SetPersonalizationForTesting( |
+ NTPSnippetsFetcher::Personalization::kNonPersonal); |
+ } |
+ |
service_.reset(new NTPSnippetsService( |
- enabled, pref_service_.get(), mock_sync_service_.get(), nullptr, |
- std::string("fr"), &scheduler_, |
- base::WrapUnique(new NTPSnippetsFetcher( |
- fake_signin_manager_.get(), fake_token_service_.get(), |
- std::move(request_context_getter), base::Bind(&ParseJson), |
- /*is_stable_channel=*/true)), |
- /*image_fetcher=*/nullptr, |
- base::WrapUnique(new NTPSnippetsDatabase(database_dir_.path(), |
- task_runner)))); |
+ enabled, pref_service_.get(), fake_signin_manager_.get(), |
+ mock_sync_service_.get(), nullptr, std::string("fr"), &scheduler_, |
+ base::WrapUnique(snippets_fetcher), /*image_fetcher=*/nullptr, |
+ base::WrapUnique( |
+ new NTPSnippetsDatabase(database_dir_.path(), task_runner)))); |
+ |
if (enabled) |
- WaitForDBLoad(service_.get()); |
+ WaitForDBLoad(service_.get(), sign_in); |
} |
protected: |
@@ -361,6 +380,8 @@ class NTPSnippetsServiceTest : public testing::Test { |
ON_CALL(*mock_sync_service_, CanSyncStart()).WillByDefault(Return(true)); |
ON_CALL(*mock_sync_service_, IsSyncActive()).WillByDefault(Return(true)); |
+ ON_CALL(*mock_sync_service_, IsEncryptEverythingEnabled()) |
+ .WillByDefault(Return(false)); |
ON_CALL(*mock_sync_service_, ConfigurationDone()) |
.WillByDefault(Return(true)); |
ON_CALL(*mock_sync_service_, GetActiveDataTypes()) |
@@ -368,6 +389,15 @@ class NTPSnippetsServiceTest : public testing::Test { |
Return(syncer::ModelTypeSet(syncer::HISTORY_DELETE_DIRECTIVES))); |
} |
+ void RegisterSigninManagerPrefs() { |
+ pref_service_->registry()->RegisterStringPref( |
+ prefs::kGoogleServicesAccountId, std::string()); |
+ pref_service_->registry()->RegisterStringPref( |
+ prefs::kGoogleServicesLastAccountId, std::string()); |
+ pref_service_->registry()->RegisterStringPref( |
+ prefs::kGoogleServicesLastUsername, std::string()); |
+ } |
+ |
private: |
base::MessageLoop message_loop_; |
FailingFakeURLFetcherFactory failing_url_fetcher_factory_; |
@@ -378,7 +408,7 @@ class NTPSnippetsServiceTest : public testing::Test { |
std::unique_ptr<TestSigninClient> signin_client_; |
std::unique_ptr<AccountTrackerService> account_tracker_; |
std::unique_ptr<MockSyncService> mock_sync_service_; // Null by default. |
- std::unique_ptr<SigninManagerBase> fake_signin_manager_; |
+ std::unique_ptr<FakeSigninManagerBase> fake_signin_manager_; |
std::unique_ptr<OAuth2TokenService> fake_token_service_; |
MockScheduler scheduler_; |
// Last so that the dependencies are deleted after the service. |
@@ -393,7 +423,7 @@ class NTPSnippetsServiceDisabledTest : public NTPSnippetsServiceTest { |
public: |
void SetUp() override { |
EXPECT_CALL(mock_scheduler(), Unschedule()).Times(1); |
- CreateSnippetsService(/*enabled=*/false); |
+ CreateSnippetsService(/*enabled=*/false, /*sign_in=*/true); |
} |
}; |
@@ -525,7 +555,7 @@ TEST_F(NTPSnippetsServiceTest, Discard) { |
// The snippet should stay discarded even after re-creating the service. |
EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); |
- CreateSnippetsService(/*enabled=*/true); |
+ CreateSnippetsService(/*enabled=*/true, /*sign_in=*/true); |
LoadFromJSONString(json_str); |
EXPECT_THAT(service()->snippets(), IsEmpty()); |
@@ -841,7 +871,7 @@ TEST_F(NTPSnippetsServiceTest, LogNumArticlesHistogram) { |
// Recreating the service and loading from prefs shouldn't count as fetched |
// articles. |
EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); |
- CreateSnippetsService(/*enabled=*/true); |
+ CreateSnippetsService(/*enabled=*/true, /*sign_in=*/true); |
tester.ExpectTotalCount("NewTabPage.Snippets.NumArticlesFetched", 4); |
} |
@@ -876,14 +906,19 @@ TEST_F(NTPSnippetsServiceTest, DiscardShouldRespectAllKnownUrls) { |
TEST_F(NTPSnippetsServiceTest, SyncStateCompatibility) { |
// The default test setup has a compatible sync state. |
- EXPECT_EQ(DisabledReason::NONE, service()->GetDisabledReason()); |
+ EXPECT_EQ(DisabledReason::NONE, service()->GetNewDisabledReason()); |
// History sync disabled. |
ON_CALL(*mock_sync_service(), GetActiveDataTypes()) |
.WillByDefault(Return(syncer::ModelTypeSet())); |
EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED, |
- service()->GetDisabledReason()); |
- ResetSyncServiceMock(); |
+ service()->GetNewDisabledReason()); |
+ |
+ // Encryption enabled. |
+ ON_CALL(*mock_sync_service(), IsEncryptEverythingEnabled()) |
+ .WillByDefault(Return(true)); |
+ EXPECT_EQ(DisabledReason::PASSPHRASE_ENCRYPTION_ENABLED, |
+ service()->GetNewDisabledReason()); |
// Not done loading. |
ON_CALL(*mock_sync_service(), ConfigurationDone()) |
@@ -891,19 +926,23 @@ TEST_F(NTPSnippetsServiceTest, SyncStateCompatibility) { |
ON_CALL(*mock_sync_service(), GetActiveDataTypes()) |
.WillByDefault(Return(syncer::ModelTypeSet())); |
EXPECT_EQ(DisabledReason::HISTORY_SYNC_STATE_UNKNOWN, |
- service()->GetDisabledReason()); |
- ResetSyncServiceMock(); |
+ service()->GetNewDisabledReason()); |
// Sync disabled. |
ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false)); |
- EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED, |
- service()->GetDisabledReason()); |
- ResetSyncServiceMock(); |
+ EXPECT_EQ(DisabledReason::SYNC_DISABLED, service()->GetNewDisabledReason()); |
- // No service. |
+ // No sync service. |
service()->sync_service_ = nullptr; |
- EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED, |
- service()->GetDisabledReason()); |
+ EXPECT_EQ(DisabledReason::SYNC_DISABLED, service()->GetNewDisabledReason()); |
+ |
+ // Signed out. |
+ CreateSnippetsService(/*enabled=*/true, /*sign_in=*/false); |
+ EXPECT_EQ(DisabledReason::SIGNED_OUT, service()->GetNewDisabledReason()); |
+ |
+ CreateSnippetsService(/*enabled=*/false, /*sign_in=*/true); |
+ EXPECT_EQ(DisabledReason::EXPLICITLY_DISABLED, |
+ service()->GetNewDisabledReason()); |
} |
TEST_F(NTPSnippetsServiceTest, HistorySyncStateChanges) { |
@@ -914,7 +953,8 @@ TEST_F(NTPSnippetsServiceTest, HistorySyncStateChanges) { |
ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false)); |
// The service should notify observers it's been disabled and clear the |
// snippets instead of pulling new ones. |
- EXPECT_CALL(mock_observer, NTPSnippetsServiceDisabled()); |
+ EXPECT_CALL(mock_observer, NTPSnippetsServiceDisabledReasonChanged( |
+ DisabledReason::SYNC_DISABLED)); |
SetUpFetchResponse(GetTestJson({GetSnippet()})); |
service()->OnStateChanged(); |
base::RunLoop().RunUntilIdle(); |
@@ -925,6 +965,8 @@ TEST_F(NTPSnippetsServiceTest, HistorySyncStateChanges) { |
ResetSyncServiceMock(); |
// The service should be ready again and load snippets. |
EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); |
+ EXPECT_CALL(mock_observer, |
+ NTPSnippetsServiceDisabledReasonChanged(DisabledReason::NONE)); |
SetUpFetchResponse(GetTestJson({GetSnippet()})); |
service()->OnStateChanged(); |
base::RunLoop().RunUntilIdle(); |