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

Unified Diff: chrome/browser/webdata/autofill_web_data_service.cc

Issue 12476031: Refactor notifications of chrome/browser/webdata (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 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: chrome/browser/webdata/autofill_web_data_service.cc
diff --git a/chrome/browser/webdata/autofill_web_data_service.cc b/chrome/browser/webdata/autofill_web_data_service.cc
index 2f7e630897b375b211a2f0e592b10a39f96422be..efe5d16fef9c61acffa3fbbe40915b79920b7c4d 100644
--- a/chrome/browser/webdata/autofill_web_data_service.cc
+++ b/chrome/browser/webdata/autofill_web_data_service.cc
@@ -9,35 +9,17 @@
#include "chrome/browser/webdata/autofill_change.h"
#include "chrome/browser/webdata/autofill_entry.h"
#include "chrome/browser/webdata/autofill_table.h"
+#include "chrome/browser/webdata/autofill_web_data_service_observer.h"
#include "chrome/browser/webdata/web_database_service.h"
-#include "chrome/common/chrome_notification_types.h"
#include "components/autofill/browser/autofill_country.h"
#include "components/autofill/browser/autofill_profile.h"
#include "components/autofill/browser/credit_card.h"
#include "components/autofill/common/form_field_data.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
using base::Bind;
using base::Time;
using content::BrowserThread;
-namespace {
-
-// A task used by AutofillWebDataService (for Sync mainly) to inform the
-// PersonalDataManager living on the UI thread that it needs to refresh.
-void NotifyOfMultipleAutofillChangesTask(
- const scoped_refptr<AutofillWebDataService>& web_data_service) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_AUTOFILL_MULTIPLE_CHANGED,
- content::Source<AutofillWebDataService>(web_data_service.get()),
- content::NotificationService::NoDetails());
-}
-}
-
// static
void AutofillWebDataService::NotifyOfMultipleAutofillChanges(
AutofillWebDataService* web_data_service) {
@@ -48,7 +30,7 @@ void AutofillWebDataService::NotifyOfMultipleAutofillChanges(
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
- Bind(&NotifyOfMultipleAutofillChangesTask,
+ Bind(&AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread,
make_scoped_refptr(web_data_service)));
}
@@ -63,10 +45,6 @@ AutofillWebDataService::AutofillWebDataService()
WebDataServiceBase::ProfileErrorCallback()) {
}
-content::NotificationSource AutofillWebDataService::GetNotificationSource() {
- return content::Source<AutofillWebDataService>(this);
-}
-
void AutofillWebDataService::AddFormFields(
const std::vector<FormFieldData>& fields) {
wdbs_->ScheduleDBTask(FROM_HERE,
@@ -127,19 +105,21 @@ WebDataServiceBase::Handle AutofillWebDataService::GetAutofillProfiles(
}
void AutofillWebDataService::AddCreditCard(const CreditCard& credit_card) {
- wdbs_->ScheduleDBTask(FROM_HERE,
+ wdbs_->ScheduleDBTask(
+ FROM_HERE,
Bind(&AutofillWebDataService::AddCreditCardImpl, this, credit_card));
}
void AutofillWebDataService::UpdateCreditCard(
const CreditCard& credit_card) {
- wdbs_->ScheduleDBTask(FROM_HERE,
- Bind(&AutofillWebDataService::UpdateCreditCardImpl, this,
- credit_card));
+ wdbs_->ScheduleDBTask(
+ FROM_HERE,
+ Bind(&AutofillWebDataService::UpdateCreditCardImpl, this, credit_card));
}
void AutofillWebDataService::RemoveCreditCard(const std::string& guid) {
- wdbs_->ScheduleDBTask(FROM_HERE,
+ wdbs_->ScheduleDBTask(
+ FROM_HERE,
Bind(&AutofillWebDataService::RemoveCreditCardImpl, this, guid));
}
@@ -150,13 +130,45 @@ WebDataServiceBase::Handle AutofillWebDataService::GetCreditCards(
}
void AutofillWebDataService::RemoveAutofillDataModifiedBetween(
- const Time& delete_begin, const Time& delete_end) {
- wdbs_->ScheduleDBTask(FROM_HERE, Bind(
-&AutofillWebDataService::RemoveAutofillDataModifiedBetweenImpl,
- this, delete_begin, delete_end));
+ const Time& delete_begin,
+ const Time& delete_end) {
+ wdbs_->ScheduleDBTask(
+ FROM_HERE,
+ Bind(&AutofillWebDataService::RemoveAutofillDataModifiedBetweenImpl,
+ this, delete_begin, delete_end));
+}
+
+void AutofillWebDataService::AddObserver(
+ AutofillWebDataServiceObserverOnDBThread* observer) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
+ db_observer_list_.AddObserver(observer);
+}
+
+void AutofillWebDataService::RemoveObserver(
+ AutofillWebDataServiceObserverOnDBThread* observer) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
+ db_observer_list_.RemoveObserver(observer);
}
-AutofillWebDataService::~AutofillWebDataService() {
+void AutofillWebDataService::AddObserver(
+ AutofillWebDataServiceObserverOnUIThread* observer) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ ui_observer_list_.AddObserver(observer);
+}
+
+void AutofillWebDataService::RemoveObserver(
+ AutofillWebDataServiceObserverOnUIThread* observer) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ ui_observer_list_.RemoveObserver(observer);
+}
+
+AutofillWebDataService::~AutofillWebDataService() {}
+
+void AutofillWebDataService::NotifyDatabaseLoadedOnUIThread() {
+ // Notify that the database has been initialized.
+ FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnUIThread,
+ ui_observer_list_,
+ WebDatabaseLoaded());
}
////////////////////////////////////////////////////////////////////////////////
@@ -178,10 +190,9 @@ WebDatabase::State AutofillWebDataService::AddFormElementsImpl(
// Post the notifications including the list of affected keys.
// This is sent here so that work resulting from this notification will be
// done on the DB thread, and not the UI thread.
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED,
- content::Source<AutofillWebDataService>(this),
- content::Details<AutofillChangeList>(&changes));
+ FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnDBThread,
+ db_observer_list_,
+ AutofillEntriesChanged(changes));
return WebDatabase::COMMIT_NEEDED;
}
@@ -209,10 +220,9 @@ WebDatabase::State AutofillWebDataService::RemoveFormElementsAddedBetweenImpl(
// Post the notifications including the list of affected keys.
// This is sent here so that work resulting from this notification
// will be done on the DB thread, and not the UI thread.
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED,
- content::Source<AutofillWebDataService>(this),
- content::Details<AutofillChangeList>(&changes));
+ FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnDBThread,
+ db_observer_list_,
+ AutofillEntriesChanged(changes));
}
return WebDatabase::COMMIT_NEEDED;
}
@@ -229,10 +239,9 @@ WebDatabase::State AutofillWebDataService::RemoveExpiredFormElementsImpl(
// Post the notifications including the list of affected keys.
// This is sent here so that work resulting from this notification
// will be done on the DB thread, and not the UI thread.
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED,
- content::Source<AutofillWebDataService>(this),
- content::Details<AutofillChangeList>(&changes));
+ FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnDBThread,
+ db_observer_list_,
+ AutofillEntriesChanged(changes));
}
return WebDatabase::COMMIT_NEEDED;
}
@@ -245,14 +254,13 @@ WebDatabase::State AutofillWebDataService::RemoveFormValueForElementNameImpl(
if (AutofillTable::FromWebDatabase(db)->RemoveFormElement(name, value)) {
AutofillChangeList changes;
- changes.push_back(AutofillChange(AutofillChange::REMOVE,
- AutofillKey(name, value)));
+ changes.push_back(
+ AutofillChange(AutofillChange::REMOVE, AutofillKey(name, value)));
// Post the notifications including the list of affected keys.
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED,
- content::Source<AutofillWebDataService>(this),
- content::Details<AutofillChangeList>(&changes));
+ FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnDBThread,
+ db_observer_list_,
+ AutofillEntriesChanged(changes));
return WebDatabase::COMMIT_NEEDED;
}
@@ -268,12 +276,11 @@ WebDatabase::State AutofillWebDataService::AddAutofillProfileImpl(
}
// Send GUID-based notification.
- AutofillProfileChange change(AutofillProfileChange::ADD,
- profile.guid(), &profile);
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
- content::Source<AutofillWebDataService>(this),
- content::Details<AutofillProfileChange>(&change));
+ AutofillProfileChange change(
+ AutofillProfileChange::ADD, profile.guid(), &profile);
+ FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnDBThread,
+ db_observer_list_,
+ AutofillProfileChanged(change));
return WebDatabase::COMMIT_NEEDED;
}
@@ -298,12 +305,11 @@ WebDatabase::State AutofillWebDataService::UpdateAutofillProfileImpl(
}
// Send GUID-based notification.
- AutofillProfileChange change(AutofillProfileChange::UPDATE,
- profile.guid(), &profile);
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
- content::Source<AutofillWebDataService>(this),
- content::Details<AutofillProfileChange>(&change));
+ AutofillProfileChange change(
+ AutofillProfileChange::UPDATE, profile.guid(), &profile);
+ FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnDBThread,
+ db_observer_list_,
+ AutofillProfileChanged(change));
return WebDatabase::COMMIT_NEEDED;
}
@@ -325,10 +331,9 @@ WebDatabase::State AutofillWebDataService::RemoveAutofillProfileImpl(
// Send GUID-based notification.
AutofillProfileChange change(AutofillProfileChange::REMOVE, guid, NULL);
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
- content::Source<AutofillWebDataService>(this),
- content::Details<AutofillProfileChange>(&change));
+ FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnDBThread,
+ db_observer_list_,
+ AutofillProfileChanged(change));
return WebDatabase::COMMIT_NEEDED;
}
@@ -400,25 +405,24 @@ scoped_ptr<WDTypedResult> AutofillWebDataService::GetCreditCardsImpl(
}
WebDatabase::State
-AutofillWebDataService::RemoveAutofillDataModifiedBetweenImpl(
- const base::Time& delete_begin, const base::Time& delete_end,
+ AutofillWebDataService::RemoveAutofillDataModifiedBetweenImpl(
+ const base::Time& delete_begin,
+ const base::Time& delete_end,
WebDatabase* db) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
std::vector<std::string> profile_guids;
std::vector<std::string> credit_card_guids;
- if (AutofillTable::FromWebDatabase(db)->
- RemoveAutofillDataModifiedBetween(
+ if (AutofillTable::FromWebDatabase(db)->RemoveAutofillDataModifiedBetween(
delete_begin,
delete_end,
&profile_guids,
&credit_card_guids)) {
for (std::vector<std::string>::iterator iter = profile_guids.begin();
iter != profile_guids.end(); ++iter) {
- AutofillProfileChange change(AutofillProfileChange::REMOVE, *iter,
- NULL);
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED,
- content::Source<AutofillWebDataService>(this),
- content::Details<AutofillProfileChange>(&change));
+ AutofillProfileChange change(AutofillProfileChange::REMOVE, *iter, NULL);
+ FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnDBThread,
+ db_observer_list_,
+ AutofillProfileChanged(change));
}
// Note: It is the caller's responsibility to post notifications for any
// changes, e.g. by calling the Refresh() method of PersonalDataManager.
@@ -445,3 +449,10 @@ void AutofillWebDataService::DestroyAutofillCreditCardResult(
std::vector<CreditCard*> credit_cards = r->GetValue();
STLDeleteElements(&credit_cards);
}
+
+void AutofillWebDataService::NotifyAutofillMultipleChangedOnUIThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ FOR_EACH_OBSERVER(AutofillWebDataServiceObserverOnUIThread,
+ ui_observer_list_,
+ AutofillMultipleChanged());
+}
« no previous file with comments | « chrome/browser/webdata/autofill_web_data_service.h ('k') | chrome/browser/webdata/autofill_web_data_service_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698