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

Unified Diff: chrome/browser/sync/glue/autofill_profile_data_type_controller.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/sync/glue/autofill_profile_data_type_controller.cc
diff --git a/chrome/browser/sync/glue/autofill_profile_data_type_controller.cc b/chrome/browser/sync/glue/autofill_profile_data_type_controller.cc
index a2ce9705f617be4f72579152b8cfadff268562b8..d21aa4176ab9c1876d04bc42ad2d89c6d2b36021 100644
--- a/chrome/browser/sync/glue/autofill_profile_data_type_controller.cc
+++ b/chrome/browser/sync/glue/autofill_profile_data_type_controller.cc
@@ -11,11 +11,8 @@
#include "chrome/browser/sync/profile_sync_components_factory.h"
#include "chrome/browser/sync/profile_sync_service.h"
#include "chrome/browser/webdata/autofill_web_data_service.h"
-#include "chrome/common/chrome_notification_types.h"
#include "components/autofill/browser/personal_data_manager.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
#include "sync/api/sync_error.h"
#include "sync/api/syncable_service.h"
@@ -30,8 +27,8 @@ AutofillProfileDataTypeController::AutofillProfileDataTypeController(
: NonUIDataTypeController(profile_sync_factory,
profile,
sync_service),
- personal_data_(NULL) {
-}
+ personal_data_(NULL),
+ ALLOW_THIS_IN_INITIALIZER_LIST(scoped_observer_(this)) {}
syncer::ModelType AutofillProfileDataTypeController::type() const {
return syncer::AUTOFILL_PROFILE;
@@ -42,25 +39,27 @@ syncer::ModelSafeGroup
return syncer::GROUP_DB;
}
-void AutofillProfileDataTypeController::Observe(
- int notification_type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- notification_registrar_.RemoveAll();
+void AutofillProfileDataTypeController::WebDatabaseLoaded() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (scoped_observer_.IsObserving(web_data_service_.get()))
+ scoped_observer_.Remove(web_data_service_.get());
OnModelLoaded();
}
void AutofillProfileDataTypeController::OnPersonalDataChanged() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK_EQ(state(), MODEL_STARTING);
+
personal_data_->RemoveObserver(this);
web_data_service_ = AutofillWebDataService::FromBrowserContext(profile());
- if (web_data_service_.get() && web_data_service_->IsDatabaseLoaded()) {
+
+ if (!web_data_service_)
+ return;
+
+ if (web_data_service_->IsDatabaseLoaded())
OnModelLoaded();
- } else {
- notification_registrar_.Add(this, chrome::NOTIFICATION_WEB_DATABASE_LOADED,
- content::NotificationService::AllSources());
- }
+ else
+ scoped_observer_.Add(web_data_service_.get());
}
AutofillProfileDataTypeController::~AutofillProfileDataTypeController() {}
@@ -85,18 +84,24 @@ bool AutofillProfileDataTypeController::StartModels() {
}
web_data_service_ = AutofillWebDataService::FromBrowserContext(profile());
- if (web_data_service_.get() && web_data_service_->IsDatabaseLoaded())
+
+ if (!web_data_service_)
+ return false;
+
+ if (web_data_service_->IsDatabaseLoaded())
return true;
- notification_registrar_.Add(this, chrome::NOTIFICATION_WEB_DATABASE_LOADED,
- content::NotificationService::AllSources());
+ scoped_observer_.Add(web_data_service_.get());
return false;
}
void AutofillProfileDataTypeController::StopModels() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(state() == STOPPING || state() == NOT_RUNNING);
- notification_registrar_.RemoveAll();
+
+ if (scoped_observer_.IsObserving(web_data_service_.get()))
+ scoped_observer_.Remove(web_data_service_.get());
+
personal_data_->RemoveObserver(this);
}

Powered by Google App Engine
This is Rietveld 408576698