diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-01 01:05:11 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-01 01:05:11 +0000 |
commit | b2448200e68aab938f1c20259c1efe966da397cf (patch) | |
tree | a1f91d9db0f02282e13867f109587e901d8420fa | |
parent | fb534c949f92bec8c6312b58ffcc04c5dc488f2d (diff) | |
download | chromium_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.cc | 3 | ||||
-rw-r--r-- | chrome/browser/dom_ui/options/import_data_handler.h | 2 | ||||
-rw-r--r-- | chrome/browser/importer/importer.cc | 3 | ||||
-rw-r--r-- | chrome/browser/importer/importer_list.cc | 11 | ||||
-rw-r--r-- | chrome/browser/importer/importer_list.h | 5 |
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(); |