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

Unified Diff: components/password_manager/core/browser/affiliation_backend.cc

Issue 947563002: Add prefetch support to AffiliationBackend. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove 'stale' accessor, cleaned up timelines for tests, extended/fixed some tests. Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698