summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sessions
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-06 16:58:03 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-06 16:58:03 +0000
commit6a02963e645852d8ce70b53aa6199ec1780f31c2 (patch)
tree7df60ab260a074368dbe29ad11f61344b218cac4 /chrome/browser/sessions
parent690a99c80e4fe4e6eda9010b88e4438f57912336 (diff)
downloadchromium_src-6a02963e645852d8ce70b53aa6199ec1780f31c2.zip
chromium_src-6a02963e645852d8ce70b53aa6199ec1780f31c2.tar.gz
chromium_src-6a02963e645852d8ce70b53aa6199ec1780f31c2.tar.bz2
This is a redo of my previous notification registrar change. I saw a crash in handling NAV_ENTRY_COMMITTED, so am changing all consumers of this to use the registrar so that it is impossible to forget to unregister.
The difference is that in tab_contents I moved the removal code in RemoveInfoBar to only remove the listener if an infobar was actually removed. Review URL: http://codereview.chromium.org/16534 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@7589 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/sessions')
-rw-r--r--chrome/browser/sessions/session_service.cc38
-rw-r--r--chrome/browser/sessions/session_service.h3
2 files changed, 15 insertions, 26 deletions
diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc
index 6016651..227c6ff 100644
--- a/chrome/browser/sessions/session_service.cc
+++ b/chrome/browser/sessions/session_service.cc
@@ -126,20 +126,6 @@ SessionService::SessionService(const std::wstring& save_path)
SessionService::~SessionService() {
Save();
-
- // Unregister our notifications.
- NotificationService::current()->RemoveObserver(
- this, NOTIFY_TAB_PARENTED, NotificationService::AllSources());
- NotificationService::current()->RemoveObserver(
- this, NOTIFY_TAB_CLOSED, NotificationService::AllSources());
- NotificationService::current()->RemoveObserver(
- this, NOTIFY_NAV_LIST_PRUNED, NotificationService::AllSources());
- NotificationService::current()->RemoveObserver(
- this, NOTIFY_NAV_ENTRY_CHANGED, NotificationService::AllSources());
- NotificationService::current()->RemoveObserver(
- this, NOTIFY_NAV_ENTRY_COMMITTED, NotificationService::AllSources());
- NotificationService::current()->RemoveObserver(
- this, NOTIFY_BROWSER_OPENED, NotificationService::AllSources());
}
void SessionService::ResetFromCurrentBrowsers() {
@@ -380,18 +366,18 @@ SessionService::Handle SessionService::GetLastSession(
void SessionService::Init() {
// Register for the notifications we're interested in.
- NotificationService::current()->AddObserver(
- this, NOTIFY_TAB_PARENTED, NotificationService::AllSources());
- NotificationService::current()->AddObserver(
- this, NOTIFY_TAB_CLOSED, NotificationService::AllSources());
- NotificationService::current()->AddObserver(
- this, NOTIFY_NAV_LIST_PRUNED, NotificationService::AllSources());
- NotificationService::current()->AddObserver(
- this, NOTIFY_NAV_ENTRY_CHANGED, NotificationService::AllSources());
- NotificationService::current()->AddObserver(
- this, NOTIFY_NAV_ENTRY_COMMITTED, NotificationService::AllSources());
- NotificationService::current()->AddObserver(
- this, NOTIFY_BROWSER_OPENED, NotificationService::AllSources());
+ registrar_.Add(this, NOTIFY_TAB_PARENTED,
+ NotificationService::AllSources());
+ registrar_.Add(this, NOTIFY_TAB_CLOSED,
+ NotificationService::AllSources());
+ registrar_.Add(this, NOTIFY_NAV_LIST_PRUNED,
+ NotificationService::AllSources());
+ registrar_.Add(this, NOTIFY_NAV_ENTRY_CHANGED,
+ NotificationService::AllSources());
+ registrar_.Add(this, NOTIFY_NAV_ENTRY_COMMITTED,
+ NotificationService::AllSources());
+ registrar_.Add(this, NOTIFY_BROWSER_OPENED,
+ NotificationService::AllSources());
}
void SessionService::Observe(NotificationType type,
diff --git a/chrome/browser/sessions/session_service.h b/chrome/browser/sessions/session_service.h
index 1c3402d3..7af43f0 100644
--- a/chrome/browser/sessions/session_service.h
+++ b/chrome/browser/sessions/session_service.h
@@ -12,6 +12,7 @@
#include "chrome/browser/sessions/base_session_service.h"
#include "chrome/browser/sessions/session_id.h"
#include "chrome/common/notification_service.h"
+#include "chrome/common/notification_registrar.h"
class Browser;
class NavigationController;
@@ -305,6 +306,8 @@ class SessionService : public BaseSessionService,
return type == Browser::TYPE_NORMAL;
}
+ NotificationRegistrar registrar_;
+
// Maps from session tab id to the range of navigation entries that has
// been written to disk.
//