summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-01 01:05:11 +0000
committerjhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-01 01:05:11 +0000
commitb2448200e68aab938f1c20259c1efe966da397cf (patch)
treea1f91d9db0f02282e13867f109587e901d8420fa
parentfb534c949f92bec8c6312b58ffcc04c5dc488f2d (diff)
downloadchromium_src-b2448200e68aab938f1c20259c1efe966da397cf.zip
chromium_src-b2448200e68aab938f1c20259c1efe966da397cf.tar.gz
chromium_src-b2448200e68aab938f1c20259c1efe966da397cf.tar.bz2
Importer: Add a RemoveObserver method to ImporterList and use this method by
clients when they are destroyed. BUG=67174 TEST=none Review URL: http://codereview.chromium.org/6409028 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@73233 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/dom_ui/options/import_data_handler.cc3
-rw-r--r--chrome/browser/dom_ui/options/import_data_handler.h2
-rw-r--r--chrome/browser/importer/importer.cc3
-rw-r--r--chrome/browser/importer/importer_list.cc11
-rw-r--r--chrome/browser/importer/importer_list.h5
5 files changed, 21 insertions, 3 deletions
diff --git a/chrome/browser/dom_ui/options/import_data_handler.cc b/chrome/browser/dom_ui/options/import_data_handler.cc
index ee07b48..4db124d 100644
--- a/chrome/browser/dom_ui/options/import_data_handler.cc
+++ b/chrome/browser/dom_ui/options/import_data_handler.cc
@@ -25,6 +25,9 @@ ImportDataHandler::ImportDataHandler() : importer_host_(NULL) {
}
ImportDataHandler::~ImportDataHandler() {
+ if (importer_list_)
+ importer_list_->SetObserver(NULL);
+
if (importer_host_)
importer_host_->SetObserver(NULL);
}
diff --git a/chrome/browser/dom_ui/options/import_data_handler.h b/chrome/browser/dom_ui/options/import_data_handler.h
index 8f4ed61..4ba21b6 100644
--- a/chrome/browser/dom_ui/options/import_data_handler.h
+++ b/chrome/browser/dom_ui/options/import_data_handler.h
@@ -39,7 +39,7 @@ class ImportDataHandler : public OptionsPageUIHandler,
scoped_refptr<ImporterList> importer_list_;
// If non-null it means importing is in progress. ImporterHost takes care
- // of deleting itself when done import.
+ // of deleting itself when import is complete.
ImporterHost* importer_host_; // weak
DISALLOW_COPY_AND_ASSIGN(ImportDataHandler);
diff --git a/chrome/browser/importer/importer.cc b/chrome/browser/importer/importer.cc
index e1483ba..bb3b237 100644
--- a/chrome/browser/importer/importer.cc
+++ b/chrome/browser/importer/importer.cc
@@ -108,8 +108,11 @@ ImporterHost::ImporterHost(ImporterList::Observer* observer)
}
ImporterHost::~ImporterHost() {
+ importer_list_->SetObserver(NULL);
+
if (NULL != importer_)
importer_->Release();
+
if (installed_bookmark_observer_) {
DCHECK(profile_); // Only way for waiting_for_bookmarkbar_model_ to be true
// is if we have a profile.
diff --git a/chrome/browser/importer/importer_list.cc b/chrome/browser/importer/importer_list.cc
index a6c85d1..80b1e84 100644
--- a/chrome/browser/importer/importer_list.cc
+++ b/chrome/browser/importer/importer_list.cc
@@ -164,6 +164,10 @@ void ImporterList::DetectSourceProfiles(Observer* observer) {
NewRunnableMethod(this, &ImporterList::DetectSourceProfilesWorker));
}
+void ImporterList::SetObserver(Observer* observer) {
+ observer_ = observer;
+}
+
void ImporterList::DetectSourceProfilesHack() {
DetectSourceProfilesWorker();
}
@@ -258,7 +262,10 @@ void ImporterList::SourceProfilesLoaded(
source_profiles_->assign(profiles.begin(), profiles.end());
source_profiles_loaded_ = true;
- observer_->SourceProfilesLoaded();
- observer_ = NULL;
source_thread_id_ = BrowserThread::UI;
+
+ if (observer_) {
+ observer_->SourceProfilesLoaded();
+ observer_ = NULL;
+ }
}
diff --git a/chrome/browser/importer/importer_list.h b/chrome/browser/importer/importer_list.h
index 513a55f..17dbc41 100644
--- a/chrome/browser/importer/importer_list.h
+++ b/chrome/browser/importer/importer_list.h
@@ -41,6 +41,11 @@ class ImporterList : public base::RefCountedThreadSafe<ImporterList> {
// non-NULL.
void DetectSourceProfiles(Observer* observer);
+ // Sets the observer of this object. When the current observer is destroyed,
+ // this method should be called with a NULL |observer| so it is not notified
+ // after destruction.
+ void SetObserver(Observer* observer);
+
// DEPRECATED: This method is synchronous and performs file operations which
// may end up blocking the current thread, which is usually the UI thread.
void DetectSourceProfilesHack();