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

Unified Diff: components/autofill/browser/webdata/autofill_webdata_backend.cc

Issue 14679005: Create an AutofillBackend interface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Clean up Created 7 years, 7 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/autofill/browser/webdata/autofill_webdata_backend.cc
diff --git a/components/autofill/browser/webdata/autofill_webdata_backend.cc b/components/autofill/browser/webdata/autofill_webdata_backend.cc
index 0cda3d15310d9e4796315c7be1d2442af50caffb..40e2d302b642620095578ed310f6a5c4fe2d9c8c 100644
--- a/components/autofill/browser/webdata/autofill_webdata_backend.cc
+++ b/components/autofill/browser/webdata/autofill_webdata_backend.cc
@@ -12,7 +12,9 @@
#include "components/autofill/browser/webdata/autofill_change.h"
#include "components/autofill/browser/webdata/autofill_entry.h"
#include "components/autofill/browser/webdata/autofill_table.h"
+#include "components/autofill/browser/webdata/autofill_webdata_service.h"
#include "components/autofill/browser/webdata/autofill_webdata_service_observer.h"
+#include "components/autofill/browser/webdata/syncable_service_delegate.h"
#include "components/autofill/common/form_field_data.h"
using base::Bind;
@@ -21,6 +23,71 @@ using content::BrowserThread;
namespace autofill {
+class SyncableAutofillDelegate : public SyncableServiceDelegate {
Jói 2013/05/06 23:08:39 Do you expect that there might be multiple impleme
+ public:
+ SyncableAutofillDelegate(
+ WebDatabase* db,
+ AutofillWebDataBackend* autofill_backend,
+ const base::Closure& on_changed)
+ : web_database_(db),
+ autofill_backend_(autofill_backend),
+ on_changed_(new base::Closure(on_changed)),
+ weak_ptr_factory_(this) {
+ }
+
+ virtual ~SyncableAutofillDelegate() {
+ }
+
+ base::WeakPtr<SyncableAutofillDelegate> AsWeakPtr() {
+ return weak_ptr_factory_.GetWeakPtr();
+ }
+
+ virtual WebDatabase* GetDatabase() OVERRIDE {
+ return web_database_;
+ }
+
+ virtual void AddObserver(
+ AutofillWebDataServiceObserverOnDBThread* observer) OVERRIDE {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
+ if (autofill_backend_)
+ autofill_backend_->AddObserver(observer);
+ }
+
+ virtual void RemoveObserver(
+ AutofillWebDataServiceObserverOnDBThread* observer) OVERRIDE {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
+ if (autofill_backend_)
+ autofill_backend_->RemoveObserver(observer);
+ }
+
+ virtual void RemoveExpiredFormElements() OVERRIDE {
+ if (!autofill_backend_)
+ return;
+
+ WebDatabase::State state =
+ autofill_backend_->RemoveExpiredFormElements(web_database_);
+
+ if (state == WebDatabase::COMMIT_NEEDED) {
+ web_database_->CommitTransaction();
+ web_database_->BeginTransaction();
+ }
+ }
+
+ virtual void NotifyOfMultipleAutofillChanges() OVERRIDE {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
+
+ if (!autofill_backend_ || !on_changed_ || on_changed_->is_null())
+ return;
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, *on_changed_);
+ }
+
+ private:
+ WebDatabase* web_database_;
+ AutofillWebDataBackend* autofill_backend_;
+ base::Closure* on_changed_;
+ base::WeakPtrFactory<SyncableAutofillDelegate> weak_ptr_factory_;
+};
Ilya Sherman 2013/05/07 00:02:43 nit: Please tuck this into an anonymous namespace.
+
AutofillWebDataBackend::AutofillWebDataBackend() {
}
@@ -36,7 +103,19 @@ void AutofillWebDataBackend::RemoveObserver(
db_observer_list_.RemoveObserver(observer);
}
+void AutofillWebDataBackend::GetDelegate(
+ const AutofillWebDataService::DelegateOnDBCallback& callback,
+ const base::Closure& on_changed_callback,
+ WebDatabase* db) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
+ if (!delegate_.get())
+ delegate_.reset(new SyncableAutofillDelegate(
+ db, this, on_changed_callback));
+ callback.Run(delegate_->AsWeakPtr());
+}
+
AutofillWebDataBackend::~AutofillWebDataBackend() {
+ delegate_.reset();
}
WebDatabase::State AutofillWebDataBackend::AddFormElements(

Powered by Google App Engine
This is Rietveld 408576698