| Index: components/password_manager/core/browser/affiliation_backend.cc
|
| diff --git a/components/password_manager/core/browser/affiliation_backend.cc b/components/password_manager/core/browser/affiliation_backend.cc
|
| index 9b74b8efbf00db7b8331e9eaad4f4f1ae7cd0d28..ec937608af23d26e17d6fdf7bce07e4672aea742 100644
|
| --- a/components/password_manager/core/browser/affiliation_backend.cc
|
| +++ b/components/password_manager/core/browser/affiliation_backend.cc
|
| @@ -6,7 +6,11 @@
|
|
|
| #include <stdint.h>
|
|
|
| +#include "base/bind.h"
|
| +#include "base/location.h"
|
| +#include "base/single_thread_task_runner.h"
|
| #include "base/task_runner.h"
|
| +#include "base/thread_task_runner_handle.h"
|
| #include "base/threading/thread_checker.h"
|
| #include "base/time/clock.h"
|
| #include "base/time/time.h"
|
| @@ -44,12 +48,8 @@ void AffiliationBackend::GetAffiliations(
|
| const AffiliationService::ResultCallback& callback,
|
| const scoped_refptr<base::TaskRunner>& callback_task_runner) {
|
| DCHECK(thread_checker_ && thread_checker_->CalledOnValidThread());
|
| - if (!facet_managers_.contains(facet_uri)) {
|
| - scoped_ptr<FacetManager> new_manager(new FacetManager(this, facet_uri));
|
| - facet_managers_.add(facet_uri, new_manager.Pass());
|
| - }
|
|
|
| - FacetManager* facet_manager = facet_managers_.get(facet_uri);
|
| + FacetManager* facet_manager = GetOrCreateFacetManager(facet_uri);
|
| DCHECK(facet_manager);
|
| facet_manager->GetAffiliations(cached_only, callback, callback_task_runner);
|
|
|
| @@ -61,16 +61,25 @@ void AffiliationBackend::Prefetch(const FacetURI& facet_uri,
|
| const base::Time& keep_fresh_until) {
|
| DCHECK(thread_checker_ && thread_checker_->CalledOnValidThread());
|
|
|
| - // TODO(engedy): Implement this. crbug.com/437865.
|
| - NOTIMPLEMENTED();
|
| + FacetManager* facet_manager = GetOrCreateFacetManager(facet_uri);
|
| + DCHECK(facet_manager);
|
| + facet_manager->Prefetch(keep_fresh_until);
|
| +
|
| + if (facet_manager->CanBeDiscarded())
|
| + facet_managers_.erase(facet_uri);
|
| }
|
|
|
| void AffiliationBackend::CancelPrefetch(const FacetURI& facet_uri,
|
| const base::Time& keep_fresh_until) {
|
| DCHECK(thread_checker_ && thread_checker_->CalledOnValidThread());
|
|
|
| - // TODO(engedy): Implement this. crbug.com/437865.
|
| - NOTIMPLEMENTED();
|
| + FacetManager* facet_manager = facet_managers_.get(facet_uri);
|
| + if (!facet_manager)
|
| + return;
|
| + facet_manager->CancelPrefetch(keep_fresh_until);
|
| +
|
| + if (facet_manager->CanBeDiscarded())
|
| + facet_managers_.erase(facet_uri);
|
| }
|
|
|
| void AffiliationBackend::TrimCache() {
|
| @@ -80,6 +89,16 @@ void AffiliationBackend::TrimCache() {
|
| NOTIMPLEMENTED();
|
| }
|
|
|
| +FacetManager* AffiliationBackend::GetOrCreateFacetManager(
|
| + const FacetURI& facet_uri) {
|
| + if (!facet_managers_.contains(facet_uri)) {
|
| + scoped_ptr<FacetManager> new_manager(
|
| + new FacetManager(facet_uri, this, clock_.get()));
|
| + facet_managers_.add(facet_uri, new_manager.Pass());
|
| + }
|
| + return facet_managers_.get(facet_uri);
|
| +}
|
| +
|
| void AffiliationBackend::SendNetworkRequest() {
|
| DCHECK(!fetcher_);
|
|
|
| @@ -94,16 +113,16 @@ void AffiliationBackend::SendNetworkRequest() {
|
| fetcher_->StartRequest();
|
| }
|
|
|
| -base::Time AffiliationBackend::GetCurrentTime() {
|
| - return clock_->Now();
|
| -}
|
| +void AffiliationBackend::OnSendNotification(const FacetURI& facet_uri) {
|
| + DCHECK(thread_checker_ && thread_checker_->CalledOnValidThread());
|
|
|
| -base::Time AffiliationBackend::ReadLastUpdateTimeFromDatabase(
|
| - const FacetURI& facet_uri) {
|
| - AffiliatedFacetsWithUpdateTime affiliation;
|
| - return ReadAffiliationsFromDatabase(facet_uri, &affiliation)
|
| - ? affiliation.last_update_time
|
| - : base::Time();
|
| + FacetManager* facet_manager = facet_managers_.get(facet_uri);
|
| + if (!facet_manager)
|
| + return;
|
| + facet_manager->NotifyAtRequestedTime();
|
| +
|
| + if (facet_manager->CanBeDiscarded())
|
| + facet_managers_.erase(facet_uri);
|
| }
|
|
|
| bool AffiliationBackend::ReadAffiliationsFromDatabase(
|
| @@ -119,6 +138,16 @@ void AffiliationBackend::SignalNeedNetworkRequest() {
|
| SendNetworkRequest();
|
| }
|
|
|
| +void AffiliationBackend::RequestNotificationAtTime(const FacetURI& facet_uri,
|
| + base::Time time) {
|
| + // TODO(engedy): Avoid spamming the task runner; only ever schedule the first
|
| + // callback. crbug.com/437865.
|
| + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
|
| + FROM_HERE, base::Bind(&AffiliationBackend::OnSendNotification,
|
| + weak_ptr_factory_.GetWeakPtr(), facet_uri),
|
| + time - clock_->Now());
|
| +}
|
| +
|
| void AffiliationBackend::OnFetchSucceeded(
|
| scoped_ptr<AffiliationFetcherDelegate::Result> result) {
|
| DCHECK(thread_checker_ && thread_checker_->CalledOnValidThread());
|
|
|