| Index: components/password_manager/core/browser/facet_manager_unittest.cc
|
| diff --git a/components/password_manager/core/browser/facet_manager_unittest.cc b/components/password_manager/core/browser/facet_manager_unittest.cc
|
| index 4cc3b308ce08cac67da07389091f1a7bd44cdb39..01ae885f4048136bb09fe1b8e625302f216a8d9e 100644
|
| --- a/components/password_manager/core/browser/facet_manager_unittest.cc
|
| +++ b/components/password_manager/core/browser/facet_manager_unittest.cc
|
| @@ -288,6 +288,7 @@ class FacetManagerTest : public testing::Test {
|
| for (base::TimeDelta step : SamplingPoints(until_time - Now())) {
|
| SCOPED_TRACE(testing::Message() << "dT: " << DeltaNow());
|
| EXPECT_FALSE(facet_manager()->CanBeDiscarded());
|
| + EXPECT_FALSE(facet_manager()->CanCachedDataBeDiscarded());
|
| ExpectRequestsServedFromCache();
|
| ExpectNoFetchNeeded();
|
| AdvanceTime(step);
|
| @@ -411,6 +412,7 @@ class FacetManagerTest : public testing::Test {
|
| TEST_F(FacetManagerTest, NewInstanceCanBeDiscarded) {
|
| CreateFacetManager();
|
| EXPECT_TRUE(facet_manager()->CanBeDiscarded());
|
| + EXPECT_TRUE(facet_manager()->CanCachedDataBeDiscarded());
|
| EXPECT_FALSE(facet_manager()->DoesRequireFetch());
|
| EXPECT_FALSE(main_task_runner()->HasPendingTask());
|
| }
|
| @@ -1300,6 +1302,34 @@ TEST_F(FacetManagerTest, CancelingNonexistentPrefetchesIsSilentlyIgnored) {
|
| DestroyFacetManager();
|
| }
|
|
|
| +TEST_F(FacetManagerTest, CachedDataCannotBeDiscarded) {
|
| + CreateFacetManager();
|
| +
|
| + const base::TimeDelta kPrefetchLength =
|
| + 2 * GetCacheSoftExpiryPeriod() + GetCacheHardExpiryPeriod();
|
| +
|
| + facet_manager_notifier()->set_accuracy(NotificationAccuracy::NEVER_CALLED);
|
| +
|
| + const base::Time prefetch_end = Now() + kPrefetchLength;
|
| + std::vector<ExpectedFetchDetails> expected_fetches(1);
|
| + expected_fetches[0].time = Now();
|
| +
|
| + Prefetch(prefetch_end);
|
| + ASSERT_NO_FATAL_FAILURE(AdvanceTimeAndVerifyPrefetchWithFetchesAt(
|
| + Now() + GetCacheSoftExpiryPeriod(), expected_fetches));
|
| + for (base::TimeDelta step : SamplingPoints(prefetch_end - Now())) {
|
| + SCOPED_TRACE(testing::Message() << "dT: " << DeltaNow());
|
| + EXPECT_FALSE(facet_manager()->CanBeDiscarded());
|
| + ASSERT_TRUE(facet_manager()->DoesRequireFetch());
|
| + if (DeltaNow() < GetCacheHardExpiryPeriod())
|
| + ExpectRequestsServedFromCache();
|
| + AdvanceTime(step);
|
| + }
|
| + EXPECT_TRUE(facet_manager()->CanBeDiscarded());
|
| + EXPECT_FALSE(main_task_runner()->HasPendingTask());
|
| + DestroyFacetManager();
|
| +}
|
| +
|
| // RequestNotificationAtTime() ends up calling NotifyAtRequestedTime() always
|
| // a bit earlier than needed. This should result in NotifyAtRequestedTime()
|
| // being called repeatedly until the callback is finally on time, but should
|
| @@ -1402,4 +1432,87 @@ TEST_F(FacetManagerTest, RequestedNotificationsNeverCome) {
|
| DestroyFacetManager();
|
| }
|
|
|
| +TEST_F(FacetManagerTest, StaleCachedDataBeCanDiscardedWhilePendingFetch) {
|
| + CreateFacetManager();
|
| + ASSERT_FALSE(facet_manager()->IsCachedDataFresh());
|
| +
|
| + GetAffiliations(StrategyOnCacheMiss::FETCH_OVER_NETWORK);
|
| + ASSERT_NO_FATAL_FAILURE(ExpectFetchNeeded());
|
| + EXPECT_FALSE(facet_manager()->CanBeDiscarded());
|
| + EXPECT_TRUE(facet_manager()->CanCachedDataBeDiscarded());
|
| +
|
| + fake_facet_manager_host()->reset_need_network_request();
|
| +}
|
| +
|
| +TEST_F(FacetManagerTest, CachedDataBeCanDiscardedAfterOnDemandGetAffiliatons) {
|
| + CreateFacetManager();
|
| + ASSERT_FALSE(facet_manager()->IsCachedDataFresh());
|
| +
|
| + GetAffiliations(StrategyOnCacheMiss::FETCH_OVER_NETWORK);
|
| + ASSERT_NO_FATAL_FAILURE(ExpectFetchNeeded());
|
| + ASSERT_NO_FATAL_FAILURE(CompleteFetch());
|
| + ExpectConsumerSuccessCallback();
|
| +
|
| + EXPECT_TRUE(facet_manager()->IsCachedDataFresh());
|
| + EXPECT_TRUE(facet_manager()->CanBeDiscarded());
|
| + EXPECT_TRUE(facet_manager()->CanCachedDataBeDiscarded());
|
| +}
|
| +
|
| +// The cached data can be discarded (indicated by 'd') if and only if it is no
|
| +// longer needed to be kept fresh, or if it already stale.
|
| +//
|
| +// t=0 S H F2+S F2+H
|
| +// / / / / /
|
| +// ---o--------------------------o-------o------------------o-------o------> t
|
| +// : : :
|
| +// [F-------------------------NNNNNNNNNNNF---)
|
| +// ddd ddd...
|
| +//
|
| +TEST_F(FacetManagerTest,
|
| + CachedDataCanBeDiscardedAfterAndSometimesDuringPrefetch) {
|
| + CreateFacetManager();
|
| + Prefetch(Now() + GetCacheHardExpiryPeriod() + 2 * GetShortTestPeriod());
|
| + ASSERT_NO_FATAL_FAILURE(ExpectFetchNeeded());
|
| + ASSERT_NO_FATAL_FAILURE(CompleteFetch());
|
| +
|
| + for (base::TimeDelta step : SamplingPoints(GetCacheHardExpiryPeriod())) {
|
| + SCOPED_TRACE(testing::Message() << "dT: " << DeltaNow());
|
| + EXPECT_FALSE(facet_manager()->CanCachedDataBeDiscarded());
|
| + AdvanceTime(step);
|
| + }
|
| +
|
| + for (base::TimeDelta step : SamplingPoints(GetShortTestPeriod())) {
|
| + SCOPED_TRACE(testing::Message() << "dT: " << DeltaNow());
|
| + EXPECT_TRUE(facet_manager()->CanCachedDataBeDiscarded());
|
| + AdvanceTime(step);
|
| + }
|
| +
|
| + ASSERT_NO_FATAL_FAILURE(ExpectFetchNeeded());
|
| + ASSERT_NO_FATAL_FAILURE(CompleteFetch());
|
| +
|
| + for (base::TimeDelta step : SamplingPoints(GetShortTestPeriod())) {
|
| + SCOPED_TRACE(testing::Message() << "dT: " << DeltaNow());
|
| + EXPECT_FALSE(facet_manager()->CanCachedDataBeDiscarded());
|
| + AdvanceTime(step);
|
| + }
|
| +
|
| + EXPECT_TRUE(facet_manager()->CanBeDiscarded());
|
| + EXPECT_TRUE(facet_manager()->CanCachedDataBeDiscarded());
|
| +}
|
| +
|
| +TEST_F(FacetManagerTest, CachedDataBeCanDiscardedAfterCancelledPrefetch) {
|
| + CreateFacetManager();
|
| + Prefetch(base::Time::Max());
|
| + ASSERT_NO_FATAL_FAILURE(ExpectFetchNeeded());
|
| + ASSERT_NO_FATAL_FAILURE(CompleteFetch());
|
| +
|
| + EXPECT_FALSE(facet_manager()->CanCachedDataBeDiscarded());
|
| +
|
| + AdvanceTime(GetShortTestPeriod());
|
| + CancelPrefetch(base::Time::Max());
|
| +
|
| + EXPECT_TRUE(facet_manager()->CanBeDiscarded());
|
| + EXPECT_TRUE(facet_manager()->CanCachedDataBeDiscarded());
|
| +}
|
| +
|
| } // namespace password_manager
|
|
|