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

Side by Side Diff: components/ntp_snippets/ntp_snippets_service_unittest.cc

Issue 2000233002: [NTP Snippets] Unschedule fetches when the service should be disabled (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@SnippetsDB
Patch Set: Rebase and address comments Created 4 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/ntp_snippets/ntp_snippets_service.h" 5 #include "components/ntp_snippets/ntp_snippets_service.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 public: 236 public:
237 MOCK_METHOD0(NTPSnippetsServiceLoaded, void()); 237 MOCK_METHOD0(NTPSnippetsServiceLoaded, void());
238 MOCK_METHOD0(NTPSnippetsServiceShutdown, void()); 238 MOCK_METHOD0(NTPSnippetsServiceShutdown, void());
239 MOCK_METHOD0(NTPSnippetsServiceDisabled, void()); 239 MOCK_METHOD0(NTPSnippetsServiceDisabled, void());
240 }; 240 };
241 241
242 class WaitForDBLoad : public NTPSnippetsServiceObserver { 242 class WaitForDBLoad : public NTPSnippetsServiceObserver {
243 public: 243 public:
244 WaitForDBLoad(NTPSnippetsService* service) : service_(service) { 244 WaitForDBLoad(NTPSnippetsService* service) : service_(service) {
245 service_->AddObserver(this); 245 service_->AddObserver(this);
246 if (!service_->loaded()) 246 if (!service_->ready())
247 run_loop_.Run(); 247 run_loop_.Run();
248 } 248 }
249 249
250 ~WaitForDBLoad() override { 250 ~WaitForDBLoad() override {
251 service_->RemoveObserver(this); 251 service_->RemoveObserver(this);
252 } 252 }
253 253
254 private: 254 private:
255 void NTPSnippetsServiceLoaded() override { 255 void NTPSnippetsServiceLoaded() override {
256 EXPECT_TRUE(service_->loaded()); 256 EXPECT_TRUE(service_->ready());
257 run_loop_.Quit(); 257 run_loop_.Quit();
258 } 258 }
259 259
260 void NTPSnippetsServiceShutdown() override {} 260 void NTPSnippetsServiceShutdown() override {}
261 void NTPSnippetsServiceDisabled() override {} 261 void NTPSnippetsServiceDisabled() override {}
262 262
263 NTPSnippetsService* service_; 263 NTPSnippetsService* service_;
264 base::RunLoop run_loop_; 264 base::RunLoop run_loop_;
265 265
266 DISALLOW_COPY_AND_ASSIGN(WaitForDBLoad); 266 DISALLOW_COPY_AND_ASSIGN(WaitForDBLoad);
(...skipping 27 matching lines...) Expand all
294 service_->Shutdown(); 294 service_->Shutdown();
295 295
296 // We need to run the message loop after deleting the database, because 296 // We need to run the message loop after deleting the database, because
297 // ProtoDatabaseImpl deletes the actual LevelDB asynchronously on the task 297 // ProtoDatabaseImpl deletes the actual LevelDB asynchronously on the task
298 // runner. Without this, we'd get reports of memory leaks. 298 // runner. Without this, we'd get reports of memory leaks.
299 service_.reset(); 299 service_.reset();
300 base::RunLoop().RunUntilIdle(); 300 base::RunLoop().RunUntilIdle();
301 } 301 }
302 302
303 void SetUp() override { 303 void SetUp() override {
304 ResetSyncServiceMock();
304 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); 305 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1);
305 CreateSnippetsService(/*enabled=*/true); 306 CreateSnippetsService(/*enabled=*/true);
306 } 307 }
307 308
308 void CreateSnippetsService(bool enabled) { 309 void CreateSnippetsService(bool enabled) {
309 if (service_) 310 if (service_)
310 service_->Shutdown(); 311 service_->Shutdown();
311 312
312 scoped_refptr<base::SingleThreadTaskRunner> task_runner( 313 scoped_refptr<base::SingleThreadTaskRunner> task_runner(
313 base::ThreadTaskRunnerHandle::Get()); 314 base::ThreadTaskRunnerHandle::Get());
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 std::unique_ptr<NTPSnippetsService> service_; 385 std::unique_ptr<NTPSnippetsService> service_;
385 386
386 base::ScopedTempDir database_dir_; 387 base::ScopedTempDir database_dir_;
387 388
388 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsServiceTest); 389 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsServiceTest);
389 }; 390 };
390 391
391 class NTPSnippetsServiceWithSyncTest : public NTPSnippetsServiceTest { 392 class NTPSnippetsServiceWithSyncTest : public NTPSnippetsServiceTest {
392 public: 393 public:
393 void SetUp() override { 394 void SetUp() override {
394 ResetSyncServiceMock(); 395 // ResetSyncServiceMock();
395 NTPSnippetsServiceTest::SetUp(); 396 NTPSnippetsServiceTest::SetUp();
396 } 397 }
397 }; 398 };
398 399
399 class NTPSnippetsServiceDisabledTest : public NTPSnippetsServiceTest { 400 class NTPSnippetsServiceDisabledTest : public NTPSnippetsServiceTest {
400 public: 401 public:
401 void SetUp() override { 402 void SetUp() override {
402 EXPECT_CALL(mock_scheduler(), Unschedule()).Times(1); 403 EXPECT_CALL(mock_scheduler(), Unschedule()).Times(1);
403 CreateSnippetsService(/*enabled=*/false); 404 CreateSnippetsService(/*enabled=*/false);
404 } 405 }
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticles"), 839 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticles"),
839 ElementsAre(base::Bucket(/*min=*/0, /*count=*/3), 840 ElementsAre(base::Bucket(/*min=*/0, /*count=*/3),
840 base::Bucket(/*min=*/1, /*count=*/2))); 841 base::Bucket(/*min=*/1, /*count=*/2)));
841 // Discarded snippets shouldn't influence NumArticlesFetched. 842 // Discarded snippets shouldn't influence NumArticlesFetched.
842 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticlesFetched"), 843 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticlesFetched"),
843 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1), 844 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1),
844 base::Bucket(/*min=*/1, /*count=*/3))); 845 base::Bucket(/*min=*/1, /*count=*/3)));
845 EXPECT_THAT( 846 EXPECT_THAT(
846 tester.GetAllSamples("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"), 847 tester.GetAllSamples("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"),
847 ElementsAre(base::Bucket(/*min=*/1, /*count=*/1))); 848 ElementsAre(base::Bucket(/*min=*/1, /*count=*/1)));
849
850 LOG(INFO) << "DGN - before recreate";
848 // Recreating the service and loading from prefs shouldn't count as fetched 851 // Recreating the service and loading from prefs shouldn't count as fetched
849 // articles. 852 // articles.
850 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); 853 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1);
851 CreateSnippetsService(/*enabled=*/true); 854 CreateSnippetsService(/*enabled=*/true);
852 tester.ExpectTotalCount("NewTabPage.Snippets.NumArticlesFetched", 4); 855 tester.ExpectTotalCount("NewTabPage.Snippets.NumArticlesFetched", 4);
853 } 856 }
854 857
855 TEST_F(NTPSnippetsServiceTest, DiscardShouldRespectAllKnownUrls) { 858 TEST_F(NTPSnippetsServiceTest, DiscardShouldRespectAllKnownUrls) {
856 const std::string creation = 859 const std::string creation =
857 NTPSnippet::TimeToJsonString(GetDefaultCreationTime()); 860 NTPSnippet::TimeToJsonString(GetDefaultCreationTime());
(...skipping 18 matching lines...) Expand all
876 EXPECT_THAT(service()->snippets(), IsEmpty()); 879 EXPECT_THAT(service()->snippets(), IsEmpty());
877 880
878 // The same article from the AOL domain should now be detected as discarded. 881 // The same article from the AOL domain should now be detected as discarded.
879 LoadFromJSONString(GetTestJson({GetSnippetWithUrlAndTimesAndSources( 882 LoadFromJSONString(GetTestJson({GetSnippetWithUrlAndTimesAndSources(
880 source_urls[1], creation, expiry, source_urls, publishers, amp_urls)})); 883 source_urls[1], creation, expiry, source_urls, publishers, amp_urls)}));
881 ASSERT_THAT(service()->snippets(), IsEmpty()); 884 ASSERT_THAT(service()->snippets(), IsEmpty());
882 } 885 }
883 886
884 TEST_F(NTPSnippetsServiceWithSyncTest, SyncStateCompatibility) { 887 TEST_F(NTPSnippetsServiceWithSyncTest, SyncStateCompatibility) {
885 // The default test setup has a compatible sync state. 888 // The default test setup has a compatible sync state.
886 EXPECT_FALSE(service()->IsSyncStateIncompatible()); 889 EXPECT_EQ(DisabledReason::NONE, service()->GetDisabledReason());
887 890
888 // History sync disabled. 891 // History sync disabled.
889 ON_CALL(*mock_sync_service(), GetActiveDataTypes()) 892 ON_CALL(*mock_sync_service(), GetActiveDataTypes())
890 .WillByDefault(Return(syncer::ModelTypeSet())); 893 .WillByDefault(Return(syncer::ModelTypeSet()));
891 EXPECT_TRUE(service()->IsSyncStateIncompatible()); 894 EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED,
895 service()->GetDisabledReason());
892 ResetSyncServiceMock(); 896 ResetSyncServiceMock();
893 897
894 // Not done loading. 898 // Not done loading.
895 ON_CALL(*mock_sync_service(), ConfigurationDone()) 899 ON_CALL(*mock_sync_service(), ConfigurationDone())
896 .WillByDefault(Return(false)); 900 .WillByDefault(Return(false));
897 ON_CALL(*mock_sync_service(), GetActiveDataTypes()) 901 ON_CALL(*mock_sync_service(), GetActiveDataTypes())
898 .WillByDefault(Return(syncer::ModelTypeSet())); 902 .WillByDefault(Return(syncer::ModelTypeSet()));
899 EXPECT_FALSE(service()->IsSyncStateIncompatible()); 903 EXPECT_EQ(DisabledReason::HISTORY_SYNC_STATE_UNKNOWN,
904 service()->GetDisabledReason());
900 ResetSyncServiceMock(); 905 ResetSyncServiceMock();
901 906
902 // Sync disabled. 907 // Sync disabled.
903 ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false)); 908 ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false));
904 EXPECT_TRUE(service()->IsSyncStateIncompatible()); 909 EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED,
910 service()->GetDisabledReason());
905 ResetSyncServiceMock(); 911 ResetSyncServiceMock();
906 912
907 // No service. 913 // No service.
908 service()->sync_service_ = nullptr; 914 service()->sync_service_ = nullptr;
909 EXPECT_TRUE(service()->IsSyncStateIncompatible()); 915 EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED,
916 service()->GetDisabledReason());
910 } 917 }
911 918
912 TEST_F(NTPSnippetsServiceWithSyncTest, HistorySyncStateChanges) { 919 TEST_F(NTPSnippetsServiceWithSyncTest, HistorySyncStateChanges) {
913 MockServiceObserver mock_observer; 920 MockServiceObserver mock_observer;
914 service()->AddObserver(&mock_observer); 921 service()->AddObserver(&mock_observer);
915 922
916 // Simulate user disabled sync. 923 // Simulate user disabled sync.
917 ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false)); 924 ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false));
918 // The service should notify observers it's been disabled and clear the 925 // The service should notify observers it's been disabled and clear the
919 // snippets instead of pulling new ones. 926 // snippets instead of pulling new ones.
920 EXPECT_CALL(mock_observer, NTPSnippetsServiceDisabled()); 927 EXPECT_CALL(mock_observer, NTPSnippetsServiceDisabled());
921 SetUpFetchResponse(GetTestJson({GetSnippet()})); 928 SetUpFetchResponse(GetTestJson({GetSnippet()}));
922 service()->OnStateChanged(); 929 service()->OnStateChanged();
923 base::RunLoop().RunUntilIdle(); 930 base::RunLoop().RunUntilIdle();
931 EXPECT_EQ(NTPSnippetsService::State::DISABLED, service()->state_);
924 EXPECT_THAT(service()->snippets(), IsEmpty()); // No fetch should be made. 932 EXPECT_THAT(service()->snippets(), IsEmpty()); // No fetch should be made.
925 933
926 // Simulate user sign in. 934 // Simulate user sign in.
927 ResetSyncServiceMock(); 935 ResetSyncServiceMock();
928 // The service should be ready again and load snippets. 936 // The service should be ready again and load snippets.
937 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1);
929 SetUpFetchResponse(GetTestJson({GetSnippet()})); 938 SetUpFetchResponse(GetTestJson({GetSnippet()}));
930 service()->OnStateChanged(); 939 service()->OnStateChanged();
931 base::RunLoop().RunUntilIdle(); 940 base::RunLoop().RunUntilIdle();
941 EXPECT_EQ(NTPSnippetsService::State::READY, service()->state_);
932 EXPECT_FALSE(service()->snippets().empty()); 942 EXPECT_FALSE(service()->snippets().empty());
933 943
934 service()->RemoveObserver(&mock_observer); 944 service()->RemoveObserver(&mock_observer);
935 } 945 }
936 946
937 } // namespace ntp_snippets 947 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698