| 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();
|
|
|