diff options
author | pinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-10 19:01:08 +0000 |
---|---|---|
committer | pinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-10 19:01:08 +0000 |
commit | 81d8e4cdfbc33b0fd56e632b463469c5bfb81637 (patch) | |
tree | 10edccaefaf4d6f2fe31c66cd4014e5c0d2ed76c | |
parent | bf41de9e4bd0a3cf19da546ae05ca079031c700a (diff) | |
download | chromium_src-81d8e4cdfbc33b0fd56e632b463469c5bfb81637.zip chromium_src-81d8e4cdfbc33b0fd56e632b463469c5bfb81637.tar.gz chromium_src-81d8e4cdfbc33b0fd56e632b463469c5bfb81637.tar.bz2 |
Take two converting to scoped pointers, without ui_test failures.
Review URL: http://codereview.chromium.org/67039
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13522 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/cocoa/browser_window_cocoa.h | 9 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_cocoa.mm | 2 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_controller.h | 16 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_controller.mm | 33 |
4 files changed, 32 insertions, 28 deletions
diff --git a/chrome/browser/cocoa/browser_window_cocoa.h b/chrome/browser/cocoa/browser_window_cocoa.h index d673a8d..92b59b5 100644 --- a/chrome/browser/cocoa/browser_window_cocoa.h +++ b/chrome/browser/cocoa/browser_window_cocoa.h @@ -6,6 +6,7 @@ #define CHROME_BROWSER_COCOA_BROWSER_WINDOW_COCOA_H_ #include "base/scoped_ptr.h" +#include "base/scoped_nsobject.h" #include "chrome/browser/browser_window.h" #include "chrome/browser/bookmarks/bookmark_model.h" @@ -73,9 +74,13 @@ class BrowserWindowCocoa : public BrowserWindow { virtual void DestroyBrowser(); private: - Browser* browser_; + // We hold a strong ref to the window so that it will live after the + // NSWindowController (the BWC) has run its dealloc. We won't do anything + // with it, just make sure it survives until C++ teardown (where we get + // destroyed). + scoped_nsobject<NSWindow> window_; + Browser* browser_; // weak, owned by controller BrowserWindowController* controller_; // weak, owns us - NSWindow* window_; // weak, owned by |controller_| // The status bubble manager. Always non-NULL. scoped_ptr<StatusBubbleMac> status_bubble_; }; diff --git a/chrome/browser/cocoa/browser_window_cocoa.mm b/chrome/browser/cocoa/browser_window_cocoa.mm index da387cd..3b7f129 100644 --- a/chrome/browser/cocoa/browser_window_cocoa.mm +++ b/chrome/browser/cocoa/browser_window_cocoa.mm @@ -12,7 +12,7 @@ BrowserWindowCocoa::BrowserWindowCocoa(Browser* browser, BrowserWindowController* controller, NSWindow* window) - : browser_(browser), controller_(controller), window_(window) { + : window_([window retain]), browser_(browser), controller_(controller) { status_bubble_.reset(new StatusBubbleMac(window_)); } diff --git a/chrome/browser/cocoa/browser_window_controller.h b/chrome/browser/cocoa/browser_window_controller.h index df77819..e795273 100644 --- a/chrome/browser/cocoa/browser_window_controller.h +++ b/chrome/browser/cocoa/browser_window_controller.h @@ -6,10 +6,14 @@ #define CHROME_BROWSER_COCOA_BROWSER_WINDOW_CONTROLLER_H_ // A class acting as the Objective-C controller for the Browser object. Handles -// interactions between Cocoa and the cross-platform code. +// interactions between Cocoa and the cross-platform code. Each window has a +// single set of toolbars (main toolbar, bookmark bar, etc) and, by virtue of +// being a TabWindowController, a tab strip along the top. #import <Cocoa/Cocoa.h> +#include "base/scoped_nsobject.h" +#include "base/scoped_ptr.h" #import "chrome/browser/cocoa/tab_window_controller.h" #import "chrome/browser/cocoa/toolbar_view.h" @@ -27,11 +31,11 @@ class TabStripModelObserverBridge; @interface BrowserWindowController : TabWindowController<NSUserInterfaceValidations> { @private - TabStripController* tabStripController_; - ToolbarController* toolbarController_; - Browser* browser_; - TabStripModelObserverBridge* tabObserver_; - BrowserWindowCocoa* windowShim_; + scoped_ptr<Browser> browser_; + scoped_ptr<TabStripModelObserverBridge> tabObserver_; + scoped_ptr<BrowserWindowCocoa> windowShim_; + scoped_nsobject<ToolbarController> toolbarController_; + scoped_nsobject<TabStripController> tabStripController_; } // Load the browser window nib and do any Cocoa-specific initialization. diff --git a/chrome/browser/cocoa/browser_window_controller.mm b/chrome/browser/cocoa/browser_window_controller.mm index fc1e0ec..f076e26 100644 --- a/chrome/browser/cocoa/browser_window_controller.mm +++ b/chrome/browser/cocoa/browser_window_controller.mm @@ -27,11 +27,11 @@ // up as the window's delegate. - (id)initWithBrowser:(Browser*)browser { if ((self = [super initWithWindowNibName:@"BrowserWindow"])) { - browser_ = browser; - DCHECK(browser_); - tabObserver_ = new TabStripModelObserverBridge(browser->tabstrip_model(), - self); - windowShim_ = new BrowserWindowCocoa(browser, self, [self window]); + DCHECK(browser); + browser_.reset(browser); + tabObserver_.reset( + new TabStripModelObserverBridge(browser->tabstrip_model(), self)); + windowShim_.reset(new BrowserWindowCocoa(browser, self, [self window])); // The window is now fully realized and |-windowDidLoad:| has been // called. We shouldn't do much in wDL because |windowShim_| won't yet @@ -46,17 +46,17 @@ // this window's Browser and the tab strip view. The controller will handle // registering for the appropriate tab notifications from the back-end and // managing the creation of new tabs. - tabStripController_ = [[TabStripController alloc] - initWithView:[self tabStripView] - switchView:[self tabContentArea] - browser:browser_]; + tabStripController_.reset([[TabStripController alloc] + initWithView:[self tabStripView] + switchView:[self tabContentArea] + browser:browser_.get()]); // Create a controller for the toolbar, giving it the toolbar model object // and the toolbar view from the nib. The controller will handle // registering for the appropriate command state changes from the back-end. - toolbarController_ = [[ToolbarController alloc] - initWithModel:browser->toolbar_model() - commands:browser->command_updater()]; + toolbarController_.reset([[ToolbarController alloc] + initWithModel:browser->toolbar_model() + commands:browser->command_updater()]); [self positionToolbar]; } return self; @@ -64,17 +64,12 @@ - (void)dealloc { browser_->CloseAllTabs(); - [tabStripController_ release]; - [toolbarController_ release]; - delete windowShim_; - delete tabObserver_; - delete browser_; [super dealloc]; } // Access the C++ bridge between the NSWindow and the rest of Chromium - (BrowserWindow*)browserWindow { - return windowShim_; + return windowShim_.get(); } // Position |toolbarView_| below the tab strip, but not as a sibling. The @@ -147,7 +142,7 @@ // Called right after our window became the main window. - (void)windowDidBecomeMain:(NSNotification *)notification { - BrowserList::SetLastActive(browser_); + BrowserList::SetLastActive(browser_.get()); } // Update a toggle state for an NSMenuItem if modified. |