summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/cocoa/bookmark_menu_bridge.h3
-rw-r--r--chrome/browser/cocoa/bookmark_menu_bridge.mm22
2 files changed, 22 insertions, 3 deletions
diff --git a/chrome/browser/cocoa/bookmark_menu_bridge.h b/chrome/browser/cocoa/bookmark_menu_bridge.h
index 2516b4f..b350fd5 100644
--- a/chrome/browser/cocoa/bookmark_menu_bridge.h
+++ b/chrome/browser/cocoa/bookmark_menu_bridge.h
@@ -72,6 +72,9 @@ class BookmarkMenuBridge : public BookmarkModelObserver,
// Return the Bookmark menu.
NSMenu* BookmarkMenu();
+ // Start watching the bookmarks for changes.
+ void ObserveBookmarkModel();
+
private:
friend class BookmarkMenuBridgeTest;
diff --git a/chrome/browser/cocoa/bookmark_menu_bridge.mm b/chrome/browser/cocoa/bookmark_menu_bridge.mm
index eea9b413..fc29548 100644
--- a/chrome/browser/cocoa/bookmark_menu_bridge.mm
+++ b/chrome/browser/cocoa/bookmark_menu_bridge.mm
@@ -14,9 +14,20 @@
#include "chrome/browser/profile_manager.h"
BookmarkMenuBridge::BookmarkMenuBridge()
- : controller_([[BookmarkMenuCocoaController alloc] initWithBridge:this]),
- observing_(true) {
- BrowserList::AddObserver(this);
+ : controller_([[BookmarkMenuCocoaController alloc] initWithBridge:this]) {
+ // Depending on when this is constructed, we may or may not have a
+ // browser yet. If we do, start watching the bookmarks. If we do
+ // not, delay watching until we see a SetLastActive(). At this time
+ // (6/12/09), the BookmarkMenuBridge object is constructed AFTER the
+ // first SetLastActive in -[AppController applicationDidFinishLaunching:].
+ Browser* browser = BrowserList::GetLastActive();
+ if (browser) {
+ observing_ = false; // not observing browser activation
+ ObserveBookmarkModel();
+ } else {
+ observing_ = true;
+ BrowserList::AddObserver(this);
+ }
}
BookmarkMenuBridge::~BookmarkMenuBridge() {
@@ -104,6 +115,11 @@ void BookmarkMenuBridge::OnBrowserRemoving(const Browser* browser) {
void BookmarkMenuBridge::OnBrowserSetLastActive(const Browser* browser) {
BrowserList::RemoveObserver(this);
observing_ = false;
+ ObserveBookmarkModel();
+}
+
+// Watch for changes.
+void BookmarkMenuBridge::ObserveBookmarkModel() {
BookmarkModel* model = GetBookmarkModel();
model->AddObserver(this);
if (model->IsLoaded())