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

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: 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());
Marc Treib 2016/06/06 08:38:33 Any reason for removing this line?
dgn 2016/06/06 15:44:39 That was related to the order between the db loadi
Marc Treib 2016/06/07 08:55:39 Acknowledged.
257 run_loop_.Quit(); 256 run_loop_.Quit();
258 } 257 }
259 258
260 void NTPSnippetsServiceShutdown() override {} 259 void NTPSnippetsServiceShutdown() override {}
261 void NTPSnippetsServiceDisabled() override {} 260 void NTPSnippetsServiceDisabled() override {}
262 261
263 NTPSnippetsService* service_; 262 NTPSnippetsService* service_;
264 base::RunLoop run_loop_; 263 base::RunLoop run_loop_;
265 264
266 DISALLOW_COPY_AND_ASSIGN(WaitForDBLoad); 265 DISALLOW_COPY_AND_ASSIGN(WaitForDBLoad);
(...skipping 27 matching lines...) Expand all
294 service_->Shutdown(); 293 service_->Shutdown();
295 294
296 // We need to run the message loop after deleting the database, because 295 // We need to run the message loop after deleting the database, because
297 // ProtoDatabaseImpl deletes the actual LevelDB asynchronously on the task 296 // ProtoDatabaseImpl deletes the actual LevelDB asynchronously on the task
298 // runner. Without this, we'd get reports of memory leaks. 297 // runner. Without this, we'd get reports of memory leaks.
299 service_.reset(); 298 service_.reset();
300 base::RunLoop().RunUntilIdle(); 299 base::RunLoop().RunUntilIdle();
301 } 300 }
302 301
303 void SetUp() override { 302 void SetUp() override {
303 ResetSyncServiceMock();
304 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); 304 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1);
305 CreateSnippetsService(/*enabled=*/true); 305 CreateSnippetsService(/*enabled=*/true);
306 } 306 }
307 307
308 void CreateSnippetsService(bool enabled) { 308 void CreateSnippetsService(bool enabled) {
309 if (service_) 309 if (service_)
310 service_->Shutdown(); 310 service_->Shutdown();
311 311
312 scoped_refptr<base::SingleThreadTaskRunner> task_runner( 312 scoped_refptr<base::SingleThreadTaskRunner> task_runner(
313 base::ThreadTaskRunnerHandle::Get()); 313 base::ThreadTaskRunnerHandle::Get());
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 std::unique_ptr<NTPSnippetsService> service_; 384 std::unique_ptr<NTPSnippetsService> service_;
385 385
386 base::ScopedTempDir database_dir_; 386 base::ScopedTempDir database_dir_;
387 387
388 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsServiceTest); 388 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsServiceTest);
389 }; 389 };
390 390
391 class NTPSnippetsServiceWithSyncTest : public NTPSnippetsServiceTest { 391 class NTPSnippetsServiceWithSyncTest : public NTPSnippetsServiceTest {
392 public: 392 public:
393 void SetUp() override { 393 void SetUp() override {
394 ResetSyncServiceMock(); 394 // ResetSyncServiceMock();
395 NTPSnippetsServiceTest::SetUp(); 395 NTPSnippetsServiceTest::SetUp();
396 } 396 }
397 }; 397 };
398 398
399 class NTPSnippetsServiceDisabledTest : public NTPSnippetsServiceTest { 399 class NTPSnippetsServiceDisabledTest : public NTPSnippetsServiceTest {
400 public: 400 public:
401 void SetUp() override { 401 void SetUp() override {
402 EXPECT_CALL(mock_scheduler(), Unschedule()).Times(1); 402 EXPECT_CALL(mock_scheduler(), Unschedule()).Times(1);
403 CreateSnippetsService(/*enabled=*/false); 403 CreateSnippetsService(/*enabled=*/false);
404 } 404 }
405 }; 405 };
406 406
407 TEST_F(NTPSnippetsServiceTest, ScheduleIfEnabled) { 407 TEST_F(NTPSnippetsServiceTest, ScheduleIfEnabled) {
408 // SetUp() checks that Schedule is called. 408 // SetUp() checks that Schedule is called.
409 } 409 }
410 410
411 TEST_F(NTPSnippetsServiceDisabledTest, Unschedule) { 411 TEST_F(NTPSnippetsServiceDisabledTest, Unschedule) {
412 // SetUp() checks that Unschedule is called. 412 // SetUp() checks that Unschedule is called.
413 } 413 }
414 414
415 TEST_F(NTPSnippetsServiceTest, Full) { 415 TEST_F(NTPSnippetsServiceTest, Full) {
416 EXPECT_TRUE(service()->ready());
416 std::string json_str(GetTestJson({GetSnippet()})); 417 std::string json_str(GetTestJson({GetSnippet()}));
417 418
418 LoadFromJSONString(json_str); 419 LoadFromJSONString(json_str);
419 ASSERT_THAT(service()->snippets(), SizeIs(1)); 420 ASSERT_THAT(service()->snippets(), SizeIs(1));
420 const NTPSnippet& snippet = *service()->snippets().front(); 421 const NTPSnippet& snippet = *service()->snippets().front();
421 422
422 EXPECT_EQ(snippet.id(), kSnippetUrl); 423 EXPECT_EQ(snippet.id(), kSnippetUrl);
423 EXPECT_EQ(snippet.title(), kSnippetTitle); 424 EXPECT_EQ(snippet.title(), kSnippetTitle);
424 EXPECT_EQ(snippet.snippet(), kSnippetText); 425 EXPECT_EQ(snippet.snippet(), kSnippetText);
425 EXPECT_EQ(snippet.salient_image_url(), GURL(kSnippetSalientImage)); 426 EXPECT_EQ(snippet.salient_image_url(), GURL(kSnippetSalientImage));
(...skipping 412 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
848 // Recreating the service and loading from prefs shouldn't count as fetched 850 // Recreating the service and loading from prefs shouldn't count as fetched
849 // articles. 851 // articles.
850 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); 852 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1);
851 CreateSnippetsService(/*enabled=*/true); 853 CreateSnippetsService(/*enabled=*/true);
852 tester.ExpectTotalCount("NewTabPage.Snippets.NumArticlesFetched", 4); 854 tester.ExpectTotalCount("NewTabPage.Snippets.NumArticlesFetched", 4);
853 } 855 }
854 856
855 TEST_F(NTPSnippetsServiceTest, DiscardShouldRespectAllKnownUrls) { 857 TEST_F(NTPSnippetsServiceTest, DiscardShouldRespectAllKnownUrls) {
856 const std::string creation = 858 const std::string creation =
857 NTPSnippet::TimeToJsonString(GetDefaultCreationTime()); 859 NTPSnippet::TimeToJsonString(GetDefaultCreationTime());
(...skipping 18 matching lines...) Expand all
876 EXPECT_THAT(service()->snippets(), IsEmpty()); 878 EXPECT_THAT(service()->snippets(), IsEmpty());
877 879
878 // The same article from the AOL domain should now be detected as discarded. 880 // The same article from the AOL domain should now be detected as discarded.
879 LoadFromJSONString(GetTestJson({GetSnippetWithUrlAndTimesAndSources( 881 LoadFromJSONString(GetTestJson({GetSnippetWithUrlAndTimesAndSources(
880 source_urls[1], creation, expiry, source_urls, publishers, amp_urls)})); 882 source_urls[1], creation, expiry, source_urls, publishers, amp_urls)}));
881 ASSERT_THAT(service()->snippets(), IsEmpty()); 883 ASSERT_THAT(service()->snippets(), IsEmpty());
882 } 884 }
883 885
884 TEST_F(NTPSnippetsServiceWithSyncTest, SyncStateCompatibility) { 886 TEST_F(NTPSnippetsServiceWithSyncTest, SyncStateCompatibility) {
885 // The default test setup has a compatible sync state. 887 // The default test setup has a compatible sync state.
886 EXPECT_FALSE(service()->IsSyncStateIncompatible()); 888 EXPECT_EQ(DisabledReason::NONE, service()->GetDisabledReason());
887 889
888 // History sync disabled. 890 // History sync disabled.
889 ON_CALL(*mock_sync_service(), GetActiveDataTypes()) 891 ON_CALL(*mock_sync_service(), GetActiveDataTypes())
890 .WillByDefault(Return(syncer::ModelTypeSet())); 892 .WillByDefault(Return(syncer::ModelTypeSet()));
891 EXPECT_TRUE(service()->IsSyncStateIncompatible()); 893 EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED,
894 service()->GetDisabledReason());
892 ResetSyncServiceMock(); 895 ResetSyncServiceMock();
893 896
894 // Not done loading. 897 // Not done loading.
895 ON_CALL(*mock_sync_service(), ConfigurationDone()) 898 ON_CALL(*mock_sync_service(), ConfigurationDone())
896 .WillByDefault(Return(false)); 899 .WillByDefault(Return(false));
897 ON_CALL(*mock_sync_service(), GetActiveDataTypes()) 900 ON_CALL(*mock_sync_service(), GetActiveDataTypes())
898 .WillByDefault(Return(syncer::ModelTypeSet())); 901 .WillByDefault(Return(syncer::ModelTypeSet()));
899 EXPECT_FALSE(service()->IsSyncStateIncompatible()); 902 EXPECT_EQ(DisabledReason::HISTORY_SYNC_STATE_UNKNOWN,
903 service()->GetDisabledReason());
900 ResetSyncServiceMock(); 904 ResetSyncServiceMock();
901 905
902 // Sync disabled. 906 // Sync disabled.
903 ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false)); 907 ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false));
904 EXPECT_TRUE(service()->IsSyncStateIncompatible()); 908 EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED,
909 service()->GetDisabledReason());
905 ResetSyncServiceMock(); 910 ResetSyncServiceMock();
906 911
907 // No service. 912 // No service.
908 service()->sync_service_ = nullptr; 913 service()->sync_service_ = nullptr;
909 EXPECT_TRUE(service()->IsSyncStateIncompatible()); 914 EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED,
915 service()->GetDisabledReason());
910 } 916 }
911 917
912 TEST_F(NTPSnippetsServiceWithSyncTest, HistorySyncStateChanges) { 918 TEST_F(NTPSnippetsServiceWithSyncTest, HistorySyncStateChanges) {
913 MockServiceObserver mock_observer; 919 MockServiceObserver mock_observer;
914 service()->AddObserver(&mock_observer); 920 service()->AddObserver(&mock_observer);
915 921
916 // Simulate user disabled sync. 922 // Simulate user disabled sync.
917 ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false)); 923 ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false));
918 // The service should notify observers it's been disabled and clear the 924 // The service should notify observers it's been disabled and clear the
919 // snippets instead of pulling new ones. 925 // snippets instead of pulling new ones.
920 EXPECT_CALL(mock_observer, NTPSnippetsServiceDisabled()); 926 EXPECT_CALL(mock_observer, NTPSnippetsServiceDisabled());
921 SetUpFetchResponse(GetTestJson({GetSnippet()})); 927 SetUpFetchResponse(GetTestJson({GetSnippet()}));
922 service()->OnStateChanged(); 928 service()->OnStateChanged();
923 base::RunLoop().RunUntilIdle(); 929 base::RunLoop().RunUntilIdle();
930 EXPECT_EQ(NTPSnippetsService::State::DISABLED, service()->state_);
924 EXPECT_THAT(service()->snippets(), IsEmpty()); // No fetch should be made. 931 EXPECT_THAT(service()->snippets(), IsEmpty()); // No fetch should be made.
925 932
926 // Simulate user sign in. 933 // Simulate user sign in.
927 ResetSyncServiceMock(); 934 ResetSyncServiceMock();
928 // The service should be ready again and load snippets. 935 // The service should be ready again and load snippets.
936 EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1);
929 SetUpFetchResponse(GetTestJson({GetSnippet()})); 937 SetUpFetchResponse(GetTestJson({GetSnippet()}));
930 service()->OnStateChanged(); 938 service()->OnStateChanged();
931 base::RunLoop().RunUntilIdle(); 939 base::RunLoop().RunUntilIdle();
940 EXPECT_EQ(NTPSnippetsService::State::READY, service()->state_);
932 EXPECT_FALSE(service()->snippets().empty()); 941 EXPECT_FALSE(service()->snippets().empty());
933 942
934 service()->RemoveObserver(&mock_observer); 943 service()->RemoveObserver(&mock_observer);
935 } 944 }
936 945
937 } // namespace ntp_snippets 946 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698