summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-10 19:01:08 +0000
committerpinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-10 19:01:08 +0000
commit81d8e4cdfbc33b0fd56e632b463469c5bfb81637 (patch)
tree10edccaefaf4d6f2fe31c66cd4014e5c0d2ed76c
parentbf41de9e4bd0a3cf19da546ae05ca079031c700a (diff)
downloadchromium_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.h9
-rw-r--r--chrome/browser/cocoa/browser_window_cocoa.mm2
-rw-r--r--chrome/browser/cocoa/browser_window_controller.h16
-rw-r--r--chrome/browser/cocoa/browser_window_controller.mm33
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.