| Index: chrome/browser/ui/cocoa/browser_window_controller.mm
|
| diff --git a/chrome/browser/ui/cocoa/browser_window_controller.mm b/chrome/browser/ui/cocoa/browser_window_controller.mm
|
| index b86492f79da7f30b1b6dd650a603f6e73c7dfe09..6bc2998691073c31a7d531fb771529b632936292 100644
|
| --- a/chrome/browser/ui/cocoa/browser_window_controller.mm
|
| +++ b/chrome/browser/ui/cocoa/browser_window_controller.mm
|
| @@ -40,6 +40,7 @@
|
| #include "chrome/browser/ui/browser_window_state.h"
|
| #import "chrome/browser/ui/cocoa/background_gradient_view.h"
|
| #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h"
|
| +#import "chrome/browser/ui/cocoa/bookmarks/bookmark_bubble_observer_cocoa.h"
|
| #import "chrome/browser/ui/cocoa/bookmarks/bookmark_editor_controller.h"
|
| #import "chrome/browser/ui/cocoa/browser_window_cocoa.h"
|
| #import "chrome/browser/ui/cocoa/browser_window_controller_private.h"
|
| @@ -1766,36 +1767,29 @@ using content::WebContents;
|
| // Show the bookmark bubble (e.g. user just clicked on the STAR).
|
| - (void)showBookmarkBubbleForURL:(const GURL&)url
|
| alreadyBookmarked:(BOOL)alreadyMarked {
|
| - if (!bookmarkBubbleController_) {
|
| + if (!bookmarkBubbleObserver_.get()) {
|
| + bookmarkBubbleObserver_.reset(new BookmarkBubbleObserverCocoa(self));
|
| BookmarkModel* model =
|
| BookmarkModelFactory::GetForProfile(browser_->profile());
|
| bookmarks::ManagedBookmarkService* managed =
|
| ManagedBookmarkServiceFactory::GetForProfile(browser_->profile());
|
| const BookmarkNode* node = model->GetMostRecentlyAddedUserNodeForURL(url);
|
| - bookmarkBubbleController_ =
|
| - [[BookmarkBubbleController alloc] initWithParentWindow:[self window]
|
| - managed:managed
|
| - model:model
|
| - node:node
|
| - alreadyBookmarked:alreadyMarked];
|
| + bookmarkBubbleController_ = [[BookmarkBubbleController alloc]
|
| + initWithParentWindow:[self window]
|
| + bubbleObserver:bookmarkBubbleObserver_.get()
|
| + managed:managed
|
| + model:model
|
| + node:node
|
| + alreadyBookmarked:alreadyMarked];
|
| [bookmarkBubbleController_ showWindow:self];
|
| - NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
|
| - [center addObserver:self
|
| - selector:@selector(bookmarkBubbleWindowWillClose:)
|
| - name:NSWindowWillCloseNotification
|
| - object:[bookmarkBubbleController_ window]];
|
| + DCHECK(bookmarkBubbleObserver_);
|
| }
|
| }
|
|
|
| -// Nil out the weak bookmark bubble controller reference.
|
| -- (void)bookmarkBubbleWindowWillClose:(NSNotification*)notification {
|
| - DCHECK_EQ([notification object], [bookmarkBubbleController_ window]);
|
| -
|
| - NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
|
| - [center removeObserver:self
|
| - name:NSWindowWillCloseNotification
|
| - object:[bookmarkBubbleController_ window]];
|
| +- (void)bookmarkBubbleClosed {
|
| + // Nil out the weak bookmark bubble controller reference.
|
| bookmarkBubbleController_ = nil;
|
| + bookmarkBubbleObserver_.reset();
|
| }
|
|
|
| // Handle the editBookmarkNode: action sent from bookmark bubble controllers.
|
|
|