summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/app/nibs/English.lproj/BrowserWindow.xib1200
-rw-r--r--chrome/browser/app_controller_mac.mm11
-rw-r--r--chrome/browser/browser.cc42
-rw-r--r--chrome/browser/browser.h40
-rw-r--r--chrome/browser/browser_list.cc10
-rw-r--r--chrome/browser/browser_window_cocoa.h64
-rw-r--r--chrome/browser/browser_window_cocoa.mm141
-rw-r--r--chrome/browser/browser_window_controller.h44
-rw-r--r--chrome/browser/browser_window_controller.mm75
-rw-r--r--chrome/browser/browser_window_factory.mm20
-rw-r--r--chrome/browser/tab_contents/tab_contents_delegate.h6
-rw-r--r--chrome/chrome.xcodeproj/project.pbxproj63
-rw-r--r--chrome/common/temp_scaffolding_stubs.cpp25
-rw-r--r--chrome/common/temp_scaffolding_stubs.h127
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
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8PDx9ISEiH2tra8/7+/v/j4+P/2NjY/7a2tv+ysrL/
+i4uL7j09PeUKCgoSAAAAAAAAAAAAAAAAUVFRlo2NjfTIyMj6x8fH/56env97e3v/ISEhMAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDw8lRUVFjtDQ0Pb+/v7/4eHh/dDQ0P+NjY3/
+Tk5O6yoqKrIfHx+gGhoarCIiImwAAAABAAAAADg4OGWenp7/y8vL/d3d3f+8vLz/hYWF/0RERE0AAAAA
+AAAAAAAAAAAfHx8sAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj8/P2za2try9/f3/+vr6/7Kysr/
+dnZ2/D4+PvwgICB+EBAQNAICAgcAAAAPERERPQMDAwkQEBASh4eH2MHBwf/o6Oj/39/f/3R0dP88PDxO
+AAAAAAAAAAAAAAAAcnJylkNDQ58HBwcIAAAAAAAAAAAAAAAAAAAAAAAAAAAGBgYMfn5+uMvLy/3Hx8f+
+u7u7/5OTk/9CQkL7HRYL7AICAgQAAAAAAAAAAAAAAAAAAAAAAgICBS4uLjOWlpbz6urq/+7u7v+rq6v/
+IyMj0wAAAAAAAAAAAAAAAIGBgZGLi4v/QkJC2Q0NDSYAAAAAAAAAAAAAAAAAAAAAGRkZJF5eXoylpaXz
+pqam/4qKiv91dXX/YWFh+iwkHvojEADrJhcGoAgICA0AAAAAAAAAAAAAAAAAAAAAPj4+RJaWlvr19fX/
+6+vr/7W1tfVaWlrlAwMDbAAAAACKioqcoqKi/7+/v/9HR0fnDg4OJwAAAAAAAAAAHR0dK3V1dZ+pqanC
++vr6/9vb2/99fX3+Y2Nj+EhISOgMCAP4JhIA8jgaAPBxNADsNyMMjgcHBwsAAAAAAAAAAAAAAAAMDAwO
+m5ub+Orq6v/y8vL/0NDQ7ICAgMtkZGTqcHBwzLOzs//Pz8//0tLS/0xMTNoJCQkhAAAAABoaGjZ/f3+4
+//////j4+P/9/f3/9vb2/0dHR/8oKCjkKSkpoAQCAJUNBQDXVSgA5XY5AOuTSADcOiUOewYGBgoAAAAA
+AAAAAB4eHmFlZWX76Ojo/+7u7v/5+fn/5OTk9Li4uO3f39//8PDw/+Hh4f/Ly8v/Ozs7rQICAgMAAAAA
+GBgYL3x8fP///////////7S0tP+np6f/QEBA+xUVFXUJCQkkBAQEDgcFA20jEQC7YzIA3n9BAOiiUwDK
+NiMObgYGBgoTExNIOzs74bGxsf3Dw8P/1dXV////////////////////////////8/Pz/3R0dOcPDw9H
+AAAAAQAAAAAAAAAAVVVVooCAgP/v7+//v7+//2VlZf86OjrLAQEBBgAAAAAAAAAAAAAAABENCVctFwCl
+ZTQA1oZFAOCqWgDAMiMTgzExMcKzs7P4wcHB/5+fn//W1tb///////v7+/v//////////729vfOFhYXy
+IyMjdAAAAAMAAAABAAAAAAAAAAAAAAAASkpKmlpaWv+RkZH/Nzc38hgYGG4AAAABAAAAAAAAAAAAAAAA
+AAAAAAsFAEUwGACbaDcAzXpCAOFnRiLjs7Kx+MTExP+pqan/09PT/3p6evpdXV3rbGxs6l1dXfVXV1fs
+UlJSxykpKWMAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAQUFBmiMjI/8cHBysBQUFHQAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAsFAEAuGACfSzAT47y4s/24uLj/lJSU/9TU1P+Dg4PkMzMzzwYGBgw6OjpB
+QEBASQ8PDxYbGxshAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIimgoKCi4AAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAwJBYS9u7n4r6+v/4GBgf/Pz8//iISB6CYmJqoDAwMK
+AAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAABUwcHB7qurq/9ubm7/zs7O/5yOgPhlPhbf
+MhsCegAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMnCgoKZsvLy++pqan/Wlpa/9LS0v+Nh4Hq
+SCYE4IdDAeSbTgDLNxsAhwAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMOxoaGobV1dXzq6ur/0ZGRv/Z2dn/
+hoaGxQkEAIY6HgCyaDMA2YVAAOuWSQDZPh4AngAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGFEoKCio0tLS86urq/8xMTH/
+4uLi/4+Pj84AAABIAAAAAg8HAGg6HQDKaDIA4YI+APCVRQDsRSEAuAAAABMAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFhYrNTU1z9ra2vb8/Pz/
+FxcX/+rq6v+amprZAAAASAAAAAIAAAAAAAAAABAIAIY4GwDiaTEA6X46APeVRAD/SyIA0gAAABIAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICBT8/P4asrKz3
+0dHR//39/f/z8/P/paWl5gUFBVkAAAACAAAAAAAAAAAAAAAAAAAAABIJAKUxFgD6bTMA9no4AP9uLwD/
+KxIAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBwcO
+QUFBmpqamv+pqan/+Pj4/7GxsfIXFxeBAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHAMogDgD/
+WSkA/zwaAPcuEwCyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAEBAQMnJydWUFBQ85aWlvqoqKjfKioqrQEBAQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAsFAOUXCQD6IA4AwgQCADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAgICBBR0dHmi4uLnACAgIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAgDAMwFAgA9AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE
+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
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAABQfL3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAOFiJQLkdt/wsRG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg+X+AuR23/FB8vcAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXIzaALkdt/y5Hbf8XIzaAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgNICtCZvAuR23/Lkdt/yI1UsAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcLESgJTlY0C5Hbf8uR23/
+JTlY0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQgNIC5Hbf8LERtA
+Lkdt/y5Hbf8uR23/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiNVLA
+IjVSwAAAAAAoPl/gLkdt/y5Hbf8IDRQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+CxEbQC5Hbf8FCA0gAAAAACI1UsAuR23/Lkdt/wsRG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAiNVLAHCxEoAAAAAAAAAAAHzFLsC5Hbf8uR23/FyM2gAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAACxEbQC5Hbf8FCA0gAAAAAAAAAAAXIzaALkdt/y5Hbf8cLESgAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAiNVLAIjVSwAsRG0ALERtACxEbQBwsRKAuR23/Lkdt/yI1UsAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxEbQC5Hbf8uR23/Lkdt/y5Hbf8uR23/Lkdt/y5Hbf8uR23/
+K0Jm8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiNVLAHCxEoAAAAAAAAAAAAAAAAAAAAAAFCA0g
+Lkdt/y5Hbf8uR23/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxEbQC5Hbf8FCA0gAAAAAAAAAAAAAAAA
+AAAAAAAAAAAuR23/Lkdt/y5Hbf8LERtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiNVLAIjVSwAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAACg+X+AuR23/Lkdt/xEaKWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxEbQC5Hbf8LERtA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIjVSwC5Hbf8uR23/FyM2gAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUIDSArQmbw
+Lkdt/wIEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiNVLALkdt/y5Hbf8fMUuwAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAYQ
+JTlY0C5Hbf8uR23/JTlY0AgNFDAAAAAAAAAAAAAAAAAAAAAADhYiUCg+X+AuR23/Lkdt/y5Hbf8IDRQw
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAP
+AAAAFiU5WNUlOVjWIjVRyiI1UcsiNVLMKD5f5gAAADQAAAA2AAAANhEaKYAuR23/JTlY2SI1UcsiNVHK
+JTlY1i5Hbf8FCQ0zAAAADwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAACAAAAA8AAAAWAAAAHQAAACIAAAAnAAAALAAAAC8AAAAyAAAANAAAADYAAAA2AAAANAAAADIAAAAv
+AAAALAAAACcAAAAiAAAAHQAAABYAAAAPAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+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_