diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/app/nibs/English.lproj/BrowserWindow.xib | 1200 | ||||
-rw-r--r-- | chrome/browser/app_controller_mac.mm | 11 | ||||
-rw-r--r-- | chrome/browser/browser.cc | 42 | ||||
-rw-r--r-- | chrome/browser/browser.h | 40 | ||||
-rw-r--r-- | chrome/browser/browser_list.cc | 10 | ||||
-rw-r--r-- | chrome/browser/browser_window_cocoa.h | 64 | ||||
-rw-r--r-- | chrome/browser/browser_window_cocoa.mm | 141 | ||||
-rw-r--r-- | chrome/browser/browser_window_controller.h | 44 | ||||
-rw-r--r-- | chrome/browser/browser_window_controller.mm | 75 | ||||
-rw-r--r-- | chrome/browser/browser_window_factory.mm | 20 | ||||
-rw-r--r-- | chrome/browser/tab_contents/tab_contents_delegate.h | 6 | ||||
-rw-r--r-- | chrome/chrome.xcodeproj/project.pbxproj | 63 | ||||
-rw-r--r-- | chrome/common/temp_scaffolding_stubs.cpp | 25 | ||||
-rw-r--r-- | chrome/common/temp_scaffolding_stubs.h | 127 |
14 files changed, 1833 insertions, 35 deletions
diff --git a/chrome/app/nibs/English.lproj/BrowserWindow.xib b/chrome/app/nibs/English.lproj/BrowserWindow.xib new file mode 100644 index 0000000..31a244a --- /dev/null +++ b/chrome/app/nibs/English.lproj/BrowserWindow.xib @@ -0,0 +1,1200 @@ +<?xml version="1.0" encoding="UTF-8"?> +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> + <data> + <int key="IBDocument.SystemTarget">1050</int> + <string key="IBDocument.SystemVersion">9G55</string> + <string key="IBDocument.InterfaceBuilderVersion">677</string> + <string key="IBDocument.AppKitVersion">949.43</string> + <string key="IBDocument.HIToolboxVersion">353.00</string> + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSArray" key="IBDocument.PluginDependencies"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + </object> + <object class="NSMutableDictionary" key="IBDocument.Metadata"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSCustomObject" id="1001"> + <string key="NSClassName">BrowserWindowController</string> + </object> + <object class="NSCustomObject" id="1003"> + <string key="NSClassName">FirstResponder</string> + </object> + <object class="NSCustomObject" id="1004"> + <string key="NSClassName">NSApplication</string> + </object> + <object class="NSWindowTemplate" id="1005"> + <int key="NSWindowStyleMask">15</int> + <int key="NSWindowBacking">2</int> + <string key="NSWindowRect">{{60, 229}, {706, 587}}</string> + <int key="NSWTFlags">536870912</int> + <string key="NSWindowTitle">Chromium</string> + <string key="NSWindowClass">NSWindow</string> + <object class="NSToolbar" key="NSViewClass" id="666276990"> + <object class="NSMutableString" key="NSToolbarIdentifier"> + <characters key="NS.bytes">B145A277-7C29-43C9-B6A4-63E114ED1127</characters> + </object> + <nil key="NSToolbarDelegate"/> + <bool key="NSToolbarPrefersToBeShown">YES</bool> + <bool key="NSToolbarShowsBaselineSeparator">YES</bool> + <bool key="NSToolbarAllowsUserCustomization">YES</bool> + <bool key="NSToolbarAutosavesConfiguration">YES</bool> + <int key="NSToolbarDisplayMode">2</int> + <int key="NSToolbarSizeMode">1</int> + <object class="NSMutableDictionary" key="NSToolbarIBIdentifiedItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMutableArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>59ABC3D2-2AD8-4C2F-AE10-23237BFA8DB1</string> + <string>5BBB2826-942F-4018-A8DD-2AF46F021ED8</string> + <string>7B1969A0-D9D8-4542-B95B-0AF4F2131E63</string> + <string>NSToolbarCustomizeToolbarItem</string> + <string>NSToolbarFlexibleSpaceItem</string> + <string>NSToolbarPrintItem</string> + <string>NSToolbarSeparatorItem</string> + <string>NSToolbarShowColorsItem</string> + <string>NSToolbarShowFontsItem</string> + <string>NSToolbarSpaceItem</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSToolbarItem" id="480415766"> + <object class="NSMutableString" key="NSToolbarItemIdentifier"> + <characters key="NS.bytes">59ABC3D2-2AD8-4C2F-AE10-23237BFA8DB1</characters> + </object> + <string key="NSToolbarItemLabel">Custom View</string> + <string key="NSToolbarItemPaletteLabel">Back</string> + <nil key="NSToolbarItemToolTip"/> + <object class="NSButton" key="NSToolbarItemView" id="524015755"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{0, 14}, {44, 19}}</string> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="252343938"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string type="base64-UTF8" key="NSContents">PDw</string> + <object class="NSFont" key="NSSupport" id="782222364"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">1.200000e+01</double> + <int key="NSfFlags">16</int> + </object> + <reference key="NSControlView" ref="524015755"/> + <int key="NSButtonFlags">-2038152961</int> + <int key="NSButtonFlags2">164</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + </object> + <nil key="NSToolbarItemImage"/> + <nil key="NSToolbarItemTarget"/> + <nil key="NSToolbarItemAction"/> + <string key="NSToolbarItemMinSize">{44, 19}</string> + <string key="NSToolbarItemMaxSize">{44, 19}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">0</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + <object class="NSToolbarItem" id="469691168"> + <object class="NSMutableString" key="NSToolbarItemIdentifier"> + <characters key="NS.bytes">5BBB2826-942F-4018-A8DD-2AF46F021ED8</characters> + </object> + <string key="NSToolbarItemLabel">Custom View</string> + <string key="NSToolbarItemPaletteLabel">OmniBar</string> + <nil key="NSToolbarItemToolTip"/> + <object class="NSTextField" key="NSToolbarItemView" id="125344446"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">303</int> + <string key="NSFrame">{{0, 14}, {345, 22}}</string> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="569714547"> + <int key="NSCellFlags">-1804468671</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents"/> + <object class="NSFont" key="NSSupport" id="369593060"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">1.300000e+01</double> + <int key="NSfFlags">1044</int> + </object> + <reference key="NSControlView" ref="125344446"/> + <bool key="NSDrawsBackground">YES</bool> + <object class="NSColor" key="NSBackgroundColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textBackgroundColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MQA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textColor</string> + <object class="NSColor" key="NSColor" id="690158073"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MAA</bytes> + </object> + </object> + </object> + </object> + <nil key="NSToolbarItemImage"/> + <nil key="NSToolbarItemTarget"/> + <nil key="NSToolbarItemAction"/> + <string key="NSToolbarItemMinSize">{345, 22}</string> + <string key="NSToolbarItemMaxSize">{345, 22}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">0</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + <object class="NSToolbarItem" id="285307729"> + <object class="NSMutableString" key="NSToolbarItemIdentifier"> + <characters key="NS.bytes">7B1969A0-D9D8-4542-B95B-0AF4F2131E63</characters> + </object> + <string key="NSToolbarItemLabel">Custom View</string> + <string key="NSToolbarItemPaletteLabel">Forward</string> + <nil key="NSToolbarItemToolTip"/> + <object class="NSButton" key="NSToolbarItemView" id="422086037"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{0, 14}, {52, 19}}</string> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="313044311"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string type="base64-UTF8" key="NSContents">Pj4</string> + <reference key="NSSupport" ref="782222364"/> + <reference key="NSControlView" ref="422086037"/> + <int key="NSButtonFlags">-2038152961</int> + <int key="NSButtonFlags2">164</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + </object> + <nil key="NSToolbarItemImage"/> + <nil key="NSToolbarItemTarget"/> + <nil key="NSToolbarItemAction"/> + <string key="NSToolbarItemMinSize">{52, 19}</string> + <string key="NSToolbarItemMaxSize">{52, 19}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">0</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + <object class="NSToolbarItem" id="188372072"> + <string key="NSToolbarItemIdentifier">NSToolbarCustomizeToolbarItem</string> + <string key="NSToolbarItemLabel">Customize</string> + <string key="NSToolbarItemPaletteLabel">Customize</string> + <string key="NSToolbarItemToolTip">Customize Toolbar</string> + <nil key="NSToolbarItemView"/> + <object class="NSImage" key="NSToolbarItemImage"> + <int key="NSImageFlags">683671552</int> + <string key="NSSize">{32, 32}</string> + <object class="NSMutableArray" key="NSReps"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray"> + <bool key="EncodedWithXMLCoder">YES</bool> + <integer value="0" id="8"/> + <object class="NSBitmapImageRep"> + <object class="NSData" key="NSTIFFRepresentation"> + <bytes key="NS.bytes">TU0AKgAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAICAgbAAAABAAAAAAEBAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAQEBAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAENDQ0dJSUlW11dXbBpaWnDb29vzyAgIGUPDw8xAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAABsbGyUoKChIHh4ePSkpKUonJycsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDCEJCQoWvr6/i9fX1/fX19f7h4eH82dnZ+YODg9sYGBg8 +AAAAAAAAAAAAAAAAAAAAAAAAAAJFRUV6ZGRkvf39/f/+/v7//////0NDQ7QAAAAEAAAAAAAAAAAAAAAA +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 +AAAACQAAABAAAAAYAAAAIAAAACoAAAAxAAAANgAAADkAAAA4AQEBOQAAAC8AAAAnAAAAHQAAABUAAAAO +AAAACgAAAAsAAAAPAAAAFwAAACAAAAAqAAAAMQAAADQAAAAzAAAALQAAACQAAAAbAAAAEgAAAAsAAAAA +AAAAAAAAAAQAAAAJAAAAEAAAABgAAAAgAAAAKgAAADEAAAA2AAAAOQAAADgAAAA1AAAALwAAACcAAAAd +AAAAFQAAAA4AAAAKAAAACwAAAA8AAAAXAAAAIAAAACoAAAAxAAAANAAAADMAAAAtAAAAJAAAABsAAAAS +AAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA +EKoBAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE +AAABFgADAAAAAQD8AAABFwAEAAAAAQAAEAABHAADAAAAAQABAAABUgADAAAAAQABAAABUwADAAAABAAA +ELIAAAAAAAgACAAIAAgAAQABAAEAAQ</bytes> + </object> + </object> + </object> + </object> + <object class="NSColor" key="NSColor" id="704723592"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MCAwAA</bytes> + </object> + </object> + <nil key="NSToolbarItemTarget"/> + <string key="NSToolbarItemAction">runToolbarCustomizationPalette:</string> + <string key="NSToolbarItemMinSize">{0, 0}</string> + <string key="NSToolbarItemMaxSize">{0, 0}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">-1</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + <object class="NSToolbarFlexibleSpaceItem" id="562849201"> + <string key="NSToolbarItemIdentifier">NSToolbarFlexibleSpaceItem</string> + <string key="NSToolbarItemLabel"/> + <string key="NSToolbarItemPaletteLabel">Flexible Space</string> + <nil key="NSToolbarItemToolTip"/> + <nil key="NSToolbarItemView"/> + <nil key="NSToolbarItemImage"/> + <nil key="NSToolbarItemTarget"/> + <nil key="NSToolbarItemAction"/> + <string key="NSToolbarItemMinSize">{1, 5}</string> + <string key="NSToolbarItemMaxSize">{20000, 32}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">-1</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + <object class="NSMenuItem" key="NSToolbarItemMenuFormRepresentation"> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <object class="NSCustomResource" key="NSOnImage" id="603413185"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuCheckmark</string> + </object> + <object class="NSCustomResource" key="NSMixedImage" id="358521446"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuMixedState</string> + </object> + </object> + </object> + <object class="NSToolbarItem" id="852566093"> + <string key="NSToolbarItemIdentifier">NSToolbarPrintItem</string> + <string key="NSToolbarItemLabel">Print</string> + <string key="NSToolbarItemPaletteLabel">Print</string> + <string key="NSToolbarItemToolTip">Print</string> + <nil key="NSToolbarItemView"/> + <object class="NSImage" key="NSToolbarItemImage"> + <int key="NSImageFlags">750780416</int> + <string key="NSSize">{32, 32}</string> + <object class="NSMutableArray" key="NSReps"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="8"/> + <object class="NSCoreUIImageRep"> + <object class="NSMutableDictionary" key="NSCoreUIImageOptions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMutableArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>imageNameKey</string> + <string>widget</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMutableString"> + <characters key="NS.bytes">image.ToolbarPrint</characters> + </object> + <string>image</string> + </object> + </object> + <string key="NSSize">{32, 32}</string> + <int key="NSBitsPerSample">0</int> + <bool key="NSHasAlpha">YES</bool> + </object> + </object> + </object> + <reference key="NSColor" ref="704723592"/> + </object> + <nil key="NSToolbarItemTarget"/> + <string key="NSToolbarItemAction">printDocument:</string> + <string key="NSToolbarItemMinSize">{0, 0}</string> + <string key="NSToolbarItemMaxSize">{0, 0}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">-1</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + <object class="NSToolbarSeparatorItem" id="273840948"> + <string key="NSToolbarItemIdentifier">NSToolbarSeparatorItem</string> + <string key="NSToolbarItemLabel"/> + <string key="NSToolbarItemPaletteLabel">Separator</string> + <nil key="NSToolbarItemToolTip"/> + <nil key="NSToolbarItemView"/> + <nil key="NSToolbarItemImage"/> + <nil key="NSToolbarItemTarget"/> + <nil key="NSToolbarItemAction"/> + <string key="NSToolbarItemMinSize">{12, 5}</string> + <string key="NSToolbarItemMaxSize">{12, 1000}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">-1</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + <object class="NSMenuItem" key="NSToolbarItemMenuFormRepresentation"> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="603413185"/> + <reference key="NSMixedImage" ref="358521446"/> + </object> + </object> + <object class="NSToolbarItem" id="627855121"> + <string key="NSToolbarItemIdentifier">NSToolbarShowColorsItem</string> + <string key="NSToolbarItemLabel">Colors</string> + <string key="NSToolbarItemPaletteLabel">Colors</string> + <string key="NSToolbarItemToolTip">Show Color Panel</string> + <nil key="NSToolbarItemView"/> + <object class="NSImage" key="NSToolbarItemImage"> + <int key="NSImageFlags">683671552</int> + <string key="NSSize">{32, 32}</string> + <object class="NSMutableArray" key="NSReps"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="8"/> + <object class="NSBitmapImageRep"> + <object class="NSData" key="NSTIFFRepresentation"> + <bytes key="NS.bytes">TU0AKgAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCQEOEzkMUylkF5BChyLCWqEq6G+wL/1voSro +ZYciwlFkGJAyOQxTCAkBDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkEPXiWEIbtJyTf/Yt9C/370Tf+d/lf/ +tv9c/77+V/+/9E7/u99C/7XJOf9+hCK7QUAOXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxQHHRZjIY42zEH+RvBI/2r/W/9//2D/ +kf9k/6L/Zv+w/mf/wf9m/9T/Zv/l/2H//v9e/+/ySv/Mwzj+Y1kXjhQRAx0AAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMUCR0adDOgP91f/1n/c/9c/2P/ +aP5i/4P+bv+Y/nL/qP53/7r+d//K/nb/2P5z/+f+bv/5/2f///9i///8W//dwD//dF4coBQPAx0AAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFmM0jj7dc/9Z/4r/ +Yf5//2z+ff9y/nX/iP59/6H+hf+w/on/wf6K/9H+if/g/ob/7/6A////eP//823//uNk///kXf/drT// +Y0cXjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1BKF41zHv+ +WP+m/2H+mP9s/pb/eP6T/4L+jf+P/or/p/6V/7j+mv/L/p3/2/6a/+f+lv/8/5D///uH//7pe//+3G// +/sxk///MXf/Mizj+QSkOXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCQYO +IIRau0fwov9d/6//a/6q/3j+qv+H/qj/k/6l/5r+nv+s/qL/wv6q/9T+rP/i/qv/8v+m////n//+8ZX/ +/uGK//7Se//+w23//7hh//CdSv+ETiK7CQUBDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAw5K1M2yZX/Wv/K/2P+vv90/rz/hP67/5L+uv+f/rr/qf60/7L+sP/K/rr/2/69/+z+u//8/7X/ +//mt//7nov/+2Jb//sqJ//65eP/+q2f//6Re/8htOf85GwxSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAFmRRkD7ftv9d/9f/a/7O/3r+zv+M/s//mv7N/6r+zP+3/s3/wP7F/87+yP/l/s// +9v/N////xP/+7bv//t6t//7Qn//+v5D//q+A//6fbv//lGH/321C/2MrGI8AAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAfh3fCSfTW/2D/4/9v/t//g/7f/5H+3/+k/t//sv7g/8H+3v/Q/t7/ +2P7Z/+3+4P///93///fT//7kxP/+17T//sSo//61l//+pYb//pRz//+FZv/0bU7/hzIiwgAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACihmehT/vn/Yv/z/3L/8f+F//H/lv/z/6f/8/+3//H/ +yf/x/9n/8v/o//D/+P/x///97f/+6dv//tnK//7Iuv/+tqr//qeZ//6WiP/+hXb//3Nl//5jVv+hMyno +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK62w/Vb///9j/v//dP7//4b+//+X/v// +qP7//7f+///L/v//3P7//+////////////L0//7e4P/+zc///ru9//6qrP/+mZv//oiK//51d//+ZWf/ +/1pc/7AvMf0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAolqHoUfX+/2Hu//9x7f7/ +hO3+/5ft/v+m7f7/tu3+/8jt/v/X7P7/5Or+//Xt////6f///tvt//7K3f/+usv//qq7//6YrP/+h5r/ +/neK//9md//+VWj/oSk26AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB91h8JJ0fT/ +Yd///27b/v+A2/7/kdv+/6Hc/v+w2v7/wNv+/8rX/v/V1P7/69z+//7Z////0Pn//sLm//602P/+pcj/ +/pW3//6EqP/+cpb//2WJ//RNcP+HIjTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +FlBkkD+x3/9a0f//asr+/3rL/v+Kyf7/mcr+/6fH/v+0x/7/u8D+/83F/v/ky/7/8sn///+////+uPD/ +/qng//6d0f/+jsP//n6y//5uov//Xpf/30Jx/2MXLI8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAALKjlTNJLJ/1jG//9huP7/crf+/4G2/v+Ptf7/nLP+/6av/v+xrP7/yLb+/9q3/v/qt/7/ ++7L///+q+//+n+n//pPa//6Fy//+dLz//mWu//9cqP/IN3D/OAwbUgAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAEGCQ4eWIS7RZ3w/1us//9npf7/daX+/4Wj/v+OoP7/l5j+/6qg/v/Apv7/ +0Kj+/+Cn/v/wpP7//5r///+S8//+h+P//njU//5sxf//X7r/8Emd/4QhT7sJAQUOAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0mQV4zd8z+V6D//16T/v9pkf7/dY7+/3+G/v+Nh/7/ +pZH+/7aX/v/Jl/7/2Zb+/+aR/v/3jP///4L+//556//+bN7//mHO//9Zzv/MNo3+QA0pXQAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUyY446bt3/VoX//156/v9ndv7/ +bm7+/4d3/v+fgv7/roP+/7+G/v/Phf7/3oL+/+18/v//dP///2v2//5h5f//Web/3T2u/2MWSI4AAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwgUHRkwdKA6WN3/ +VWz//1le//9nX/7/gWr+/5Ru/v+ncf7/tnT+/8hy/v/Wb/7/5mr+//Rj////Xf///1j+/90+wv90Gl+g +EwMOHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +BAcWHxciaJMzPMz+RkTw/2hY//98Wv//j2H//6Bh//+uY/7/v2L//9Jg///jXf///Fr//+5H8v/MNcX+ +aBhdkxUEEh4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAACAAAABRMTU3QoI5TMSDPI/2FA3/9+SfT/mVH+/7RW//+8U/7/vUn0/7o+3/+zNcj/ +jSSUzFMSUnMAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAQIAAAkFAAAVCAAAIg8EEkEmFl+UPCGOyE8op+dgK7D3biux/ncrsPd9KKfn +dSGOyFkWX5QbBBJBCAAAIgUAABUCAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgIAABAFAAAcCAAAKQwAADkRAABIFQAAVRgAAF0YAABf +GAAAXRUAAFURAABIDAAAOQgAACkFAAAcAgAAEAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAUAAAAIAAAACwAAAA4AAAAS +AAAAFAAAABUAAAAUAAAAEgAAAA4AAAALAAAACAAAAAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA +EKoBAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE +AAABFgADAAAAAQD8AAABFwAEAAAAAQAAEAABHAADAAAAAQABAAABUgADAAAAAQABAAABUwADAAAABAAA +ELIAAAAAAAgACAAIAAgAAQABAAEAAQ</bytes> + </object> + </object> + </object> + </object> + <reference key="NSColor" ref="704723592"/> + </object> + <nil key="NSToolbarItemTarget"/> + <string key="NSToolbarItemAction">orderFrontColorPanel:</string> + <string key="NSToolbarItemMinSize">{0, 0}</string> + <string key="NSToolbarItemMaxSize">{0, 0}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">-1</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + <object class="NSToolbarItem" id="852986780"> + <string key="NSToolbarItemIdentifier">NSToolbarShowFontsItem</string> + <string key="NSToolbarItemLabel">Fonts</string> + <string key="NSToolbarItemPaletteLabel">Fonts</string> + <string key="NSToolbarItemToolTip">Show Font Panel</string> + <nil key="NSToolbarItemView"/> + <object class="NSImage" key="NSToolbarItemImage"> + <int key="NSImageFlags">683671552</int> + <string key="NSSize">{32, 32}</string> + <object class="NSMutableArray" key="NSReps"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="8"/> + <object class="NSBitmapImageRep"> + <object class="NSData" key="NSTIFFRepresentation"> + <bytes key="NS.bytes">TU0AKgAAEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +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 +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BAAADAAAAAQAgAAABAQADAAAAAQAgAAABAgADAAAABAAA +EKoBAwADAAAAAQABAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQADAAAAAQAE +AAABFgADAAAAAQD8AAABFwAEAAAAAQAAEAABHAADAAAAAQABAAABUgADAAAAAQABAAABUwADAAAABAAA +ELIAAAAAAAgACAAIAAgAAQABAAEAAQ</bytes> + </object> + </object> + </object> + </object> + <reference key="NSColor" ref="704723592"/> + </object> + <nil key="NSToolbarItemTarget"/> + <string key="NSToolbarItemAction">orderFrontFontPanel:</string> + <string key="NSToolbarItemMinSize">{0, 0}</string> + <string key="NSToolbarItemMaxSize">{0, 0}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">-1</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + </object> + <object class="NSToolbarSpaceItem" id="308337088"> + <string key="NSToolbarItemIdentifier">NSToolbarSpaceItem</string> + <string key="NSToolbarItemLabel"/> + <string key="NSToolbarItemPaletteLabel">Space</string> + <nil key="NSToolbarItemToolTip"/> + <nil key="NSToolbarItemView"/> + <nil key="NSToolbarItemImage"/> + <nil key="NSToolbarItemTarget"/> + <nil key="NSToolbarItemAction"/> + <string key="NSToolbarItemMinSize">{32, 5}</string> + <string key="NSToolbarItemMaxSize">{32, 32}</string> + <bool key="NSToolbarItemEnabled">YES</bool> + <bool key="NSToolbarItemAutovalidates">YES</bool> + <int key="NSToolbarItemTag">-1</int> + <bool key="NSToolbarIsUserRemovable">YES</bool> + <int key="NSToolbarItemVisibilityPriority">0</int> + <object class="NSMenuItem" key="NSToolbarItemMenuFormRepresentation"> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="603413185"/> + <reference key="NSMixedImage" ref="358521446"/> + </object> + </object> + </object> + </object> + <object class="NSArray" key="NSToolbarIBAllowedItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="627855121"/> + <reference ref="852986780"/> + <reference ref="273840948"/> + <reference ref="852566093"/> + <reference ref="308337088"/> + <reference ref="562849201"/> + <reference ref="188372072"/> + <reference ref="480415766"/> + <reference ref="285307729"/> + <reference ref="469691168"/> + </object> + <object class="NSMutableArray" key="NSToolbarIBDefaultItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="480415766"/> + <reference ref="285307729"/> + <reference ref="627855121"/> + <reference ref="852986780"/> + <reference ref="273840948"/> + <reference ref="852566093"/> + <reference ref="308337088"/> + <reference ref="469691168"/> + <reference ref="562849201"/> + <reference ref="188372072"/> + </object> + <object class="NSMutableArray" key="NSToolbarIBSelectableItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> + <object class="NSView" key="NSWindowView" id="1006"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSTextField" id="792815433"> + <reference key="NSNextResponder" ref="1006"/> + <int key="NSvFlags">303</int> + <string key="NSFrame">{{273, 304}, {164, 17}}</string> + <reference key="NSSuperview" ref="1006"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="1033773883"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents">The Interwebs goes here.</string> + <reference key="NSSupport" ref="369593060"/> + <reference key="NSControlView" ref="792815433"/> + <object class="NSColor" key="NSBackgroundColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlTextColor</string> + <reference key="NSColor" ref="690158073"/> + </object> + </object> + </object> + <object class="NSCustomView" id="139012109"> + <reference key="NSNextResponder" ref="1006"/> + <int key="NSvFlags">266</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSButton" id="767834366"> + <reference key="NSNextResponder" ref="139012109"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{0, -1}, {106, 23}}</string> + <reference key="NSSuperview" ref="139012109"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="924993685"> + <int key="NSCellFlags">-2080244224</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Tab 1</string> + <reference key="NSSupport" ref="369593060"/> + <reference key="NSControlView" ref="767834366"/> + <int key="NSButtonFlags">-2033434369</int> + <int key="NSButtonFlags2">162</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + </object> + <object class="NSButton" id="930700877"> + <reference key="NSNextResponder" ref="139012109"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{105, -1}, {106, 23}}</string> + <reference key="NSSuperview" ref="139012109"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="575449400"> + <int key="NSCellFlags">-2080244224</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Tab 2</string> + <reference key="NSSupport" ref="369593060"/> + <reference key="NSControlView" ref="930700877"/> + <int key="NSButtonFlags">-2033434369</int> + <int key="NSButtonFlags2">162</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + </object> + </object> + <string key="NSFrame">{{0, 566}, {706, 21}}</string> + <reference key="NSSuperview" ref="1006"/> + <string key="NSClassName">NSView</string> + </object> + </object> + <string key="NSFrameSize">{706, 587}</string> + </object> + <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string> + <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> + </object> + </object> + <object class="IBObjectContainer" key="IBDocument.Objects"> + <object class="NSMutableArray" key="connectionRecords"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">window</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="1005"/> + </object> + <int key="connectionID">13</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">back_button_</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="480415766"/> + </object> + <int key="connectionID">20</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">forward_button_</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="285307729"/> + </object> + <int key="connectionID">24</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">url_bar_</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="469691168"/> + </object> + <int key="connectionID">28</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="666276990"/> + <reference key="destination" ref="1001"/> + </object> + <int key="connectionID">29</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="1005"/> + <reference key="destination" ref="1001"/> + </object> + <int key="connectionID">35</int> + </object> + </object> + <object class="IBMutableOrderedSet" key="objectRecords"> + <object class="NSArray" key="orderedObjects"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBObjectRecord"> + <int key="objectID">0</int> + <object class="NSArray" key="object" id="1002"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <reference key="children" ref="1000"/> + <nil key="parent"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-2</int> + <reference key="object" ref="1001"/> + <reference key="parent" ref="1002"/> + <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-1</int> + <reference key="object" ref="1003"/> + <reference key="parent" ref="1002"/> + <string key="objectName">First Responder</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-3</int> + <reference key="object" ref="1004"/> + <reference key="parent" ref="1002"/> + <string key="objectName">Application</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">1</int> + <reference key="object" ref="1005"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1006"/> + <reference ref="666276990"/> + </object> + <reference key="parent" ref="1002"/> + <string key="objectName">Browser</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">2</int> + <reference key="object" ref="1006"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="792815433"/> + <reference ref="139012109"/> + </object> + <reference key="parent" ref="1005"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">11</int> + <reference key="object" ref="792815433"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1033773883"/> + </object> + <reference key="parent" ref="1006"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">12</int> + <reference key="object" ref="1033773883"/> + <reference key="parent" ref="792815433"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">3</int> + <reference key="object" ref="666276990"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="469691168"/> + <reference ref="285307729"/> + <reference ref="480415766"/> + <reference ref="188372072"/> + <reference ref="562849201"/> + <reference ref="308337088"/> + <reference ref="852566093"/> + <reference ref="273840948"/> + <reference ref="852986780"/> + <reference ref="627855121"/> + </object> + <reference key="parent" ref="1005"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">27</int> + <reference key="object" ref="469691168"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="125344446"/> + </object> + <reference key="parent" ref="666276990"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">25</int> + <reference key="object" ref="125344446"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="569714547"/> + </object> + <reference key="parent" ref="469691168"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">26</int> + <reference key="object" ref="569714547"/> + <reference key="parent" ref="125344446"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">23</int> + <reference key="object" ref="285307729"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="422086037"/> + </object> + <reference key="parent" ref="666276990"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">21</int> + <reference key="object" ref="422086037"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="313044311"/> + </object> + <reference key="parent" ref="285307729"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">22</int> + <reference key="object" ref="313044311"/> + <reference key="parent" ref="422086037"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">19</int> + <reference key="object" ref="480415766"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="524015755"/> + </object> + <reference key="parent" ref="666276990"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">17</int> + <reference key="object" ref="524015755"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="252343938"/> + </object> + <reference key="parent" ref="480415766"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">18</int> + <reference key="object" ref="252343938"/> + <reference key="parent" ref="524015755"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">10</int> + <reference key="object" ref="188372072"/> + <reference key="parent" ref="666276990"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">9</int> + <reference key="object" ref="562849201"/> + <reference key="parent" ref="666276990"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">8</int> + <reference key="object" ref="308337088"/> + <reference key="parent" ref="666276990"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">7</int> + <reference key="object" ref="852566093"/> + <reference key="parent" ref="666276990"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">6</int> + <reference key="object" ref="273840948"/> + <reference key="parent" ref="666276990"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">5</int> + <reference key="object" ref="852986780"/> + <reference key="parent" ref="666276990"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">4</int> + <reference key="object" ref="627855121"/> + <reference key="parent" ref="666276990"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">30</int> + <reference key="object" ref="139012109"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="767834366"/> + <reference ref="930700877"/> + </object> + <reference key="parent" ref="1006"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">31</int> + <reference key="object" ref="767834366"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="924993685"/> + </object> + <reference key="parent" ref="139012109"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">32</int> + <reference key="object" ref="924993685"/> + <reference key="parent" ref="767834366"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">33</int> + <reference key="object" ref="930700877"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="575449400"/> + </object> + <reference key="parent" ref="139012109"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">34</int> + <reference key="object" ref="575449400"/> + <reference key="parent" ref="930700877"/> + </object> + </object> + </object> + <object class="NSMutableDictionary" key="flattenedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMutableArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>-1.IBPluginDependency</string> + <string>-2.IBPluginDependency</string> + <string>-3.IBPluginDependency</string> + <string>1.IBEditorWindowLastContentRect</string> + <string>1.IBPluginDependency</string> + <string>1.IBWindowTemplateEditedContentRect</string> + <string>1.NSWindowTemplate.visibleAtLaunch</string> + <string>1.WindowOrigin</string> + <string>1.editorWindowContentRectSynchronizationRect</string> + <string>10.IBPluginDependency</string> + <string>11.IBPluginDependency</string> + <string>12.IBPluginDependency</string> + <string>17.IBPluginDependency</string> + <string>18.IBPluginDependency</string> + <string>2.IBPluginDependency</string> + <string>2.IBViewIntegration.shadowBlurRadius</string> + <string>2.IBViewIntegration.shadowColor</string> + <string>2.IBViewIntegration.shadowOffsetHeight</string> + <string>2.IBViewIntegration.shadowOffsetWidth</string> + <string>21.IBPluginDependency</string> + <string>22.IBPluginDependency</string> + <string>25.IBPluginDependency</string> + <string>26.IBPluginDependency</string> + <string>3.IBEditorWindowLastContentRect</string> + <string>3.IBPluginDependency</string> + <string>30.IBPluginDependency</string> + <string>30.IBViewIntegration.shadowBlurRadius</string> + <string>30.IBViewIntegration.shadowColor</string> + <string>30.IBViewIntegration.shadowOffsetHeight</string> + <string>30.IBViewIntegration.shadowOffsetWidth</string> + <string>31.IBPluginDependency</string> + <string>32.IBPluginDependency</string> + <string>33.IBPluginDependency</string> + <string>34.IBPluginDependency</string> + <string>4.IBPluginDependency</string> + <string>5.IBPluginDependency</string> + <string>6.IBPluginDependency</string> + <string>7.IBPluginDependency</string> + <string>8.IBPluginDependency</string> + <string>9.IBPluginDependency</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{150, 182}, {706, 587}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{150, 182}, {706, 587}}</string> + <boolean value="NO"/> + <string>{196, 240}</string> + <string>{{357, 418}, {480, 270}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <real value="0.000000e+00"/> + <reference ref="690158073"/> + <real value="0.000000e+00"/> + <real value="0.000000e+00"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{195, 769}, {616, 0}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <real value="0.000000e+00"/> + <reference ref="690158073"/> + <real value="0.000000e+00"/> + <real value="0.000000e+00"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + </object> + </object> + <object class="NSMutableDictionary" key="unlocalizedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="activeLocalization"/> + <object class="NSMutableDictionary" key="localizations"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="sourceID"/> + <int key="maxID">35</int> + </object> + <object class="IBClassDescriber" key="IBDocument.Classes"> + <object class="NSMutableArray" key="referencedPartialClassDescriptions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">BrowserWindowController</string> + <string key="superclassName">NSWindowController</string> + <object class="NSMutableDictionary" key="outlets"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMutableArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>back_button_</string> + <string>forward_button_</string> + <string>tab_bar_view_</string> + <string>url_bar_</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSToolbarItem</string> + <string>NSToolbarItem</string> + <string>NSView</string> + <string>NSToolbarItem</string> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">browser/browser_window_controller.h</string> + </object> + </object> + </object> + </object> + <int key="IBDocument.localizationMode">0</int> + <string key="IBDocument.LastKnownRelativeProjectPath">../../../chrome.xcodeproj</string> + <int key="IBDocument.defaultPropertyAccessControl">3</int> + </data> +</archive> diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm index cf0c49f..16073d8 100644 --- a/chrome/browser/app_controller_mac.mm +++ b/chrome/browser/app_controller_mac.mm @@ -5,13 +5,14 @@ #import "app_controller_mac.h" #import "base/message_loop.h" +#import "chrome/browser/browser_list.h" @implementation AppController // We can't use the standard terminate: method because it will abrubptly exit // the app and leave things on the stack in an unfinalized state. We need to // post a quit message to our run loop so the stack can gracefully unwind. -- (IBAction)quit:(id)sender { +- (IBAction)quit:(id)sender { // TODO(pinkerton): // since we have to roll it ourselves, ask the delegate (ourselves, really) // if we should terminate. For example, we might not want to if the user @@ -19,6 +20,14 @@ // require posting UI and may require spinning up another run loop to // handle it. If it says to continue, post the quit message, otherwise // go back to normal. + + // Close all the windows. + // TODO(pinkerton): the close code assumes that teardown happens + // synchronously, however with autorelease pools and ref-counting, we can't + // guarantee the window controller hits 0 inside this call, and thus the + // number of Browsers still alive will certainly be non-zero. Not sure yet + // how to handle this case. + // BrowserList::CloseAllBrowsers(false); MessageLoopForUI::current()->Quit(); } diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index 3e12603..ddceec2 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -2,19 +2,29 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/command_line.h" +#include "base/idle_timer.h" +#include "base/logging.h" +#include "base/string_util.h" +#include "chrome/browser/browser_list.h" +#include "chrome/common/pref_names.h" +#include "chrome/common/pref_service.h" +#include "net/base/cookie_monster.h" +#include "net/base/cookie_policy.h" +#include "net/base/net_util.h" +#include "net/base/registry_controlled_domain.h" +#include "net/url_request/url_request_context.h" + +#if defined(OS_WIN) + #include <windows.h> #include <shellapi.h> #include "chrome/browser/browser.h" -#include "base/command_line.h" -#include "base/idle_timer.h" -#include "base/logging.h" -#include "base/string_util.h" #include "chrome/app/chrome_dll_resource.h" #include "chrome/app/locales/locale_settings.h" #include "chrome/browser/automation/ui_controls.h" -#include "chrome/browser/browser_list.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_shutdown.h" #include "chrome/browser/browser_url_handler.h" @@ -53,20 +63,14 @@ #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/l10n_util.h" -#include "chrome/common/pref_names.h" -#include "chrome/common/pref_service.h" #include "chrome/common/win_util.h" -#include "net/base/cookie_monster.h" -#include "net/base/cookie_policy.h" -#include "net/base/net_util.h" -#include "net/base/registry_controlled_domain.h" #include "chromium_strings.h" #include "generated_resources.h" -using base::TimeDelta; +#endif // OS_WIN -static BrowserList g_browserlist; +using base::TimeDelta; // How long we wait before updating the browser chrome while loading a page. static const int kUIUpdateCoalescingTimeMS = 200; @@ -84,12 +88,14 @@ static const int kWindowTilePixels = 20; class ReducePluginsWorkingSetTask : public Task { public: virtual void Run() { +#if defined(OS_WIN) for (PluginProcessHostIterator iter; !iter.Done(); ++iter) { PluginProcessHost* plugin = const_cast<PluginProcessHost*>(*iter); DCHECK(plugin->process()); base::Process process(plugin->process()); process.ReduceWorkingSet(); } +#endif } }; @@ -104,6 +110,7 @@ class BrowserIdleTimer : public base::IdleTimer { } virtual void OnIdle() { +#if defined(OS_WIN) // We're idle. Release browser and renderer unused pages. // Handle the Browser. @@ -123,6 +130,7 @@ class BrowserIdleTimer : public base::IdleTimer { // collection. g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE, new ReducePluginsWorkingSetTask()); +#endif } }; @@ -164,8 +172,12 @@ Browser::Browser(Type type, Profile* profile) InitCommandState(); BrowserList::AddBrowser(this); +#if defined(OS_WIN) + // TODO(port): turn this back on when prefs are fleshed out. This asserts + // because the pref hasn't yet been registered. encoding_auto_detect_.Init(prefs::kWebKitUsesUniversalDetector, profile_->GetPrefs(), NULL); +#endif // Trim browser memory on idle for low & medium memory models. if (g_browser_process->memory_model() < BrowserProcess::HIGH_MEMORY_MODEL) @@ -266,6 +278,8 @@ void Browser::OpenEmptyWindow(Profile* profile) { browser->window()->Show(); } +#if defined(OS_WIN) + // static void Browser::OpenURLOffTheRecord(Profile* profile, const GURL& url) { Profile* off_the_record_profile = profile->GetOffTheRecordProfile(); @@ -2404,3 +2418,5 @@ void Browser::RegisterAppPrefs(const std::wstring& app_name) { prefs->RegisterDictionaryPref(window_pref.c_str()); } + +#endif // OS_WIN diff --git a/chrome/browser/browser.h b/chrome/browser/browser.h index 1faa8ab..3157e5a 100644 --- a/chrome/browser/browser.h +++ b/chrome/browser/browser.h @@ -5,19 +5,31 @@ #ifndef CHROME_BROWSER_BROWSER_H_ #define CHROME_BROWSER_BROWSER_H_ +#include "base/basictypes.h" + #include <vector> +#if defined(OS_MACOSX) || defined(OS_LINUX) +// Remove when we've finished porting the supporting classes. +#include "chrome/common/temp_scaffolding_stubs.h" +#endif + #include "chrome/browser/browser_process.h" -#include "chrome/browser/command_updater.h" -#include "chrome/browser/shell_dialogs.h" #include "chrome/browser/browser_window.h" #include "chrome/browser/sessions/session_id.h" +#include "chrome/common/notification_service.h" +#include "chrome/common/pref_member.h" +#include "base/gfx/rect.h" +#include "skia/include/SkBitmap.h" + +#if defined(OS_WIN) +#include "chrome/browser/command_updater.h" +#include "chrome/browser/shell_dialogs.h" #include "chrome/browser/tab_contents/tab_contents.h" #include "chrome/browser/tab_contents/tab_contents_delegate.h" #include "chrome/browser/tabs/tab_strip_model.h" #include "chrome/browser/toolbar_model.h" -#include "chrome/common/notification_service.h" -#include "chrome/common/pref_member.h" +#endif class BrowserIdleTimer; class BrowserWindow; @@ -105,14 +117,15 @@ class Browser : public TabStripModelDelegate, // Opens a new window with the default blank tab. static void OpenEmptyWindow(Profile* profile); +#if defined(OS_WIN) + // Opens the a new application window for the specified WebApp. + static void OpenWebApplication(Profile* profile, WebApp* app); + // Opens the specified URL in a new browser window in an incognito session. // If there is already an existing active incognito session for the specified // |profile|, that session is re-used. static void OpenURLOffTheRecord(Profile* profile, const GURL& url); - // Opens the a new application window for the specified WebApp. - static void OpenWebApplication(Profile* profile, WebApp* app); - // State Storage and Retrieval for UI /////////////////////////////////////// // Save and restore the window position. @@ -139,6 +152,7 @@ class Browser : public TabStripModelDelegate, // Invoked when the window containing us is closing. Performs the necessary // cleanup. void OnWindowClosing(); +#endif // OS_WIN // TabStripModel pass-thrus ///////////////////////////////////////////////// @@ -168,6 +182,7 @@ class Browser : public TabStripModelDelegate, } // Tab adding/showing functions ///////////////////////////////////////////// +#if defined(OS_WIN) // Add a new tab with the specified URL. If instance is not null, its process // will be used to render the tab. @@ -364,7 +379,7 @@ class Browser : public TabStripModelDelegate, virtual void ToolbarSizeChanged(TabContents* source, bool is_animating); virtual void URLStarredChanged(TabContents* source, bool starred); - virtual void ContentsMouseEvent(TabContents* source, UINT message); + virtual void ContentsMouseEvent(TabContents* source, uint32 message); virtual void UpdateTargetURL(TabContents* source, const GURL& url); virtual void ContentsZoomChange(bool zoom_in); @@ -381,6 +396,8 @@ class Browser : public TabStripModelDelegate, // Overridden from SelectFileDialog::Listener: virtual void FileSelected(const std::wstring& path, void* params); +#endif // OS_WIN + // Overridden from NotificationObserver: virtual void Observe(NotificationType type, const NotificationSource& source, @@ -392,6 +409,7 @@ class Browser : public TabStripModelDelegate, // Initialize state for all browser commands. void InitCommandState(); +#if defined(OS_WIN) // Update commands which may be enabled or disabled depending on the tab's // state. void UpdateCommandsForTabState(); @@ -432,7 +450,9 @@ class Browser : public TabStripModelDelegate, friend class AutomationProvider; // Getters for the location bar and go button. +#endif // OS_WIN LocationBarView* GetLocationBarView() const; +#if defined(OS_WIN) GoButton* GetGoButton(); // Returns the StatusBubble from the current toolbar. It is possible for @@ -454,9 +474,11 @@ class Browser : public TabStripModelDelegate, int selected_navigation); // OnBeforeUnload handling ////////////////////////////////////////////////// +#endif typedef std::set<TabContents*> UnloadListenerSet; +#if defined(OS_WIN) // Processes the next tab that needs it's beforeunload/unload event fired. void ProcessPendingTabs(); @@ -512,6 +534,8 @@ class Browser : public TabStripModelDelegate, // done only once per application name / per session. static void RegisterAppPrefs(const std::wstring& app_name); +#endif // OS_WIN + // Data members ///////////////////////////////////////////////////////////// // This Browser's type. diff --git a/chrome/browser/browser_list.cc b/chrome/browser/browser_list.cc index 90ccb56..739dadb 100644 --- a/chrome/browser/browser_list.cc +++ b/chrome/browser/browser_list.cc @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "build/build_config.h" + #include "chrome/browser/browser_list.h" #include "base/logging.h" @@ -10,10 +12,14 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_shutdown.h" #include "chrome/browser/browser_window.h" +#if defined(OS_WIN) +// TODO(port): these can probably all go away, even on win #include "chrome/browser/profile.h" #include "chrome/browser/profile_manager.h" #include "chrome/browser/tab_contents/web_contents.h" #include "chrome/common/notification_service.h" +#endif + BrowserList::list_type BrowserList::browsers_; std::vector<BrowserList::Observer*> BrowserList::observers_; @@ -143,9 +149,13 @@ void BrowserList::WindowsSessionEnding() { // And shutdown. browser_shutdown::Shutdown(); +#if defined(OS_WIN) // At this point the message loop is still running yet we've shut everything // down. If any messages are processed we'll likely crash. Exit now. ExitProcess(ResultCodes::NORMAL_EXIT); +#else + NOTIMPLEMENTED(); +#endif } // static diff --git a/chrome/browser/browser_window_cocoa.h b/chrome/browser/browser_window_cocoa.h new file mode 100644 index 0000000..74847bd --- /dev/null +++ b/chrome/browser/browser_window_cocoa.h @@ -0,0 +1,64 @@ +// 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. + +#ifndef CHROME_BROWSER_WINDOW_COCOA_H_ +#define CHROME_BROWSER_WINDOW_COCOA_H_ + +#include "chrome/browser/browser_window.h" + +@class BrowserWindowController; +@class NSWindow; + +// An implementation of BrowserWindow for Cocoa. Bridges between C++ and +// the Cocoa NSWindow. Cross-platform code will interact with this object when +// it needs to manipulate the window. + +class BrowserWindowCocoa : public BrowserWindow { + public: + BrowserWindowCocoa(BrowserWindowController* controller, NSWindow* window); + virtual ~BrowserWindowCocoa(); + + // Overridden from BrowserWindow + virtual void Init(); + virtual void Show(); + virtual void SetBounds(const gfx::Rect& bounds); + virtual void Close(); + virtual void Activate(); + virtual void FlashFrame(); + virtual void* GetNativeHandle(); + virtual TabStrip* GetTabStrip() const; + virtual StatusBubble* GetStatusBubble(); + virtual void SelectedTabToolbarSizeChanged(bool is_animating); + virtual void UpdateTitleBar(); + virtual void UpdateLoadingAnimations(bool should_animate); + virtual gfx::Rect GetNormalBounds() const; + virtual bool IsMaximized(); + virtual ToolbarStarToggle* GetStarButton() const; + virtual LocationBarView* GetLocationBarView() const; + virtual GoButton* GetGoButton() const; + virtual BookmarkBarView* GetBookmarkBarView(); + virtual void UpdateToolbar(TabContents* contents, + bool should_restore_state); + virtual void FocusToolbar(); + virtual bool IsBookmarkBarVisible() const; + virtual void ToggleBookmarkBar(); + virtual void ShowAboutChromeDialog(); + virtual void ShowBookmarkManager(); + virtual void ShowReportBugDialog(); + virtual void ShowClearBrowsingDataDialog(); + virtual void ShowImportDialog(); + virtual void ShowSearchEnginesDialog(); + virtual void ShowPasswordManager(); + virtual void ShowHTMLDialog(HtmlDialogContentsDelegate* delegate, + void* parent_window); + + protected: + virtual void DestroyBrowser(); + + private: + BrowserWindowController* controller_; // weak, owns us + NSWindow* window_; // weak, owned by |controller_| +}; + +#endif // CHROME_BROWSER_WINDOW_COCOA_H_ diff --git a/chrome/browser/browser_window_cocoa.mm b/chrome/browser/browser_window_cocoa.mm new file mode 100644 index 0000000..d3061d9 --- /dev/null +++ b/chrome/browser/browser_window_cocoa.mm @@ -0,0 +1,141 @@ +// 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. + +#include "base/gfx/rect.h" +#include "chrome/browser/browser_window_cocoa.h" +#include "chrome/browser/browser_window_controller.h" + +BrowserWindowCocoa::BrowserWindowCocoa(BrowserWindowController* controller, + NSWindow* window) + : controller_(controller), window_(window) { +} + +BrowserWindowCocoa::~BrowserWindowCocoa() { +} + +void BrowserWindowCocoa::Init() { +} + +void BrowserWindowCocoa::Show() { + [window_ makeKeyAndOrderFront:controller_]; +} + +void BrowserWindowCocoa::SetBounds(const gfx::Rect& bounds) { + NSRect cocoa_bounds = NSMakeRect(bounds.x(), 0, bounds.width(), + bounds.height()); + // flip coordinates + NSScreen* screen = [window_ screen]; + cocoa_bounds.origin.y = + [screen frame].size.height - bounds.height() - bounds.y(); +} + +void BrowserWindowCocoa::Close() { + [window_ orderOut:controller_]; +} + +void BrowserWindowCocoa::Activate() { + [window_ makeKeyAndOrderFront:controller_]; +} + +void BrowserWindowCocoa::FlashFrame() { + [[NSApplication sharedApplication] + requestUserAttention:NSInformationalRequest]; +} + +void* BrowserWindowCocoa::GetNativeHandle() { + return [controller_ window]; +} + +TabStrip* BrowserWindowCocoa::GetTabStrip() const { + return NULL; +} + +StatusBubble* BrowserWindowCocoa::GetStatusBubble() { + return NULL; +} + +void BrowserWindowCocoa::SelectedTabToolbarSizeChanged(bool is_animating) { +} + +void BrowserWindowCocoa::UpdateTitleBar() { +} + +void BrowserWindowCocoa::UpdateLoadingAnimations(bool should_animate) { +} + +gfx::Rect BrowserWindowCocoa::GetNormalBounds() const { + // TODO(pinkerton): not sure if we can get the non-zoomed bounds, or if it + // really matters. We may want to let Cocoa handle all this for us. + NSRect frame = [window_ frame]; + NSScreen* screen = [window_ screen]; + gfx::Rect bounds(frame.origin.x, 0, frame.size.width, frame.size.height); + bounds.set_y([screen frame].size.height + frame.size.height + frame.origin.y); + return bounds; +} + +bool BrowserWindowCocoa::IsMaximized() { + return [window_ isZoomed]; +} + +ToolbarStarToggle* BrowserWindowCocoa::GetStarButton() const { + return NULL; +} + +LocationBarView* BrowserWindowCocoa::GetLocationBarView() const { + return NULL; +} + +GoButton* BrowserWindowCocoa::GetGoButton() const { + return NULL; +} + +BookmarkBarView* BrowserWindowCocoa::GetBookmarkBarView() { + return NULL; +} + +void BrowserWindowCocoa::UpdateToolbar(TabContents* contents, + bool should_restore_state) { +} + +void BrowserWindowCocoa::FocusToolbar() { +} + +bool BrowserWindowCocoa::IsBookmarkBarVisible() const { + return true; +} + +void BrowserWindowCocoa::ToggleBookmarkBar() { +} + +void BrowserWindowCocoa::ShowAboutChromeDialog() { +} + +void BrowserWindowCocoa::ShowBookmarkManager() { +} + +void BrowserWindowCocoa::ShowReportBugDialog() { +} + +void BrowserWindowCocoa::ShowClearBrowsingDataDialog() { +} + +void BrowserWindowCocoa::ShowImportDialog() { +} + +void BrowserWindowCocoa::ShowSearchEnginesDialog() { +} + +void BrowserWindowCocoa::ShowPasswordManager() { +} + +void BrowserWindowCocoa::ShowHTMLDialog(HtmlDialogContentsDelegate* delegate, + void* parent_window) { +} + +void BrowserWindowCocoa::DestroyBrowser() { + [controller_ destroyBrowser]; + + // at this point the controller is dead (autoreleased), so + // make sure we don't try to reference it any more. +} diff --git a/chrome/browser/browser_window_controller.h b/chrome/browser/browser_window_controller.h new file mode 100644 index 0000000..7ae2bd0 --- /dev/null +++ b/chrome/browser/browser_window_controller.h @@ -0,0 +1,44 @@ +// 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. + +#ifndef CHROME_BROWSER_BROWSER_WINDOW_CONTROLLER_H_ +#define CHROME_BROWSER_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. + +#import <Cocoa/Cocoa.h> + +class Browser; +class BrowserWindow; + +@interface BrowserWindowController : NSWindowController { + @private + Browser* browser_; // strong + BrowserWindow* window_shim_; // strong + + // Some toolbar items for IB. We can remove these if we stop using IB for + // NSToolbar support (it only half works). + IBOutlet NSToolbarItem* back_button_; + IBOutlet NSToolbarItem* forward_button_; + IBOutlet NSToolbarItem* url_bar_; + + // This will become its own view at some point. + IBOutlet NSView* tab_bar_view_; +} + +// Load the browser window nib and do any Cocoa-specific initialization. +// Takes ownership of |browser|. +- (id)initWithBrowser:(Browser*)browser; + +// call to make the browser go away from other places in the cross-platform +// code. +- (void)destroyBrowser; + +// Access the C++ bridge between the NSWindow and the rest of Chromium +- (BrowserWindow*)browserWindow; + +@end + +#endif // CHROME_BROWSER_BROWSER_WINDOW_CONTROLLER_H_ diff --git a/chrome/browser/browser_window_controller.mm b/chrome/browser/browser_window_controller.mm new file mode 100644 index 0000000..c5e4abc --- /dev/null +++ b/chrome/browser/browser_window_controller.mm @@ -0,0 +1,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 diff --git a/chrome/browser/browser_window_factory.mm b/chrome/browser/browser_window_factory.mm new file mode 100644 index 0000000..ea813be --- /dev/null +++ b/chrome/browser/browser_window_factory.mm @@ -0,0 +1,20 @@ +// 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. + +#include "chrome/browser/browser_window.h" +#include "chrome/browser/browser_window_controller.h" + +// Create the controller for the Browser, which handles loading the browser +// window from the nib. The controller takes ownership of |browser|. +// static +BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) { + // TODO(pinkerton): figure out ownership model. If BrowserList keeps track + // of the browser windows, it will probably tell us when it needs to go + // away, and it seems we need to feed back to that when we get a + // performClose: from the UI. + BrowserWindowController* controller = + [[BrowserWindowController alloc] initWithBrowser:browser]; + return [controller browserWindow]; +} + diff --git a/chrome/browser/tab_contents/tab_contents_delegate.h b/chrome/browser/tab_contents/tab_contents_delegate.h index 10ea799..599b64c 100644 --- a/chrome/browser/tab_contents/tab_contents_delegate.h +++ b/chrome/browser/tab_contents/tab_contents_delegate.h @@ -5,9 +5,7 @@ #ifndef CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_DELEGATE_H_ #define CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_DELEGATE_H_ -// TODO(maruel): Remove once UINT and HWND are replaced / typedef. -#include <windows.h> - +#include "base/basictypes.h" #include "chrome/browser/tab_contents/page_navigator.h" #include "chrome/common/navigation_types.h" @@ -95,7 +93,7 @@ class TabContentsDelegate : public PageNavigator { virtual void UpdateTargetURL(TabContents* source, const GURL& url) = 0; // Notification that the target URL has changed - virtual void ContentsMouseEvent(TabContents* source, UINT message) { } + virtual void ContentsMouseEvent(TabContents* source, uint32 message) { } // Request the delegate to change the zoom level of the current tab. virtual void ContentsZoomChange(bool zoom_in) { } diff --git a/chrome/chrome.xcodeproj/project.pbxproj b/chrome/chrome.xcodeproj/project.pbxproj index 9af2a0a..e838128 100644 --- a/chrome/chrome.xcodeproj/project.pbxproj +++ b/chrome/chrome.xcodeproj/project.pbxproj @@ -306,6 +306,21 @@ E46C4B3F0F21095400B393B8 /* url_request_intercept_job.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFCC20E9D4D6B009A6919 /* url_request_intercept_job.cc */; }; E46C4B490F21096300B393B8 /* worker_thread_ticker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFC140E9D4C9F009A6919 /* worker_thread_ticker.cc */; }; E46C4B4C0F21098F00B393B8 /* worker_thread_ticker_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = E46C4B4B0F21098F00B393B8 /* worker_thread_ticker_unittest.cc */; }; + E46C4C2E0F212CAF00B393B8 /* browser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BF8300E9D4839009A6919 /* browser.cc */; }; + E46C4D0F0F2138D400B393B8 /* browser_list.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BF83C0E9D4839009A6919 /* browser_list.cc */; }; + E48B66A80F26257E002E47EC /* libnet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D7B004E0E9D5464009A6919 /* libnet.a */; }; + E48B67320F2625B8002E47EC /* libgoogleurl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D7BFF6E0E9D540F009A6919 /* libgoogleurl.a */; }; + E48B67CB0F262607002E47EC /* libmodp_b64.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D7B005D0E9D54AA009A6919 /* libmodp_b64.a */; }; + E48B67CF0F26263C002E47EC /* libskia.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D7B00330E9D5459009A6919 /* libskia.a */; }; + E48B67ED0F262823002E47EC /* libbase_gfx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D7BFDC90E9D525B009A6919 /* libbase_gfx.a */; }; + E48B684D0F2630D3002E47EC /* browser_window_factory.mm in Sources */ = {isa = PBXBuildFile; fileRef = E48B684C0F2630D3002E47EC /* browser_window_factory.mm */; }; + E48B68570F26330C002E47EC /* browser_window_controller.mm in Sources */ = {isa = PBXBuildFile; fileRef = E48B68560F26330C002E47EC /* browser_window_controller.mm */; }; + E48B68640F2637B6002E47EC /* browser_window_cocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = E48B68630F2637B6002E47EC /* browser_window_cocoa.mm */; }; + E48B689B0F263DF5002E47EC /* BrowserWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = E48B68990F263DF5002E47EC /* BrowserWindow.xib */; }; + E48B6C280F2783E9002E47EC /* extension_protocols.cc in Sources */ = {isa = PBXBuildFile; fileRef = E48B6C270F2783E9002E47EC /* extension_protocols.cc */; }; + E48B6C2C0F27840B002E47EC /* password_form_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = B5D16EB30F21445600861FAC /* password_form_manager.cc */; }; + E48B6C2E0F278426002E47EC /* safe_browsing_service.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFAE50E9D49DE009A6919 /* safe_browsing_service.cc */; }; + E48B6C3C0F27844F002E47EC /* web_data_service.cc in Sources */ = {isa = PBXBuildFile; fileRef = E48B6C3B0F27844F002E47EC /* web_data_service.cc */; }; E48FB9590EC4E9C10052B72B /* safe_browsing_database_bloom.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFADF0E9D49DE009A6919 /* safe_browsing_database_bloom.cc */; }; E48FB95C0EC4E9DD0052B72B /* safe_browsing_database_impl.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4D7BFAE10E9D49DE009A6919 /* safe_browsing_database_impl.cc */; }; E48FB9760EC4EA320052B72B /* url_request_failed_dns_job.cc in Sources */ = {isa = PBXBuildFile; fileRef = E48FB96E0EC4EA270052B72B /* url_request_failed_dns_job.cc */; }; @@ -1730,6 +1745,16 @@ E46C46C30F1F9AE200B393B8 /* temp_scaffolding_stubs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = temp_scaffolding_stubs.h; sourceTree = "<group>"; }; E46C46C40F1F9AE200B393B8 /* temp_scaffolding_stubs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = temp_scaffolding_stubs.cpp; sourceTree = "<group>"; }; E46C4B4B0F21098F00B393B8 /* worker_thread_ticker_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = worker_thread_ticker_unittest.cc; sourceTree = "<group>"; }; + E48B684C0F2630D3002E47EC /* browser_window_factory.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = browser_window_factory.mm; sourceTree = "<group>"; }; + E48B68550F26330C002E47EC /* browser_window_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = browser_window_controller.h; sourceTree = "<group>"; }; + E48B68560F26330C002E47EC /* browser_window_controller.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = browser_window_controller.mm; sourceTree = "<group>"; }; + E48B68620F2637B6002E47EC /* browser_window_cocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = browser_window_cocoa.h; sourceTree = "<group>"; }; + E48B68630F2637B6002E47EC /* browser_window_cocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = browser_window_cocoa.mm; sourceTree = "<group>"; }; + E48B689A0F263DF5002E47EC /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = app/nibs/English.lproj/BrowserWindow.xib; sourceTree = "<group>"; }; + E48B6C260F2783E9002E47EC /* extension_protocols.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = extension_protocols.h; sourceTree = "<group>"; }; + E48B6C270F2783E9002E47EC /* extension_protocols.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extension_protocols.cc; sourceTree = "<group>"; }; + E48B6C3A0F27844F002E47EC /* web_data_service.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = web_data_service.h; path = webdata/web_data_service.h; sourceTree = "<group>"; }; + E48B6C3B0F27844F002E47EC /* web_data_service.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = web_data_service.cc; path = webdata/web_data_service.cc; sourceTree = "<group>"; }; E48FB9610EC4EA270052B72B /* automation_autocomplete_edit_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_autocomplete_edit_tracker.h; sourceTree = "<group>"; }; E48FB9620EC4EA270052B72B /* automation_browser_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_browser_tracker.h; sourceTree = "<group>"; }; E48FB9630EC4EA270052B72B /* automation_constrained_window_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_constrained_window_tracker.h; sourceTree = "<group>"; }; @@ -1855,14 +1880,19 @@ files = ( E45065DE0EEEC6FF003BE099 /* AppKit.framework in Frameworks */, E45065E00EEEC709003BE099 /* Foundation.framework in Frameworks */, + E48B67320F2625B8002E47EC /* libgoogleurl.a in Frameworks */, E45062680EE890C2003BE099 /* libbase.a in Frameworks */, + E48B67ED0F262823002E47EC /* libbase_gfx.a in Frameworks */, E45063130EE990A4003BE099 /* libbrowser.a in Frameworks */, E45063120EE99096003BE099 /* libcommon.a in Frameworks */, E450631C0EE990FA003BE099 /* libevent.a in Frameworks */, E45062A90EE89154003BE099 /* libicudata.a in Frameworks */, E45062A70EE89146003BE099 /* libicui18n.a in Frameworks */, E45062AC0EE89154003BE099 /* libicuuc.a in Frameworks */, + E48B67CB0F262607002E47EC /* libmodp_b64.a in Frameworks */, + E48B66A80F26257E002E47EC /* libnet.a in Frameworks */, E45063140EE990AB003BE099 /* librenderer.a in Frameworks */, + E48B67CF0F26263C002E47EC /* libskia.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2086,6 +2116,11 @@ 4D7BF84A0E9D4839009A6919 /* browser_url_handler.cc */, 4D7BF84B0E9D4839009A6919 /* browser_url_handler.h */, 4D7BF84D0E9D4839009A6919 /* browser_window.h */, + E48B68620F2637B6002E47EC /* browser_window_cocoa.h */, + E48B68630F2637B6002E47EC /* browser_window_cocoa.mm */, + E48B68550F26330C002E47EC /* browser_window_controller.h */, + E48B68560F26330C002E47EC /* browser_window_controller.mm */, + E48B684C0F2630D3002E47EC /* browser_window_factory.mm */, 4D7BF84E0E9D4839009A6919 /* browsing_data_remover.cc */, 4D7BF84F0E9D4839009A6919 /* browsing_data_remover.h */, 4D7BF8500E9D4839009A6919 /* browsing_instance.cc */, @@ -2983,6 +3018,7 @@ E450610A0EE87FB6003BE099 /* nibs */ = { isa = PBXGroup; children = ( + E48B68990F263DF5002E47EC /* BrowserWindow.xib */, 4DCE9E2B0EF0B8C000682526 /* MainMenu.xib */, ); path = nibs; @@ -3071,6 +3107,8 @@ children = ( E450761E0F150E0C003BE099 /* web_database.cc */, E450761F0F150E0C003BE099 /* web_database.h */, + E48B6C3A0F27844F002E47EC /* web_data_service.h */, + E48B6C3B0F27844F002E47EC /* web_data_service.cc */, ); name = webdata; sourceTree = "<group>"; @@ -3119,6 +3157,8 @@ 0082A7520F16987A000AA0EF /* user_script_master.h */, E4F324400EE5CE94002533CE /* extension.cc */, E4F324410EE5CE94002533CE /* extension.h */, + E48B6C260F2783E9002E47EC /* extension_protocols.h */, + E48B6C270F2783E9002E47EC /* extension_protocols.cc */, E4F324420EE5CE94002533CE /* extension_unittest.cc */, A54612D90EE9957000A8EE5D /* extensions_service.cc */, A54612DA0EE9957000A8EE5D /* extensions_service.h */, @@ -3562,6 +3602,7 @@ buildActionMask = 2147483647; files = ( E43A79F40F1D192000ABD5D1 /* aliasCursor.png in Resources */, + E48B689B0F263DF5002E47EC /* BrowserWindow.xib in Resources */, E43A79F50F1D192000ABD5D1 /* cellCursor.png in Resources */, E45062C70EE8939A003BE099 /* chromium.icns in Resources */, E43A79F60F1D192000ABD5D1 /* contextMenuCursor.png in Resources */, @@ -3744,10 +3785,15 @@ 4D7BFAEE0E9D49E5009A6919 /* bloom_filter.cc in Sources */, E45075B20F1505C0003BE099 /* bookmark_codec.cc in Sources */, E45075B40F1505C9003BE099 /* bookmark_html_writer.cc in Sources */, + E46C4C2E0F212CAF00B393B8 /* browser.cc in Sources */, + E46C4D0F0F2138D400B393B8 /* browser_list.cc in Sources */, E45063530EE9BF31003BE099 /* browser_main.cc in Sources */, E450634F0EE9BE29003BE099 /* browser_main_mac.mm in Sources */, 4D7BF97B0E9D4857009A6919 /* browser_process.cc in Sources */, E45075B80F15060C003BE099 /* browser_trial.cc in Sources */, + E48B68640F2637B6002E47EC /* browser_window_cocoa.mm in Sources */, + E48B68570F26330C002E47EC /* browser_window_controller.mm in Sources */, + E48B684D0F2630D3002E47EC /* browser_window_factory.mm in Sources */, E45075E20F150A6F003BE099 /* buffered_resource_handler.cc in Sources */, 4D7BF98D0E9D485B009A6919 /* cancelable_request.cc in Sources */, E43A770D0F16610300ABD5D1 /* chrome_plugin_browsing_context.cc in Sources */, @@ -3762,6 +3808,7 @@ E45075E30F150A6F003BE099 /* download_throttling_resource_handler.cc in Sources */, E4F324470EE5CF1F002533CE /* expire_history_backend.cc in Sources */, E4F324430EE5CE94002533CE /* extension.cc in Sources */, + E48B6C280F2783E9002E47EC /* extension_protocols.cc in Sources */, A54612E20EE995F600A8EE5D /* extensions_service.cc in Sources */, E45075C10F1506F2003BE099 /* firefox2_importer.cc in Sources */, E45075C40F150701003BE099 /* firefox3_importer.cc in Sources */, @@ -3775,15 +3822,16 @@ 4D7BFA240E9D4905009A6919 /* in_memory_database.cc in Sources */, 4D7BFA260E9D4908009A6919 /* in_memory_history_backend.cc in Sources */, E45075B70F1505DD003BE099 /* keyword_provider.cc in Sources */, + 4D7BF9A00E9D4875009A6919 /* meta_table_helper.cc in Sources */, B555B2230F21506300F751B9 /* metrics_log.cc in Sources */, B555B2240F21506700F751B9 /* metrics_response.cc in Sources */, - 4D7BF9A00E9D4875009A6919 /* meta_table_helper.cc in Sources */, E45075CD0F150741003BE099 /* mork_reader.cc in Sources */, 4D7BFABB0E9D49C1009A6919 /* page_number.cc in Sources */, 4D7BFAC60E9D49CB009A6919 /* page_range.cc in Sources */, 4D7BFAC40E9D49C6009A6919 /* page_setup.cc in Sources */, 4D7BF9AC0E9D4880009A6919 /* page_state.cc in Sources */, 4D7BFA280E9D490C009A6919 /* page_usage_data.cc in Sources */, + E48B6C2C0F27840B002E47EC /* password_form_manager.cc in Sources */, 4D7BFAF10E9D49EB009A6919 /* protocol_parser.cc in Sources */, B6CCB9FA0F1EC33100106F0D /* provisional_load_details.cc in Sources */, E4F324500EE5CF7C002533CE /* query_parser.cc in Sources */, @@ -3793,6 +3841,7 @@ E48FB9590EC4E9C10052B72B /* safe_browsing_database_bloom.cc in Sources */, E48FB95C0EC4E9DD0052B72B /* safe_browsing_database_impl.cc in Sources */, E45075EC0F150ABA003BE099 /* safe_browsing_resource_handler.cc in Sources */, + E48B6C2E0F278426002E47EC /* safe_browsing_service.cc in Sources */, 4D7BFAF60E9D49F6009A6919 /* safe_browsing_util.cc in Sources */, 4D7BF9E10E9D48D6009A6919 /* save_file.cc in Sources */, E45075ED0F150ABA003BE099 /* save_file_resource_handler.cc in Sources */, @@ -3819,11 +3868,12 @@ E48FB9790EC4EA410052B72B /* url_request_mock_http_job.cc in Sources */, E48FB97A0EC4EA4A0052B72B /* url_request_mock_net_error_job.cc in Sources */, E48FB97C0EC4EA540052B72B /* url_request_slow_download_job.cc in Sources */, + B555B2250F21506B00F751B9 /* user_metrics.cc in Sources */, E46C42130F1D3DD200B393B8 /* user_script_master.cc in Sources */, 4D7BFA3E0E9D491B009A6919 /* visit_database.cc in Sources */, 4D7BFA430E9D491E009A6919 /* visit_tracker.cc in Sources */, 4D7BFA480E9D4922009A6919 /* visitsegment_database.cc in Sources */, - B555B2250F21506B00F751B9 /* user_metrics.cc in Sources */, + E48B6C3C0F27844F002E47EC /* web_data_service.cc in Sources */, E45076200F150E0C003BE099 /* web_database.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4249,6 +4299,15 @@ path = English.lproj; sourceTree = "<group>"; }; + E48B68990F263DF5002E47EC /* BrowserWindow.xib */ = { + isa = PBXVariantGroup; + children = ( + E48B689A0F263DF5002E47EC /* English */, + ); + name = BrowserWindow.xib; + path = ../..; + sourceTree = "<group>"; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ diff --git a/chrome/common/temp_scaffolding_stubs.cpp b/chrome/common/temp_scaffolding_stubs.cpp index af74d6d..3517c4f 100644 --- a/chrome/common/temp_scaffolding_stubs.cpp +++ b/chrome/common/temp_scaffolding_stubs.cpp @@ -8,6 +8,8 @@ #include "base/thread.h" #include "base/path_service.h" #include "base/singleton.h" +#include "chrome/browser/browser.h" +#include "chrome/browser/browser_shutdown.h" #include "chrome/browser/plugin_service.h" #include "chrome/browser/shell_integration.h" #include "chrome/common/chrome_constants.h" @@ -15,7 +17,9 @@ #include "chrome/common/pref_service.h" BrowserProcessImpl::BrowserProcessImpl(const CommandLine& command_line) - : created_local_state_(), created_metrics_service_(), + : main_notification_service_(new NotificationService), + memory_model_(HIGH_MEMORY_MODEL), + created_local_state_(), created_metrics_service_(), created_profile_manager_() { g_browser_process = this; } @@ -94,7 +98,9 @@ bool BrowserInit::LaunchBrowserImpl(const CommandLine& parsed_command_line, int* return_code) { DCHECK(profile); - // LAUNCH BROWSER WITH PROFILE HERE! + // this code is a simplification of BrowserInit::LaunchWithProfile::Launch() + Browser* browser = Browser::Create(profile); + browser->window()->Show(); return true; } @@ -173,6 +179,7 @@ void RegisterAllPrefs(PrefService*, PrefService*) { } namespace browser_shutdown { void ReadLastShutdownInfo() { } void Shutdown() { } +void OnShutdownStarting(ShutdownType type) { } } void OpenFirstRunDialog(Profile* profile) { } @@ -202,3 +209,17 @@ void PluginService::SetChromePluginDataDir(const std::wstring& data_dir) { void InstallJankometer(const CommandLine&) { } + +//-------------------------------------------------------------------------- + +void Browser::InitCommandState() { +} + +void Browser::Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { +} + +LocationBarView* Browser::GetLocationBarView() const { + return window_->GetLocationBarView(); +} diff --git a/chrome/common/temp_scaffolding_stubs.h b/chrome/common/temp_scaffolding_stubs.h index 603e7ca..712ca0d 100644 --- a/chrome/common/temp_scaffolding_stubs.h +++ b/chrome/common/temp_scaffolding_stubs.h @@ -12,12 +12,20 @@ #include <string> #include "base/basictypes.h" +#include "base/ref_counted.h" #include "chrome/browser/browser_process.h" +class Browser; class CommandLine; +class MetricsService; class ProfileManager; class Profile; -class MetricsService; +class SessionID; +class URLRequestContext; +class WebContents; + +//--------------------------------------------------------------------------- +// These stubs are for Browser_main() class Upgrade { public: @@ -115,6 +123,8 @@ class BrowserProcessImpl : public BrowserProcess { void CreateProfileManager(); void CreateMetricsService(); + scoped_ptr<NotificationService> main_notification_service_; + MemoryModel memory_model_; bool created_local_state_; scoped_ptr<PrefService> local_state_; bool created_metrics_service_; @@ -146,11 +156,27 @@ class UserDataManager { static UserDataManager* instance_; }; +struct SessionService { + void WindowClosed(const SessionID &) { } +}; + +class TabRestoreService { + public: + void BrowserClosing(Browser*) { } + void BrowserClosed(Browser*) { } +}; + class Profile { public: Profile(const std::wstring& user_data_dir); virtual std::wstring GetPath() { return path_; } virtual PrefService* GetPrefs(); + void ResetTabRestoreService() { } + TabRestoreService* GetTabRestoreService() { return NULL; } + SessionService* GetSessionService() { return NULL; } + bool IsOffTheRecord() { return false; } + URLRequestContext* GetRequestContext() { return NULL; } + private: std::wstring GetPrefFilePath(); @@ -165,6 +191,7 @@ class ProfileManager : NonThreadSafe { Profile* GetDefaultProfile(const std::wstring& user_data_dir); static std::wstring GetDefaultProfileDir(const std::wstring& user_data_dir); static std::wstring GetDefaultProfilePath(const std::wstring& profile_dir); + static void ShutdownSessionServices() { } private: DISALLOW_EVIL_CONSTRUCTORS(ProfileManager); }; @@ -179,17 +206,107 @@ class MetricsService { void SetUserPermitsUpload(bool enabled) { } }; -namespace browser { -void RegisterAllPrefs(PrefService*, PrefService*); -} - namespace browser_shutdown { void ReadLastShutdownInfo(); void Shutdown(); } +namespace browser { +void RegisterAllPrefs(PrefService*, PrefService*); +} + void OpenFirstRunDialog(Profile* profile); void InstallJankometer(const CommandLine&); +//--------------------------------------------------------------------------- +// These stubs are for Browser + +class LocationBarView { + public: + void ShowFirstRunBubble() { } +}; + +class DebuggerWindow : public base::RefCountedThreadSafe<DebuggerWindow> { + public: +}; + +class TabStripModelDelegate { + public: +}; + +class TabStripModelObserver { + public: +}; + +class NavigationController { + public: +}; + +class TabContentsDelegate { + public: +}; + +class TabContents { + public: + TabContents() : controller_(new NavigationController) { } + NavigationController* controller() const { return controller_.get(); } + WebContents* AsWebContents() const { return NULL; } + private: + scoped_ptr<NavigationController> controller_; +}; + +// fake a tab strip, though it can't have any entries because the browser dtor +// checks. +class TabStripModel { + public: + TabStripModel(TabStripModelDelegate* delegate, Profile* profile) + : contents_(new TabContents) { } + virtual ~TabStripModel() { } + bool empty() const { return contents_.get() == NULL; } + int count() const { return contents_.get() ? 1 : 0; } + int selected_index() const { return 0; } + int GetIndexOfController(const NavigationController* controller) const { + return 0; + } + TabContents* GetTabContentsAt(int index) const { return contents_.get(); } + TabContents* GetSelectedTabContents() const { return contents_.get(); } + void SelectTabContentsAt(int index, bool user_gesture) { } + TabContents* AddBlankTab(bool foreground) { return contents_.get(); } + void CloseAllTabs() { contents_.reset(NULL); } + void AddObserver(TabStripModelObserver* observer) { } + void RemoveObserver(TabStripModelObserver* observer) { } + private: + scoped_ptr<TabContents> contents_; +}; + +class CommandUpdater { + public: + class CommandUpdaterDelegate { + public: + }; + + CommandUpdater(CommandUpdaterDelegate* const) { } +}; + +class SelectFileDialog : public base::RefCountedThreadSafe<SelectFileDialog> { + public: + class Listener { + public: + }; + void ListenerDestroyed() { } +}; + +class SiteInstance { + public: +}; + +class DockInfo { + public: +}; + +class ToolbarModel { + public: +}; + #endif // CHROME_COMMON_TEMP_SCAFFOLDING_STUBS_H_ |