summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser_window_controller.mm
blob: c5e4abc9ada9df8e6252bdcd49c0fc75672089b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "chrome/browser/browser.h"
#import "chrome/browser/browser_window_cocoa.h"
#import "chrome/browser/browser_window_controller.h"

@implementation BrowserWindowController

// Load the browser window nib and do any Cocoa-specific initialization.
// Takes ownership of |browser|. Note that the nib also sets this controller
// up as the window's delegate.
- (id)initWithBrowser:(Browser*)browser {
  if ((self = [super initWithWindowNibName:@"BrowserWindow"])) {
    browser_ = browser;
    window_shim_ = new BrowserWindowCocoa(self, [self window]);
  }
  return self;
}

- (void)dealloc {
  browser_->CloseAllTabs();
  delete browser_;
  delete window_shim_;
  [super dealloc];
}

// Access the C++ bridge between the NSWindow and the rest of Chromium
- (BrowserWindow*)browserWindow {
  return window_shim_;
}

- (void)windowDidLoad {
  [(NSControl*)[url_bar_ view]
      setStringValue:@"http://the.interwebs.start.here"];
}

- (void)destroyBrowser {
  // we need the window to go away now, other areas of code will be checking
  // the number of browser objects remaining after we finish so we can't defer
  // deletion via autorelease.
  [self autorelease];
}

// Called when the window is closing from Cocoa. Destroy this controller,
// which will tear down the rest of the infrastructure as the Browser is
// itself destroyed.
- (void)windowWillClose:(NSNotification *)notification {
  [self autorelease];
}

// Called when the user wants to close a window. Usually it's ok, but we may
// want to prompt the user when they have multiple tabs open, for example.
- (BOOL)windowShouldClose:(id)sender {
  // TODO(pinkerton): check tab model to see if it's ok to close the 
  // window. Use NSGetAlertPanel() and runModalForWindow:.
  return YES;
}

// NSToolbar delegate methods

- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar {
  return [NSArray arrayWithObjects:[back_button_ itemIdentifier],
                                   [forward_button_ itemIdentifier],
                                   [url_bar_ itemIdentifier], nil];
}

- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar {
  return [NSArray arrayWithObjects:[back_button_ itemIdentifier],
                                   [forward_button_ itemIdentifier],
                                   [url_bar_ itemIdentifier], nil];
}

@end