Chromium Code Reviews| 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( |