diff options
-rw-r--r-- | chrome/app/nibs/BookmarkBubble.xib | 900 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_bubble_controller.h | 40 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_bubble_controller.mm | 107 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm | 112 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_bubble_view_unittest.mm | 24 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_bubble_window.h | 2 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_bubble_window.mm | 10 | ||||
-rw-r--r-- | chrome/browser/cocoa/bookmark_bubble_window_unittest.mm | 23 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_controller.h | 22 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_controller.mm | 222 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_controller_unittest.mm | 189 | ||||
-rw-r--r-- | chrome/browser/cocoa/bubble_view_unittest.mm | 36 | ||||
-rw-r--r-- | chrome/browser/cocoa/cocoa_test_helper.h | 12 | ||||
-rw-r--r-- | chrome/browser/cocoa/sad_tab_view_unittest.mm | 2 |
14 files changed, 858 insertions, 843 deletions
diff --git a/chrome/app/nibs/BookmarkBubble.xib b/chrome/app/nibs/BookmarkBubble.xib index 7d144df..4188850 100644 --- a/chrome/app/nibs/BookmarkBubble.xib +++ b/chrome/app/nibs/BookmarkBubble.xib @@ -2,13 +2,13 @@ <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> <data> <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9L30</string> + <string key="IBDocument.SystemVersion">9L31a</string> <string key="IBDocument.InterfaceBuilderVersion">677</string> <string key="IBDocument.AppKitVersion">949.54</string> <string key="IBDocument.HIToolboxVersion">353.00</string> <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="39"/> + <integer value="34"/> </object> <object class="NSArray" key="IBDocument.PluginDependencies"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -34,344 +34,365 @@ <object class="NSCustomObject" id="1004"> <string key="NSClassName">NSApplication</string> </object> - <object class="NSCustomView" id="1005"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="559397096"> - <reference key="NSNextResponder" ref="1005"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 106}, {340, 19}}</string> - <reference key="NSSuperview" ref="1005"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="368795405"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^IDS_BOOMARK_BUBBLE_PAGE_BOOKMARK</string> - <object class="NSFont" key="NSSupport"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.300000e+01</double> - <int key="NSfFlags">1044</int> - </object> - <reference key="NSControlView" ref="559397096"/> - <object class="NSColor" key="NSBackgroundColor" id="152587692"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlColor</string> - <object class="NSColor" key="NSColor" id="748407352"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor" id="1000275559"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlTextColor</string> - <object class="NSColor" key="NSColor" id="947148753"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSCustomView" id="46287572"> - <reference key="NSNextResponder" ref="1005"/> - <int key="NSvFlags">289</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="82356437"> - <reference key="NSNextResponder" ref="46287572"/> - <int key="NSvFlags">289</int> - <string key="NSFrame">{{111, 13}, {96, 28}}</string> - <reference key="NSSuperview" ref="46287572"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="307931553"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134348800</int> - <string key="NSContents">^IDS_CLOSE</string> - <object class="NSFont" key="NSSupport" id="26"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.100000e+01</double> - <int key="NSfFlags">3100</int> + <object class="NSCustomObject" id="704223344"> + <string key="NSClassName">ChromeUILocalizer</string> + </object> + <object class="NSCustomObject" id="279326944"> + <string key="NSClassName">GTMUILocalizerAndLayoutTweaker</string> + </object> + <object class="NSWindowTemplate" id="588083889"> + <int key="NSWindowStyleMask">15</int> + <int key="NSWindowBacking">2</int> + <string key="NSWindowRect">{{196, 365}, {374, 145}}</string> + <int key="NSWTFlags">603979776</int> + <string key="NSWindowTitle">Window</string> + <string key="NSWindowClass">BookmarkBubbleWindow</string> + <nil key="NSViewClass"/> + <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> + <object class="NSView" key="NSWindowView" id="45997296"> + <reference key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSCustomView" id="1005"> + <reference key="NSNextResponder" ref="45997296"/> + <int key="NSvFlags">268</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSTextField" id="559397096"> + <reference key="NSNextResponder" ref="1005"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{17, 106}, {340, 19}}</string> + <reference key="NSSuperview" ref="1005"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="368795405"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents">^IDS_BOOMARK_BUBBLE_PAGE_BOOKMARK</string> + <object class="NSFont" key="NSSupport"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">1.300000e+01</double> + <int key="NSfFlags">1044</int> + </object> + <reference key="NSControlView" ref="559397096"/> + <object class="NSColor" key="NSBackgroundColor" id="152587692"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlColor</string> + <object class="NSColor" key="NSColor" id="748407352"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor" id="1000275559"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlTextColor</string> + <object class="NSColor" key="NSColor" id="947148753"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MAA</bytes> + </object> + </object> </object> - <reference key="NSControlView" ref="82356437"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> </object> - </object> - <object class="NSButton" id="430629007"> - <reference key="NSNextResponder" ref="46287572"/> - <int key="NSvFlags">289</int> - <string key="NSFrame">{{15, 13}, {96, 28}}</string> - <reference key="NSSuperview" ref="46287572"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="562929863"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134348800</int> - <string key="NSContents">^IDS_BOOMARK_BUBBLE_OPTIONS</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="430629007"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{152, 0}, {222, 42}}</string> - <reference key="NSSuperview" ref="1005"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - <object class="NSCustomView" id="209382123"> - <reference key="NSNextResponder" ref="1005"/> - <int key="NSvFlags">292</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="177936093"> - <reference key="NSNextResponder" ref="209382123"/> - <int key="NSvFlags">292</int> - <string key="NSFrame">{{15, 13}, {96, 28}}</string> - <reference key="NSSuperview" ref="209382123"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="1066753170"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134348800</int> - <string key="NSContents">^IDS_BOOMARK_BUBBLE_REMOVE_BOOKMARK</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="177936093"/> - <int key="NSButtonFlags">-2038021889</int> - <int key="NSButtonFlags2">129</int> - <object class="NSFont" key="NSAlternateImage"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.100000e+01</double> - <int key="NSfFlags">16</int> + <object class="NSCustomView" id="46287572"> + <reference key="NSNextResponder" ref="1005"/> + <int key="NSvFlags">289</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSButton" id="82356437"> + <reference key="NSNextResponder" ref="46287572"/> + <int key="NSvFlags">289</int> + <string key="NSFrame">{{111, 13}, {96, 28}}</string> + <reference key="NSSuperview" ref="46287572"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="307931553"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134348800</int> + <string key="NSContents">^IDS_CLOSE</string> + <object class="NSFont" key="NSSupport" id="26"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">1.100000e+01</double> + <int key="NSfFlags">3100</int> + </object> + <reference key="NSControlView" ref="82356437"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">129</int> + <string key="NSAlternateContents"/> + <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSButton" id="430629007"> + <reference key="NSNextResponder" ref="46287572"/> + <int key="NSvFlags">289</int> + <string key="NSFrame">{{15, 13}, {96, 28}}</string> + <reference key="NSSuperview" ref="46287572"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="562929863"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134348800</int> + <string key="NSContents">^IDS_BOOMARK_BUBBLE_OPTIONS</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="430629007"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">129</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - </object> - <string key="NSFrameSize">{126, 42}</string> - <reference key="NSSuperview" ref="1005"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - <object class="NSCustomView" id="900754038"> - <reference key="NSNextResponder" ref="1005"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="303910295"> - <reference key="NSNextResponder" ref="900754038"/> - <int key="NSvFlags">265</int> - <string key="NSFrame">{{17, 31}, {65, 14}}</string> - <reference key="NSSuperview" ref="900754038"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="628112279"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272761856</int> - <string key="NSContents">^IDS_BOOMARK_BUBBLE_TITLE_TEXT</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="303910295"/> - <reference key="NSBackgroundColor" ref="152587692"/> - <reference key="NSTextColor" ref="1000275559"/> - </object> - </object> - <object class="NSTextField" id="228609717"> - <reference key="NSNextResponder" ref="900754038"/> - <int key="NSvFlags">265</int> - <string key="NSFrame">{{17, 6}, {65, 14}}</string> - <reference key="NSSuperview" ref="900754038"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="295393049"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272761856</int> - <string key="NSContents">^IDS_BOOMARK_BUBBLE_FOLDER_TEXT</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="228609717"/> - <reference key="NSBackgroundColor" ref="152587692"/> - <reference key="NSTextColor" ref="1000275559"/> + <string key="NSFrame">{{152, 0}, {222, 42}}</string> + <reference key="NSSuperview" ref="1005"/> + <string key="NSClassName">GTMWidthBasedTweaker</string> </object> - </object> - </object> - <string key="NSFrame">{{0, 50}, {84, 53}}</string> - <reference key="NSSuperview" ref="1005"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - <object class="NSBox" id="899552678"> - <reference key="NSNextResponder" ref="1005"/> - <int key="NSvFlags">10</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSView" id="583964310"> - <reference key="NSNextResponder" ref="899552678"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="39428350"> - <reference key="NSNextResponder" ref="583964310"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{8, 33}, {267, 19}}</string> - <reference key="NSSuperview" ref="583964310"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="905670292"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272761856</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="39428350"/> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSColor" key="NSBackgroundColor" id="1033293763"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textBackgroundColor</string> - <object class="NSColor" key="NSColor" id="660986653"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MQA</bytes> + <object class="NSCustomView" id="209382123"> + <reference key="NSNextResponder" ref="1005"/> + <int key="NSvFlags">292</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSButton" id="177936093"> + <reference key="NSNextResponder" ref="209382123"/> + <int key="NSvFlags">292</int> + <string key="NSFrame">{{15, 13}, {96, 28}}</string> + <reference key="NSSuperview" ref="209382123"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="1066753170"> + <int key="NSCellFlags">-2080244224</int> + <int key="NSCellFlags2">134348800</int> + <string key="NSContents">^IDS_BOOMARK_BUBBLE_REMOVE_BOOKMARK</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="177936093"/> + <int key="NSButtonFlags">-2038021889</int> + <int key="NSButtonFlags2">129</int> + <object class="NSFont" key="NSAlternateImage"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">1.100000e+01</double> + <int key="NSfFlags">16</int> </object> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> </object> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textColor</string> - <reference key="NSColor" ref="947148753"/> + </object> + </object> + <string key="NSFrameSize">{126, 42}</string> + <reference key="NSSuperview" ref="1005"/> + <string key="NSClassName">GTMWidthBasedTweaker</string> + </object> + <object class="NSCustomView" id="900754038"> + <reference key="NSNextResponder" ref="1005"/> + <int key="NSvFlags">268</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSTextField" id="303910295"> + <reference key="NSNextResponder" ref="900754038"/> + <int key="NSvFlags">265</int> + <string key="NSFrame">{{17, 31}, {65, 14}}</string> + <reference key="NSSuperview" ref="900754038"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="628112279"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">272761856</int> + <string key="NSContents">^IDS_BOOMARK_BUBBLE_TITLE_TEXT</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="303910295"/> + <reference key="NSBackgroundColor" ref="152587692"/> + <reference key="NSTextColor" ref="1000275559"/> + </object> + </object> + <object class="NSTextField" id="228609717"> + <reference key="NSNextResponder" ref="900754038"/> + <int key="NSvFlags">265</int> + <string key="NSFrame">{{17, 6}, {65, 14}}</string> + <reference key="NSSuperview" ref="900754038"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="295393049"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">272761856</int> + <string key="NSContents">^IDS_BOOMARK_BUBBLE_FOLDER_TEXT</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="228609717"/> + <reference key="NSBackgroundColor" ref="152587692"/> + <reference key="NSTextColor" ref="1000275559"/> </object> </object> </object> - <object class="NSComboBox" id="977232728"> - <reference key="NSNextResponder" ref="583964310"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{8, 5}, {270, 22}}</string> - <reference key="NSSuperview" ref="583964310"/> - <bool key="NSEnabled">YES</bool> - <object class="NSComboBoxCell" key="NSCell" id="1003570867"> - <int key="NSCellFlags">74579521</int> - <int key="NSCellFlags2">272761856</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="977232728"/> - <bool key="NSDrawsBackground">YES</bool> - <reference key="NSBackgroundColor" ref="1033293763"/> - <reference key="NSTextColor" ref="1000275559"/> - <int key="NSVisibleItemCount">5</int> - <bool key="NSHasVerticalScroller">YES</bool> - <reference key="NSDelegate" ref="977232728"/> - <object class="NSComboTableView" key="NSTableView" id="1071628594"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">274</int> - <string key="NSFrameSize">{15, 0}</string> - <reference key="NSSuperview"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSMutableArray" key="NSTableColumns"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTableColumn"> - <integer value="0" key="NSIdentifier"/> - <double key="NSWidth">1.200000e+01</double> - <double key="NSMinWidth">1.000000e+01</double> - <double key="NSMaxWidth">1.000000e+03</double> - <object class="NSTableHeaderCell" key="NSHeaderCell"> - <int key="NSCellFlags">75628032</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents"/> - <object class="NSFont" key="NSSupport"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.200000e+01</double> - <int key="NSfFlags">16</int> - </object> - <object class="NSColor" key="NSBackgroundColor"> + <string key="NSFrame">{{0, 50}, {84, 53}}</string> + <reference key="NSSuperview" ref="1005"/> + <string key="NSClassName">GTMWidthBasedTweaker</string> + </object> + <object class="NSBox" id="899552678"> + <reference key="NSNextResponder" ref="1005"/> + <int key="NSvFlags">10</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSView" id="583964310"> + <reference key="NSNextResponder" ref="899552678"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSTextField" id="39428350"> + <reference key="NSNextResponder" ref="583964310"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{8, 33}, {267, 19}}</string> + <reference key="NSSuperview" ref="583964310"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="905670292"> + <int key="NSCellFlags">-1804468671</int> + <int key="NSCellFlags2">272761856</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="39428350"/> + <bool key="NSDrawsBackground">YES</bool> + <object class="NSColor" key="NSBackgroundColor" id="1033293763"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textBackgroundColor</string> + <object class="NSColor" key="NSColor" id="660986653"> <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes> + <bytes key="NSWhite">MQA</bytes> </object> - <reference key="NSTextColor" ref="660986653"/> </object> - <object class="NSTextFieldCell" key="NSDataCell"> - <int key="NSCellFlags">338820672</int> - <int key="NSCellFlags2">1024</int> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="1071628594"/> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSColor" key="NSBackgroundColor" id="744868739"> + <object class="NSColor" key="NSTextColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textColor</string> + <reference key="NSColor" ref="947148753"/> + </object> + </object> + </object> + <object class="NSComboBox" id="977232728"> + <reference key="NSNextResponder" ref="583964310"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{8, 5}, {270, 22}}</string> + <reference key="NSSuperview" ref="583964310"/> + <bool key="NSEnabled">YES</bool> + <object class="NSComboBoxCell" key="NSCell" id="1003570867"> + <int key="NSCellFlags">74579521</int> + <int key="NSCellFlags2">272761856</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="977232728"/> + <bool key="NSDrawsBackground">YES</bool> + <reference key="NSBackgroundColor" ref="1033293763"/> + <reference key="NSTextColor" ref="1000275559"/> + <int key="NSVisibleItemCount">5</int> + <bool key="NSHasVerticalScroller">YES</bool> + <reference key="NSDelegate" ref="977232728"/> + <object class="NSComboTableView" key="NSTableView" id="1071628594"> + <reference key="NSNextResponder"/> + <int key="NSvFlags">274</int> + <string key="NSFrameSize">{15, 0}</string> + <reference key="NSSuperview"/> + <reference key="NSWindow"/> + <bool key="NSEnabled">YES</bool> + <object class="NSMutableArray" key="NSTableColumns"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSTableColumn"> + <integer value="0" key="NSIdentifier"/> + <double key="NSWidth">1.200000e+01</double> + <double key="NSMinWidth">1.000000e+01</double> + <double key="NSMaxWidth">1.000000e+03</double> + <object class="NSTableHeaderCell" key="NSHeaderCell"> + <int key="NSCellFlags">75628032</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents"/> + <object class="NSFont" key="NSSupport"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">1.200000e+01</double> + <int key="NSfFlags">16</int> + </object> + <object class="NSColor" key="NSBackgroundColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes> + </object> + <reference key="NSTextColor" ref="660986653"/> + </object> + <object class="NSTextFieldCell" key="NSDataCell"> + <int key="NSCellFlags">338820672</int> + <int key="NSCellFlags2">1024</int> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="1071628594"/> + <bool key="NSDrawsBackground">YES</bool> + <object class="NSColor" key="NSBackgroundColor" id="744868739"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlBackgroundColor</string> + <reference key="NSColor" ref="748407352"/> + </object> + <reference key="NSTextColor" ref="1000275559"/> + </object> + <int key="NSResizingMask">3</int> + <bool key="NSIsResizeable">YES</bool> + <reference key="NSTableView" ref="1071628594"/> + </object> + </object> + <double key="NSIntercellSpacingWidth">3.000000e+00</double> + <double key="NSIntercellSpacingHeight">2.000000e+00</double> + <reference key="NSBackgroundColor" ref="744868739"/> + <object class="NSColor" key="NSGridColor"> <int key="NSColorSpace">6</int> <string key="NSCatalogName">System</string> - <string key="NSColorName">controlBackgroundColor</string> - <reference key="NSColor" ref="748407352"/> + <string key="NSColorName">gridColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MC41AA</bytes> + </object> </object> - <reference key="NSTextColor" ref="1000275559"/> + <double key="NSRowHeight">1.600000e+01</double> + <string key="NSAction">tableViewAction:</string> + <int key="NSTvFlags">-767524864</int> + <reference key="NSDelegate" ref="1003570867"/> + <reference key="NSDataSource" ref="1003570867"/> + <reference key="NSTarget" ref="1003570867"/> + <int key="NSColumnAutoresizingStyle">1</int> + <int key="NSDraggingSourceMaskForLocal">15</int> + <int key="NSDraggingSourceMaskForNonLocal">0</int> + <bool key="NSAllowsTypeSelect">YES</bool> </object> - <int key="NSResizingMask">3</int> - <bool key="NSIsResizeable">YES</bool> - <reference key="NSTableView" ref="1071628594"/> </object> </object> - <double key="NSIntercellSpacingWidth">3.000000e+00</double> - <double key="NSIntercellSpacingHeight">2.000000e+00</double> - <reference key="NSBackgroundColor" ref="744868739"/> - <object class="NSColor" key="NSGridColor"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">gridColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC41AA</bytes> - </object> - </object> - <double key="NSRowHeight">1.600000e+01</double> - <string key="NSAction">tableViewAction:</string> - <int key="NSTvFlags">-767524864</int> - <reference key="NSDelegate" ref="1003570867"/> - <reference key="NSDataSource" ref="1003570867"/> - <reference key="NSTarget" ref="1003570867"/> - <int key="NSColumnAutoresizingStyle">1</int> - <int key="NSDraggingSourceMaskForLocal">15</int> - <int key="NSDraggingSourceMaskForNonLocal">0</int> - <bool key="NSAllowsTypeSelect">YES</bool> </object> + <string key="NSFrameSize">{294, 59}</string> + <reference key="NSSuperview" ref="899552678"/> </object> </object> + <string key="NSFrame">{{79, 46}, {294, 59}}</string> + <reference key="NSSuperview" ref="1005"/> + <string key="NSOffsets">{0, 0}</string> + <object class="NSTextFieldCell" key="NSTitleCell"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="26"/> + <reference key="NSBackgroundColor" ref="1033293763"/> + <object class="NSColor" key="NSTextColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> + </object> + </object> + <reference key="NSContentView" ref="583964310"/> + <int key="NSBorderType">0</int> + <int key="NSBoxType">0</int> + <int key="NSTitlePosition">0</int> + <bool key="NSTransparent">NO</bool> </object> - <string key="NSFrameSize">{294, 59}</string> - <reference key="NSSuperview" ref="899552678"/> </object> + <string key="NSFrameSize">{374, 145}</string> + <reference key="NSSuperview" ref="45997296"/> + <string key="NSClassName">BookmarkBubbleView</string> </object> - <string key="NSFrame">{{79, 46}, {294, 59}}</string> - <reference key="NSSuperview" ref="1005"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="26"/> - <reference key="NSBackgroundColor" ref="1033293763"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <reference key="NSContentView" ref="583964310"/> - <int key="NSBorderType">0</int> - <int key="NSBoxType">0</int> - <int key="NSTitlePosition">0</int> - <bool key="NSTransparent">NO</bool> </object> + <string key="NSFrameSize">{374, 145}</string> + <reference key="NSSuperview"/> </object> - <string key="NSFrameSize">{374, 145}</string> - <reference key="NSSuperview"/> - <string key="NSClassName">BookmarkBubbleView</string> - </object> - <object class="NSCustomObject" id="704223344"> - <string key="NSClassName">ChromeUILocalizer</string> - </object> - <object class="NSCustomObject" id="279326944"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweaker</string> + <string key="NSScreenRect">{{0, 0}, {2560, 1578}}</string> + <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> </object> </object> <object class="IBObjectContainer" key="IBDocument.Objects"> @@ -402,14 +423,6 @@ <int key="connectionID">25</int> </object> <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">close:</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="82356437"/> - </object> - <int key="connectionID">26</int> - </object> - <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> <string key="label">bigTitle_</string> <reference key="source" ref="1001"/> @@ -427,14 +440,6 @@ </object> <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> - <string key="label">view</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">30</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> <string key="label">folderComboBox_</string> <reference key="source" ref="1001"/> <reference key="destination" ref="977232728"/> @@ -473,6 +478,38 @@ </object> <int key="connectionID">44</int> </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">window</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="588083889"/> + </object> + <int key="connectionID">52</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="588083889"/> + <reference key="destination" ref="1001"/> + </object> + <int key="connectionID">53</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">initialFirstResponder</string> + <reference key="source" ref="588083889"/> + <reference key="destination" ref="39428350"/> + </object> + <int key="connectionID">54</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">ok:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="82356437"/> + </object> + <int key="connectionID">56</int> + </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> <object class="NSArray" key="orderedObjects"> @@ -504,6 +541,34 @@ <string key="objectName">Application</string> </object> <object class="IBObjectRecord"> + <int key="objectID">31</int> + <reference key="object" ref="704223344"/> + <reference key="parent" ref="376579351"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">42</int> + <reference key="object" ref="279326944"/> + <reference key="parent" ref="376579351"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">50</int> + <reference key="object" ref="588083889"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="45997296"/> + </object> + <reference key="parent" ref="376579351"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">51</int> + <reference key="object" ref="45997296"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1005"/> + </object> + <reference key="parent" ref="588083889"/> + </object> + <object class="IBObjectRecord"> <int key="objectID">1</int> <reference key="object" ref="1005"/> <object class="NSMutableArray" key="children"> @@ -514,7 +579,7 @@ <reference ref="900754038"/> <reference ref="899552678"/> </object> - <reference key="parent" ref="376579351"/> + <reference key="parent" ref="45997296"/> </object> <object class="IBObjectRecord"> <int key="objectID">2</int> @@ -526,16 +591,6 @@ <reference key="parent" ref="1005"/> </object> <object class="IBObjectRecord"> - <int key="objectID">3</int> - <reference key="object" ref="368795405"/> - <reference key="parent" ref="559397096"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">31</int> - <reference key="object" ref="704223344"/> - <reference key="parent" ref="376579351"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">34</int> <reference key="object" ref="46287572"/> <object class="NSMutableArray" key="children"> @@ -546,65 +601,61 @@ <reference key="parent" ref="1005"/> </object> <object class="IBObjectRecord"> - <int key="objectID">18</int> - <reference key="object" ref="82356437"/> + <int key="objectID">35</int> + <reference key="object" ref="209382123"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="307931553"/> + <reference ref="177936093"/> </object> - <reference key="parent" ref="46287572"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">19</int> - <reference key="object" ref="307931553"/> - <reference key="parent" ref="82356437"/> + <reference key="parent" ref="1005"/> </object> <object class="IBObjectRecord"> - <int key="objectID">16</int> - <reference key="object" ref="430629007"/> + <int key="objectID">36</int> + <reference key="object" ref="900754038"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="562929863"/> + <reference ref="303910295"/> + <reference ref="228609717"/> </object> - <reference key="parent" ref="46287572"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">17</int> - <reference key="object" ref="562929863"/> - <reference key="parent" ref="430629007"/> + <reference key="parent" ref="1005"/> </object> <object class="IBObjectRecord"> - <int key="objectID">35</int> - <reference key="object" ref="209382123"/> + <int key="objectID">39</int> + <reference key="object" ref="899552678"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="177936093"/> + <reference ref="39428350"/> + <reference ref="977232728"/> </object> <reference key="parent" ref="1005"/> </object> <object class="IBObjectRecord"> - <int key="objectID">20</int> - <reference key="object" ref="177936093"/> + <int key="objectID">12</int> + <reference key="object" ref="39428350"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1066753170"/> + <reference ref="905670292"/> </object> - <reference key="parent" ref="209382123"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">21</int> - <reference key="object" ref="1066753170"/> - <reference key="parent" ref="177936093"/> + <reference key="parent" ref="899552678"/> </object> <object class="IBObjectRecord"> - <int key="objectID">36</int> - <reference key="object" ref="900754038"/> + <int key="objectID">14</int> + <reference key="object" ref="977232728"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="303910295"/> - <reference ref="228609717"/> + <reference ref="1003570867"/> </object> - <reference key="parent" ref="1005"/> + <reference key="parent" ref="899552678"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">15</int> + <reference key="object" ref="1003570867"/> + <reference key="parent" ref="977232728"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">13</int> + <reference key="object" ref="905670292"/> + <reference key="parent" ref="39428350"/> </object> <object class="IBObjectRecord"> <int key="objectID">8</int> @@ -616,11 +667,6 @@ <reference key="parent" ref="900754038"/> </object> <object class="IBObjectRecord"> - <int key="objectID">9</int> - <reference key="object" ref="628112279"/> - <reference key="parent" ref="303910295"/> - </object> - <object class="IBObjectRecord"> <int key="objectID">10</int> <reference key="object" ref="228609717"/> <object class="NSMutableArray" key="children"> @@ -635,47 +681,56 @@ <reference key="parent" ref="228609717"/> </object> <object class="IBObjectRecord"> - <int key="objectID">39</int> - <reference key="object" ref="899552678"/> + <int key="objectID">9</int> + <reference key="object" ref="628112279"/> + <reference key="parent" ref="303910295"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">20</int> + <reference key="object" ref="177936093"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="39428350"/> - <reference ref="977232728"/> + <reference ref="1066753170"/> </object> - <reference key="parent" ref="1005"/> + <reference key="parent" ref="209382123"/> </object> <object class="IBObjectRecord"> - <int key="objectID">12</int> - <reference key="object" ref="39428350"/> + <int key="objectID">21</int> + <reference key="object" ref="1066753170"/> + <reference key="parent" ref="177936093"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">18</int> + <reference key="object" ref="82356437"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="905670292"/> + <reference ref="307931553"/> </object> - <reference key="parent" ref="899552678"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">13</int> - <reference key="object" ref="905670292"/> - <reference key="parent" ref="39428350"/> + <reference key="parent" ref="46287572"/> </object> <object class="IBObjectRecord"> - <int key="objectID">14</int> - <reference key="object" ref="977232728"/> + <int key="objectID">16</int> + <reference key="object" ref="430629007"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1003570867"/> + <reference ref="562929863"/> </object> - <reference key="parent" ref="899552678"/> + <reference key="parent" ref="46287572"/> </object> <object class="IBObjectRecord"> - <int key="objectID">15</int> - <reference key="object" ref="1003570867"/> - <reference key="parent" ref="977232728"/> + <int key="objectID">17</int> + <reference key="object" ref="562929863"/> + <reference key="parent" ref="430629007"/> </object> <object class="IBObjectRecord"> - <int key="objectID">42</int> - <reference key="object" ref="279326944"/> - <reference key="parent" ref="376579351"/> + <int key="objectID">19</int> + <reference key="object" ref="307931553"/> + <reference key="parent" ref="82356437"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">3</int> + <reference key="object" ref="368795405"/> + <reference key="parent" ref="559397096"/> </object> </object> </object> @@ -707,6 +762,11 @@ <string>3.IBPluginDependency</string> <string>31.IBPluginDependency</string> <string>42.IBPluginDependency</string> + <string>50.IBEditorWindowLastContentRect</string> + <string>50.IBPluginDependency</string> + <string>50.IBWindowTemplateEditedContentRect</string> + <string>50.NSWindowTemplate.visibleAtLaunch</string> + <string>51.IBPluginDependency</string> <string>8.IBPluginDependency</string> <string>9.IBPluginDependency</string> </object> @@ -715,7 +775,7 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{407, 412}, {374, 145}}</string> + <string>{{126, 412}, {374, 145}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <object class="NSMutableArray"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -743,6 +803,11 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{241, 633}, {374, 145}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{241, 633}, {374, 145}}</string> + <boolean value="YES"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> </object> @@ -767,20 +832,21 @@ </object> </object> <nil key="sourceID"/> - <int key="maxID">44</int> + <int key="maxID">56</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <object class="NSMutableArray" key="referencedPartialClassDescriptions"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="IBPartialClassDescription"> <string key="className">BookmarkBubbleController</string> - <string key="superclassName">NSViewController</string> + <string key="superclassName">NSWindowController</string> <object class="NSMutableDictionary" key="actions"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="NSMutableArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> - <string>close:</string> + <string>cancel:</string> <string>edit:</string> + <string>ok:</string> <string>remove:</string> </object> <object class="NSMutableArray" key="dict.values"> @@ -788,6 +854,7 @@ <string>id</string> <string>id</string> <string>id</string> + <string>id</string> </object> </object> <object class="NSMutableDictionary" key="outlets"> @@ -821,6 +888,14 @@ </object> </object> <object class="IBPartialClassDescription"> + <string key="className">BookmarkBubbleWindow</string> + <string key="superclassName">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">browser/cocoa/bookmark_bubble_window.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> <string key="className">ChromeUILocalizer</string> <string key="superclassName">GTMUILocalizer</string> <object class="IBClassDescriptionSource" key="sourceIdentifier"> @@ -908,6 +983,13 @@ <string key="minorKey">browser/cocoa/tab_strip_model_observer_bridge.h</string> </object> </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">browser/cocoa/nswindow_local_state.h</string> + </object> + </object> </object> </object> <int key="IBDocument.localizationMode">0</int> diff --git a/chrome/browser/cocoa/bookmark_bubble_controller.h b/chrome/browser/cocoa/bookmark_bubble_controller.h index df387a9..0ad77c1 100644 --- a/chrome/browser/cocoa/bookmark_bubble_controller.h +++ b/chrome/browser/cocoa/bookmark_bubble_controller.h @@ -16,36 +16,21 @@ class BookmarkNode; // The bubble asks the delegate to perform an edit when needed. - (void)editBookmarkNode:(const BookmarkNode*)node; -// The bubble tells its delegate when it's done and can be deallocated. -- (void)doneWithBubbleController:(BookmarkBubbleController*)controller; - @end // Controller for the bookmark bubble. The bookmark bubble is a // bubble that pops up when clicking on the STAR next to the URL to // add or remove it as a bookmark. This bubble allows for editing of // the bookmark in various ways (name, folder, etc.) -// -// The bubble is stored in a nib as a view, not as a window, so we can -// make it an actual bubble. There is no nib-rific way to encode a -// NSBorderlessWindowMask NSWindow, and the style of an NSWindow can't -// be set other than init time. To deal, we create the NSWindow -// programatically, but encode the view in a nib. Thus, -// BookmarkBubbleController is an NSViewController, not an -// NSWindowController. -@interface BookmarkBubbleController : NSViewController<NSWindowDelegate> { +@interface BookmarkBubbleController : NSWindowController<NSWindowDelegate> { @private - // Unexpected for this controller, perhaps, but our window does NOT - // come from a nib. - scoped_nsobject<NSWindow> window_; - id<BookmarkBubbleControllerDelegate> delegate_; // weak like other delegates NSWindow* parentWindow_; // weak NSPoint topLeftForBubble_; // Both weak; owned by the current browser's profile - BookmarkModel* model_; - const BookmarkNode* node_; + BookmarkModel* model_; // weak + const BookmarkNode* node_; // weak // A mapping from titles to nodes so we only have to walk this once. scoped_nsobject<NSMutableArray> titleMapping_; @@ -71,29 +56,26 @@ class BookmarkNode; node:(const BookmarkNode*)node alreadyBookmarked:(BOOL)alreadyBookmarked; -- (void)showWindow; - // Actions for buttons in the dialog. - (IBAction)edit:(id)sender; -- (IBAction)close:(id)sender; +- (IBAction)ok:(id)sender; - (IBAction)remove:(id)sender; +- (IBAction)cancel:(id)sender; @end // Exposed only for unit testing. @interface BookmarkBubbleController(ExposedForUnitTesting) -- (NSWindow*)createBubbleWindow; - (void)fillInFolderList; -- (BOOL)windowHasBeenClosed; - (void)addFolderNodes:(const BookmarkNode*)parent toComboBox:(NSComboBox*)box; - (void)updateBookmarkNode; -- (void)setTitle:(NSString *)title parentFolder:(NSString*)folder; +- (void)setTitle:(NSString*)title parentFolder:(NSString*)folder; - (NSString*)chooseAnotherFolderString; +- (NSComboBox*)folderComboBox; @end -// Also private but I need to declare them specially for @synthesize to work. -@interface BookmarkBubbleController () -@property (readonly) id delegate; -@property (readonly) NSComboBox* folderComboBox; -@end + + + + diff --git a/chrome/browser/cocoa/bookmark_bubble_controller.mm b/chrome/browser/cocoa/bookmark_bubble_controller.mm index 9e44741..cb88fd5 100644 --- a/chrome/browser/cocoa/bookmark_bubble_controller.mm +++ b/chrome/browser/cocoa/bookmark_bubble_controller.mm @@ -11,25 +11,18 @@ #include "chrome/browser/metrics/user_metrics.h" #include "grit/generated_resources.h" - -@interface BookmarkBubbleController(PrivateAPI) -- (void)closeWindow; -@end - @implementation BookmarkBubbleController -@synthesize delegate = delegate_; -@synthesize folderComboBox = folderComboBox_; - - (id)initWithDelegate:(id<BookmarkBubbleControllerDelegate>)delegate parentWindow:(NSWindow*)parentWindow topLeftForBubble:(NSPoint)topLeftForBubble model:(BookmarkModel*)model node:(const BookmarkNode*)node alreadyBookmarked:(BOOL)alreadyBookmarked { - if ((self = [super initWithNibName:@"BookmarkBubble" - bundle:mac_util::MainAppBundle()])) { - // All these are weak... + NSString* nibPath = + [mac_util::MainAppBundle() pathForResource:@"BookmarkBubble" + ofType:@"nib"]; + if ((self = [super initWithWindowNibPath:nibPath owner:self])) { delegate_ = delegate; parentWindow_ = parentWindow; topLeftForBubble_ = topLeftForBubble; @@ -42,45 +35,37 @@ return self; } -- (void)dealloc { - [self closeWindow]; - [super dealloc]; -} - -- (void)showWindow { - [self view]; // force nib load and window_ allocation - [window_ makeKeyAndOrderFront:self]; +- (void)windowWillClose:(NSNotification *)notification { + [self autorelease]; } -// Actually close the window. Do nothing else. -- (void)closeWindow { - [parentWindow_ removeChildWindow:window_]; - [window_ close]; -} - -- (void)awakeFromNib { - window_.reset([self createBubbleWindow]); - [parentWindow_ addChildWindow:window_ ordered:NSWindowAbove]; - - // Fill in inital values for text, controls, ... - +- (void)windowDidLoad { + NSWindow* window = [self window]; + NSPoint origin = [parentWindow_ convertBaseToScreen:topLeftForBubble_]; + origin.y -= NSHeight([window frame]); + [window setFrameOrigin:origin]; + [parentWindow_ addChildWindow:window ordered:NSWindowAbove]; // Default is IDS_BOOMARK_BUBBLE_PAGE_BOOKMARK; "Bookmark". // If adding for the 1st time the string becomes "Bookmark Added!" if (!alreadyBookmarked_) { NSString* title = - l10n_util::GetNSString(IDS_BOOMARK_BUBBLE_PAGE_BOOKMARKED); + l10n_util::GetNSString(IDS_BOOMARK_BUBBLE_PAGE_BOOKMARKED); [bigTitle_ setStringValue:title]; } [self fillInFolderList]; } +- (void)close { + [parentWindow_ removeChildWindow:[self window]]; + [super close]; +} + // Shows the bookmark editor sheet for more advanced editing. - (void)showEditor { [self updateBookmarkNode]; - [self closeWindow]; [delegate_ editBookmarkNode:node_]; - [delegate_ doneWithBubbleController:self]; + [self close]; } - (IBAction)edit:(id)sender { @@ -88,13 +73,9 @@ [self showEditor]; } -- (IBAction)close:(id)sender { - if (node_) { - // no node_ if the bookmark was just removed - [self updateBookmarkNode]; - } - [self closeWindow]; - [delegate_ doneWithBubbleController:self]; +- (IBAction)ok:(id)sender { + [self updateBookmarkNode]; + [self close]; } // By implementing this, ESC causes the window to go away. If clicking the @@ -105,7 +86,7 @@ // |-remove:| calls |-close| so we don't have to bother. [self remove:sender]; } else { - [self close:sender]; + [self ok:sender]; } } @@ -113,7 +94,7 @@ model_->SetURLStarred(node_->GetURL(), node_->GetTitle(), false); UserMetrics::RecordAction(L"BookmarkBubble_Unstar", model_->profile()); node_ = NULL; // no longer valid - [self close:self]; + [self ok:sender]; } // We are the delegate of the combo box so we can tell when "choose @@ -128,18 +109,14 @@ } // We are the delegate of our own window so we know when we lose key. -// When we lose key status we close, mirroring Windows behaivor. +// When we lose key status we close, mirroring Windows behavior. - (void)windowDidResignKey:(NSNotification*)notification { + DCHECK_EQ([notification object], [self window]); - // If we get here, we are done with this window and controller. The - // call of close: may destroy us which destroys the window. But the - // window is in the middle of processing resignKeyWindow. We - // retain/autorelease the window to insure it lasts until the end of - // this event. - [[window_ retain] autorelease]; - - if ([window_ isVisible]) - [self close:self]; + // Can't call close from within a window delegate method. We can call + // close after it's finished though. So this will call close for us next + // time through the event loop. + [self performSelector:@selector(ok:) withObject:self afterDelay:0]; } @end // BookmarkBubbleController @@ -147,20 +124,6 @@ @implementation BookmarkBubbleController(ExposedForUnitTesting) -// Create and return a retained NSWindow for this bubble. -- (NSWindow*)createBubbleWindow { - NSRect contentRect = [[self view] frame]; - NSPoint origin = topLeftForBubble_; - origin.y -= contentRect.size.height; // since it'll be our bottom-left - contentRect.origin = origin; - // Now convert to global coordinates since it'll be used for a window. - contentRect.origin = [parentWindow_ convertBaseToScreen:contentRect.origin]; - NSWindow* window = [[BookmarkBubbleWindow alloc] - initWithContentRect:contentRect]; - [window setDelegate:self]; - [window setContentView:[self view]]; - return window; -} // Fill in all information related to the folder combo box. // @@ -183,10 +146,6 @@ [folderComboBox_ selectItemWithObjectValue:parentTitle]; } -- (BOOL)windowHasBeenClosed { - return ![window_ isVisible]; -} - // For the given folder node, walk the tree and add folder names to // the given combo box. // @@ -207,6 +166,8 @@ // Look at the dialog; if the user has changed anything, update the // bookmark node to reflect this. - (void)updateBookmarkNode { + if (!node_) return; + // First the title... NSString* oldTitle = base::SysWideToNSString(node_->GetTitle()); NSString* newTitle = [nameTextField_ stringValue]; @@ -241,4 +202,8 @@ return chooseAnotherFolder_.get(); } +- (NSComboBox*)folderComboBox { + return folderComboBox_; +} + @end // implementation BookmarkBubbleController(ExposedForUnitTesting) diff --git a/chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm b/chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm index 91dfa72..b090504 100644 --- a/chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm +++ b/chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm @@ -13,20 +13,26 @@ #include "testing/platform_test.h" @interface BBDelegate : NSObject<BookmarkBubbleControllerDelegate> { - NSWindow* window_; // weak + @private + BOOL windowClosed_; int edits_; - int dones_; } + @property (readonly) int edits; -@property (readonly) int dones; -@property (readonly) NSWindow* window; +@property (readonly) BOOL windowClosed; + @end @implementation BBDelegate @synthesize edits = edits_; -@synthesize window = window_; -@synthesize dones = dones_; +@synthesize windowClosed = windowClosed_; + +- (void)dealloc { + NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; + [nc removeObserver:self]; + [super dealloc]; +} - (NSPoint)topLeftForBubble { return NSMakePoint(10, 300); @@ -36,42 +42,54 @@ edits_++; } -- (void)doneWithBubbleController:(BookmarkBubbleController*)controller { - dones_++; +- (void)setWindowController:(NSWindowController *)controller { + NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; + [nc removeObserver:self]; + if (controller) { + [nc addObserver:self + selector:@selector(windowWillClose:) + name:NSWindowWillCloseNotification + object:[controller window]]; + } + windowClosed_ = NO; } -- (void)clear { - edits_ = 0; - dones_ = 0; +- (void)windowWillClose:(NSNotification*)notification { + windowClosed_ = YES; } - @end namespace { -class BookmarkBubbleControllerTest : public PlatformTest { +class BookmarkBubbleControllerTest : public CocoaTest { public: - CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc... BrowserTestHelper helper_; scoped_nsobject<BBDelegate> delegate_; - scoped_nsobject<BookmarkBubbleController> controller_; + BookmarkBubbleController* controller_; - BookmarkBubbleControllerTest() { + BookmarkBubbleControllerTest() : controller_(nil) { delegate_.reset([[BBDelegate alloc] init]); } + virtual void TearDown() { + [controller_ close]; + CocoaTest::TearDown(); + } + // Returns a controller but ownership not transferred. // Only one of these will be valid at a time. BookmarkBubbleController* ControllerForNode(const BookmarkNode* node) { - controller_.reset([[BookmarkBubbleController alloc] - initWithDelegate:delegate_.get() - parentWindow:cocoa_helper_.window() - topLeftForBubble:[delegate_ topLeftForBubble] - model:helper_.profile()->GetBookmarkModel() - node:node - alreadyBookmarked:YES]); - [controller_ view]; // force nib load - return controller_.get(); + DCHECK(controller_ == nil); + controller_ = [[BookmarkBubbleController alloc] + initWithDelegate:delegate_.get() + parentWindow:test_window() + topLeftForBubble:[delegate_ topLeftForBubble] + model:helper_.profile()->GetBookmarkModel() + node:node + alreadyBookmarked:YES]; + EXPECT_TRUE([controller_ window]); + [delegate_ setWindowController:controller_]; + return controller_; } BookmarkModel* GetBookmarkModel() { @@ -89,9 +107,9 @@ TEST_F(BookmarkBubbleControllerTest, TestBubbleWindow) { GURL("http://www.google.com")); BookmarkBubbleController* controller = ControllerForNode(node); EXPECT_TRUE(controller); - NSWindow* window = [controller createBubbleWindow]; + NSWindow* window = [controller window]; EXPECT_TRUE(window); - EXPECT_TRUE(NSContainsRect([cocoa_helper_.window() frame], + EXPECT_TRUE(NSContainsRect([test_window() frame], [window frame])); } @@ -124,7 +142,7 @@ TEST_F(BookmarkBubbleControllerTest, TestFillInFolder) { } // Click on edit; bubble gets closed. -TEST_F(BookmarkBubbleControllerTest, TestSimpleActions) { +TEST_F(BookmarkBubbleControllerTest, TestEdit) { BookmarkModel* model = GetBookmarkModel(); const BookmarkNode* node = model->AddURL(model->GetBookmarkBarNode(), 0, @@ -134,24 +152,27 @@ TEST_F(BookmarkBubbleControllerTest, TestSimpleActions) { EXPECT_TRUE(controller); EXPECT_EQ([delegate_ edits], 0); - EXPECT_EQ([delegate_ dones], 0); - EXPECT_FALSE([controller windowHasBeenClosed]); + EXPECT_FALSE([delegate_ windowClosed]); [controller edit:controller]; EXPECT_EQ([delegate_ edits], 1); - EXPECT_EQ([delegate_ dones], 1); - EXPECT_TRUE([controller windowHasBeenClosed]); + EXPECT_TRUE([delegate_ windowClosed]); +} - [delegate_ clear]; +// CallClose; bubble gets closed. +TEST_F(BookmarkBubbleControllerTest, TestClose) { + BookmarkModel* model = GetBookmarkModel(); + const BookmarkNode* node = model->AddURL(model->GetBookmarkBarNode(), + 0, + L"Bookie markie title", + GURL("http://www.google.com")); EXPECT_EQ([delegate_ edits], 0); - EXPECT_EQ([delegate_ dones], 0); - controller = ControllerForNode(node); + BookmarkBubbleController* controller = ControllerForNode(node); EXPECT_TRUE(controller); - EXPECT_FALSE([controller windowHasBeenClosed]); - [controller close:controller]; + EXPECT_FALSE([delegate_ windowClosed]); + [controller ok:controller]; EXPECT_EQ([delegate_ edits], 0); - EXPECT_EQ([delegate_ dones], 1); - EXPECT_TRUE([controller windowHasBeenClosed]); + EXPECT_TRUE([delegate_ windowClosed]); } // User changes title and parent folder in the UI @@ -189,8 +210,7 @@ TEST_F(BookmarkBubbleControllerTest, TestRemove) { [controller remove:controller]; EXPECT_FALSE(model->IsBookmarked(gurl)); - EXPECT_TRUE([controller windowHasBeenClosed]); - EXPECT_EQ([delegate_ dones], 1); + EXPECT_TRUE([delegate_ windowClosed]); } // Confirm picking "choose another folder" caused edit: to be called. @@ -219,16 +239,16 @@ TEST_F(BookmarkBubbleControllerTest, EscapeRemovesNewBookmark) { 0, L"Bookie markie title", gurl); - scoped_nsobject<BookmarkBubbleController> controller( + BookmarkBubbleController* controller = [[BookmarkBubbleController alloc] initWithDelegate:delegate_.get() - parentWindow:cocoa_helper_.window() + parentWindow:test_window() topLeftForBubble:[delegate_ topLeftForBubble] model:helper_.profile()->GetBookmarkModel() node:node - alreadyBookmarked:NO]); // The last param is the key difference. - EXPECT_TRUE(controller); - + alreadyBookmarked:NO]; // The last param is the key difference. + EXPECT_TRUE([controller window]); + // Calls release on controller. [controller cancel:nil]; EXPECT_FALSE(model->IsBookmarked(gurl)); } diff --git a/chrome/browser/cocoa/bookmark_bubble_view_unittest.mm b/chrome/browser/cocoa/bookmark_bubble_view_unittest.mm index 9744397..f9083f7 100644 --- a/chrome/browser/cocoa/bookmark_bubble_view_unittest.mm +++ b/chrome/browser/cocoa/bookmark_bubble_view_unittest.mm @@ -2,35 +2,25 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import <Cocoa/Cocoa.h> - #include "base/scoped_nsobject.h" #import "chrome/browser/cocoa/bookmark_bubble_view.h" #import "chrome/browser/cocoa/cocoa_test_helper.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "testing/platform_test.h" namespace { -class BookmarkBubbleViewTest : public PlatformTest { +class BookmarkBubbleViewTest : public CocoaTest { public: BookmarkBubbleViewTest() { NSRect frame = NSMakeRect(0, 0, 100, 30); - view_.reset([[BookmarkBubbleView alloc] initWithFrame:frame]); - [cocoa_helper_.contentView() addSubview:view_.get()]; + scoped_nsobject<BookmarkBubbleView> view( + [[BookmarkBubbleView alloc] initWithFrame:frame]); + view_ = view.get(); + [[test_window() contentView] addSubview:view_]; } - CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc... - scoped_nsobject<BookmarkBubbleView> view_; + BookmarkBubbleView* view_; }; -// Test drawing and an add/remove from the view hierarchy to ensure -// nothing leaks or crashes. -TEST_F(BookmarkBubbleViewTest, AddRemoveDisplay) { - [view_ display]; - EXPECT_EQ(cocoa_helper_.contentView(), [view_ superview]); - [view_.get() removeFromSuperview]; - EXPECT_FALSE([view_ superview]); -} +TEST_VIEW(BookmarkBubbleViewTest, view_); } // namespace diff --git a/chrome/browser/cocoa/bookmark_bubble_window.h b/chrome/browser/cocoa/bookmark_bubble_window.h index 45e2f3b..5e667ad 100644 --- a/chrome/browser/cocoa/bookmark_bubble_window.h +++ b/chrome/browser/cocoa/bookmark_bubble_window.h @@ -6,6 +6,4 @@ // Window for the bookmark bubble that comes up when you click on "STAR". @interface BookmarkBubbleWindow : NSWindow -- (id)initWithContentRect:(NSRect)contentRect; @end - diff --git a/chrome/browser/cocoa/bookmark_bubble_window.mm b/chrome/browser/cocoa/bookmark_bubble_window.mm index 7c93ce8..4b2e372 100644 --- a/chrome/browser/cocoa/bookmark_bubble_window.mm +++ b/chrome/browser/cocoa/bookmark_bubble_window.mm @@ -6,12 +6,14 @@ @implementation BookmarkBubbleWindow -- (id)initWithContentRect:(NSRect)contentRect { +- (id)initWithContentRect:(NSRect)contentRect + styleMask:(NSUInteger)aStyle + backing:(NSBackingStoreType)bufferingType + defer:(BOOL)flag { if ((self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask - backing:NSBackingStoreBuffered - defer:YES])) { - [self setReleasedWhenClosed:NO]; + backing:bufferingType + defer:flag])) { [self setBackgroundColor:[NSColor clearColor]]; [self setExcludedFromWindowsMenu:YES]; [self setAlphaValue:1.0]; diff --git a/chrome/browser/cocoa/bookmark_bubble_window_unittest.mm b/chrome/browser/cocoa/bookmark_bubble_window_unittest.mm index 9c53652..bae4697 100644 --- a/chrome/browser/cocoa/bookmark_bubble_window_unittest.mm +++ b/chrome/browser/cocoa/bookmark_bubble_window_unittest.mm @@ -5,24 +5,21 @@ #include "base/scoped_ptr.h" #include "chrome/browser/cocoa/cocoa_test_helper.h" #include "chrome/browser/cocoa/bookmark_bubble_window.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "testing/platform_test.h" -class BookmarkBubbleWindowTest : public PlatformTest { - public: - CocoaTestHelper cocoa_helper_; +class BookmarkBubbleWindowTest : public CocoaTest { }; TEST_F(BookmarkBubbleWindowTest, Basics) { - scoped_nsobject<BookmarkBubbleWindow> window_; - window_.reset([[BookmarkBubbleWindow alloc] - initWithContentRect:NSMakeRect(0,0,10,10)]); + BookmarkBubbleWindow* window = + [[BookmarkBubbleWindow alloc] initWithContentRect:NSMakeRect(0, 0, 10, 10) + styleMask:NSBorderlessWindowMask + backing:NSBackingStoreBuffered + defer:NO]; + EXPECT_TRUE([window canBecomeKeyWindow]); + EXPECT_FALSE([window canBecomeMainWindow]); - EXPECT_TRUE([window_ canBecomeKeyWindow]); - EXPECT_FALSE([window_ canBecomeMainWindow]); - - EXPECT_TRUE([window_ isExcludedFromWindowsMenu]); - EXPECT_FALSE([window_ isReleasedWhenClosed]); + EXPECT_TRUE([window isExcludedFromWindowsMenu]); + [window close]; } diff --git a/chrome/browser/cocoa/browser_window_controller.h b/chrome/browser/cocoa/browser_window_controller.h index 1be8fbc..d74e3a8 100644 --- a/chrome/browser/cocoa/browser_window_controller.h +++ b/chrome/browser/cocoa/browser_window_controller.h @@ -50,14 +50,9 @@ class TabStripModelObserverBridge; // The ordering of these members is important as it determines the order in // which they are destroyed. |browser_| needs to be destroyed last as most of // the other objects hold weak references to it or things it owns - // (tab/toolbar/bookmark models, profiles, etc). We hold a strong ref to the - // window so that it will live after the NSWindowController dealloc has run - // (which happens *before* these scoped pointers are torn down). Keeping it - // alive ensures that weak view or window pointers remain valid through - // their destruction sequence. + // (tab/toolbar/bookmark models, profiles, etc). scoped_ptr<Browser> browser_; - scoped_nsobject<ChromeBrowserWindow> window_; - scoped_nsobject<NSWindow> fullscreen_window_; + NSWindow* savedRegularWindow_; scoped_ptr<TabStripModelObserverBridge> tabObserver_; scoped_ptr<BrowserWindowCocoa> windowShim_; scoped_nsobject<ToolbarController> toolbarController_; @@ -65,14 +60,21 @@ class TabStripModelObserverBridge; scoped_nsobject<TabStripController> tabStripController_; scoped_nsobject<FindBarCocoaController> findBarCocoaController_; scoped_nsobject<InfoBarContainerController> infoBarContainerController_; - scoped_ptr<StatusBubbleMac> statusBubble_; scoped_nsobject<DownloadShelfController> downloadShelfController_; scoped_nsobject<ExtensionShelfController> extensionShelfController_; scoped_nsobject<BookmarkBarController> bookmarkBarController_; - scoped_nsobject<BookmarkBubbleController> bookmarkBubbleController_; + + // Strong. StatusBubble is a special case of a strong reference that + // we don't wrap in a scoped_ptr because it is acting the same + // as an NSWindowController in that it wraps a window that must + // be shut down before our destructors are called. + StatusBubbleMac* statusBubble_; + + // Strong. We don't wrap it in scoped_nsobject because we must close + // it appropriately in [windowWillClose:]. + BookmarkBubbleController* bookmarkBubbleController_; scoped_nsobject<GTMTheme> theme_; BOOL ownsBrowser_; // Only ever NO when testing - BOOL fullscreen_; CGFloat verticalOffsetForStatusBubble_; } diff --git a/chrome/browser/cocoa/browser_window_controller.mm b/chrome/browser/cocoa/browser_window_controller.mm index 7edf5b4..adfbb3e 100644 --- a/chrome/browser/cocoa/browser_window_controller.mm +++ b/chrome/browser/cocoa/browser_window_controller.mm @@ -61,10 +61,6 @@ const int kWindowGradientHeight = 24; // Note: These functions are private, use -[NSObject respondsToSelector:] // before calling them. -- (void)setAutorecalculatesContentBorderThickness:(BOOL)b - forEdge:(NSRectEdge)e; -- (void)setContentBorderThickness:(CGFloat)b forEdge:(NSRectEdge)e; - - (void)setBottomCornerRounded:(BOOL)rounded; - (NSRect)_growBoxRect; @@ -117,18 +113,14 @@ willPositionSheet:(NSWindow*)sheet ownsBrowser_ = ownIt; tabObserver_.reset( new TabStripModelObserverBridge(browser->tabstrip_model(), self)); - windowShim_.reset(new BrowserWindowCocoa(browser, self, [self window])); + NSWindow* window = [self window]; + windowShim_.reset(new BrowserWindowCocoa(browser, self, window)); - // The window is now fully realized and |-windowDidLoad:| has been - // called. We shouldn't do much in wDL because |windowShim_| won't yet - // be initialized (as it's called in response to |[self window]| above). - // Retain it per the comment in the header. - window_.reset([[self window] retain]); // Sets the window to not have rounded corners, which prevents // the resize control from being inset slightly and looking ugly. - if ([window_ respondsToSelector:@selector(setBottomCornerRounded:)]) - [window_ setBottomCornerRounded:NO]; + if ([window respondsToSelector:@selector(setBottomCornerRounded:)]) + [window setBottomCornerRounded:NO]; [self setTheme]; @@ -223,7 +215,7 @@ willPositionSheet:(NSWindow*)sheet [self layoutSubviews]; // Create the bridge for the status bubble. - statusBubble_.reset(new StatusBubbleMac([self window], self)); + statusBubble_ = new StatusBubbleMac([self window], self); } return self; } @@ -235,10 +227,6 @@ willPositionSheet:(NSWindow*)sheet // Under certain testing configurations we may not actually own the browser. if (ownsBrowser_ == NO) browser_.release(); - // Since |window_| outlives our obj-c shutdown sequence, clear out the - // delegate so nothing tries to call us back in the meantime as part of - // window destruction. - [window_ setDelegate:nil]; [super dealloc]; } @@ -252,7 +240,13 @@ willPositionSheet:(NSWindow*)sheet [NSApp removeWindowsItem:[self window]]; // We need the window to go away now. - [self autorelease]; + // We can't actually use |-autorelease| here because there's an embedded + // run loop in the |-performClose:| which contains its own autorelease pool. + // Instead we use call it after a zero-length delay, which gets us back + // to the main event loop. + [self performSelector:@selector(autorelease) + withObject:nil + afterDelay:0]; } // Called when the window meets the criteria to be closed (ie, @@ -260,16 +254,14 @@ willPositionSheet:(NSWindow*)sheet // semantics of BrowserWindow::Close() and not call the Browser's dtor directly // from this method. - (void)windowWillClose:(NSNotification*)notification { - // Don't update the window any longer. - // TODO(shess,dmaclach): This is a work-around for some cases where - // the window's views were living longer than this controller, and - // were then being re-displayed. Better would be to have it live - // the appropriate amount of time, at which point we can remove - // this. [And perhaps the funky -autorelease below can be fixed.] - [window_ setAutodisplay:NO]; - + DCHECK_EQ([notification object], [self window]); DCHECK(!browser_->tabstrip_model()->count()); - + [savedRegularWindow_ close]; + [bookmarkBubbleController_ close]; + // We delete statusBubble here because we need to kill off the dependency + // that its window has on our window before our window goes away. + delete statusBubble_; + statusBubble_ = NULL; // We can't actually use |-autorelease| here because there's an embedded // run loop in the |-performClose:| which contains its own autorelease pool. // Instead we call it after a zero-length delay, which gets us back @@ -351,8 +343,7 @@ willPositionSheet:(NSWindow*)sheet // message, since it just means that a menu extra (on the "system status bar") // was activated; we'll get another |-windowDidResignKey| if we ever really // lose key window status. - if ([NSApp isActive] && - ([NSApp keyWindow] == static_cast<NSWindow*>(window_))) + if ([NSApp isActive] && ([NSApp keyWindow] == [self window])) return; // We need to deactivate the controls (in the "WebView"). To do this, get the @@ -425,6 +416,10 @@ willPositionSheet:(NSWindow*)sheet return frame; } +- (void)activate { + [[self window] makeKeyAndOrderFront:self]; +} + // Determine whether we should let a window zoom/unzoom to the given |newFrame|. // We avoid letting unzoom move windows between screens, because it's really // strange and unintuitive. @@ -643,7 +638,7 @@ willPositionSheet:(NSWindow*)sheet } - (StatusBubbleMac*)statusBubble { - return statusBubble_.get(); + return statusBubble_; } - (void)updateToolbarWithContents:(TabContents*)tab @@ -660,13 +655,14 @@ willPositionSheet:(NSWindow*)sheet // in the coordinate system of the content area of the currently selected tab. // |windowGrowBox| needs to be in the window's coordinate system. - (NSRect)selectedTabGrowBoxRect { - if (![window_ respondsToSelector:@selector(_growBoxRect)]) + NSWindow* window = [self window]; + if (![window respondsToSelector:@selector(_growBoxRect)]) return NSZeroRect; // Before we return a rect, we need to convert it from window coordinates // to tab content area coordinates and flip the coordinate system. NSRect growBoxRect = - [[self tabContentArea] convertRect:[window_ _growBoxRect] fromView:nil]; + [[self tabContentArea] convertRect:[window _growBoxRect] fromView:nil]; growBoxRect.origin.y = [[self tabContentArea] frame].size.height - growBoxRect.size.height - growBoxRect.origin.y; @@ -769,17 +765,6 @@ willPositionSheet:(NSWindow*)sheet [toolbarController_ setIsLoading:isLoading]; } -- (void)activate { - // TODO(rohitrao): Figure out the proper activation behavior for fullscreen - // windows. When there is only one window open, this code makes sense, but - // what should we do if we need to activate a non-fullscreen background window - // while a fullscreen window has focus? http://crbug.com/24893 - if (fullscreen_) - [fullscreen_window_ makeKeyAndOrderFront:self]; - else - [window_ makeKeyAndOrderFront:self]; -} - // Make the location bar the first responder, if possible. - (void)focusLocationBar { [toolbarController_ focusLocationBar]; @@ -934,64 +919,48 @@ willPositionSheet:(NSWindow*)sheet if (![self supportsFullscreen]) return; - fullscreen_ = fullscreen; + NSWindow* window = [self window]; + + // Retain the contentView while we remove it from its superview. + scoped_nsobject<NSView> content([[window contentView] retain]); + + // Disable autoresizing of subviews while we move views around. This + // prevents spurious renderer resizes. + [content setAutoresizesSubviews:NO]; + [content removeFromSuperview]; + + NSWindow* dstWindow = nil; if (fullscreen) { - // Move content to a new fullscreen window - NSView* content = [[self window] contentView]; - // Disable autoresizing of subviews while we move views around. This - // prevents spurious renderer resizes. - [content setAutoresizesSubviews:NO]; - fullscreen_window_.reset([[self fullscreenWindow] retain]); - [content removeFromSuperview]; - [fullscreen_window_ setContentView:content]; - [self setWindow:fullscreen_window_.get()]; - [window_ setWindowController:nil]; - [window_ setDelegate:nil]; - // Required for proper event dispatch. - [fullscreen_window_ setWindowController:self]; - [fullscreen_window_ setDelegate:self]; - - // Minimize our UI. This call triggers a relayout, so it needs to come - // after we move the contentview to the new window. - [self adjustUIForFullscreen:fullscreen]; - // Show one window, hide the other. - [fullscreen_window_ makeKeyAndOrderFront:self]; - [content setAutoresizesSubviews:YES]; - [content setNeedsDisplay:YES]; - [window_ orderOut:self]; + DCHECK(!savedRegularWindow_); + savedRegularWindow_ = [window retain]; + dstWindow = [self fullscreenWindow]; } else { - NSView* content = [fullscreen_window_ contentView]; - // Disable autoresizing of subviews while we move views around. This - // prevents spurious renderer resizes. - [content setAutoresizesSubviews:NO]; - [content removeFromSuperview]; - [window_ setContentView:content]; - [fullscreen_window_ setDelegate:nil]; - [fullscreen_window_ setWindowController:nil]; - [window_ setWindowController:self]; - [window_ setDelegate:self]; - [self setWindow:window_.get()]; - // This call triggers a relayout, so it needs to come after we move the - // contentview to the new window. - [self adjustUIForFullscreen:fullscreen]; - [content setAutoresizesSubviews:YES]; - [content setNeedsDisplay:YES]; - - // With this call, valgrind yells at me about "Conditional jump or - // move depends on uninitialised value(s)". The error happens in - // -[NSThemeFrame drawOverlayRect:]. I'm pretty convinced this is - // an Apple bug, but there is no visual impact. I have been - // unable to tickle it away with other window or view manipulation - // Cocoa calls. Stack added to suppressions_mac.txt. - [window_ makeKeyAndOrderFront:self]; - - [fullscreen_window_ close]; - fullscreen_window_.reset(nil); + DCHECK(savedRegularWindow_); + dstWindow = [savedRegularWindow_ autorelease]; + savedRegularWindow_ = nil; } + + // With this call, valgrind yells at me about "Conditional jump or + // move depends on uninitialised value(s)". The error happens in + // -[NSThemeFrame drawOverlayRect:]. I'm pretty convinced this is + // an Apple bug, but there is no visual impact. I have been + // unable to tickle it away with other window or view manipulation + // Cocoa calls. Stack added to suppressions_mac.txt. + [content setAutoresizesSubviews:YES]; + [dstWindow setContentView:content]; + [window setWindowController:nil]; + [window setDelegate:nil]; + [self setWindow:dstWindow]; + [dstWindow setWindowController:self]; + [dstWindow setDelegate:self]; + [self adjustUIForFullscreen:fullscreen]; + [dstWindow makeKeyAndOrderFront:self]; + + [window orderOut:self]; } - (BOOL)isFullscreen { - return fullscreen_; + return savedRegularWindow_ != nil; } // Called by the bookmark bar to open a URL. @@ -1094,25 +1063,37 @@ willPositionSheet:(NSWindow*)sheet // Show the bookmark bubble (e.g. user just clicked on the STAR). - (void)showBookmarkBubbleForURL:(const GURL&)url alreadyBookmarked:(BOOL)alreadyBookmarked { - BookmarkModel* model = browser_->profile()->GetBookmarkModel(); - const BookmarkNode* node = model->GetMostRecentlyAddedNodeForURL(url); - - // Bring up the bubble. But clicking on STAR while the bubble is - // open should make it go away. - if (bookmarkBubbleController_.get()) { - [self doneWithBubbleController:bookmarkBubbleController_.get()]; - } else { - bookmarkBubbleController_.reset([[BookmarkBubbleController alloc] - initWithDelegate:self - parentWindow:[self window] - topLeftForBubble:[self topLeftForBubble] - model:model - node:node - alreadyBookmarked:alreadyBookmarked]); - [bookmarkBubbleController_ showWindow]; + if (!bookmarkBubbleController_) { + BookmarkModel* model = browser_->profile()->GetBookmarkModel(); + const BookmarkNode* node = model->GetMostRecentlyAddedNodeForURL(url); + NSPoint topLeft = [self topLeftForBubble]; + bookmarkBubbleController_ = + [[BookmarkBubbleController alloc] initWithDelegate:self + parentWindow:[self window] + topLeftForBubble:topLeft + model:model + node:node + alreadyBookmarked:alreadyBookmarked]; + NSWindow* bookmarkBubbleWindow = [bookmarkBubbleController_ window]; + NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; + [nc addObserver:self + selector:@selector(bubbleWindowWillClose:) + name:NSWindowWillCloseNotification + object:bookmarkBubbleWindow]; + [bookmarkBubbleController_ showWindow:self]; } } +// Notification sent when our bubble window is closed. +- (void)bubbleWindowWillClose:(NSNotification*)notification { + DCHECK([[notification object] windowController] == bookmarkBubbleController_); + NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; + [nc removeObserver:self + name:NSWindowWillCloseNotification + object:[bookmarkBubbleController_ window]]; + bookmarkBubbleController_ = nil; +} + // Implement BookmarkBubbleControllerDelegate - (void)editBookmarkNode:(const BookmarkNode*)node { // A BookmarkEditorController is a sheet that owns itself, and @@ -1127,17 +1108,14 @@ willPositionSheet:(NSWindow*)sheet runAsModalSheet]; } -// Implement BookmarkBubbleControllerDelegate -- (void)doneWithBubbleController:(BookmarkBubbleController*)controller { - bookmarkBubbleController_.reset(nil); -} // Delegate method called when window is resized. - (void)windowDidResize:(NSNotification*)notification { // Resize (and possibly move) the status bubble. Note that we may get called // when the status bubble does not exist. - if (statusBubble_.get()) + if (statusBubble_) { statusBubble_->UpdateSizeAndPosition(); + } } @end @@ -1296,25 +1274,27 @@ willPositionSheet:(NSWindow*)sheet // the entire content area. Otherwise, this method places the topmost view // directly beneath the tabstrip. - (void)layoutSubviews { - NSView* contentView = fullscreen_ ? [fullscreen_window_ contentView] - : [[self window] contentView]; + NSWindow* window = [self window]; + NSView* contentView = [window contentView]; NSRect contentFrame = [contentView frame]; int maxY = NSMaxY(contentFrame); int minY = NSMinY(contentFrame); - if (!fullscreen_ && [self isNormalWindow]) { + if (![self isFullscreen] && [self isNormalWindow]) { maxY = NSMinY([[self tabStripView] frame]); } DCHECK_GE(maxY, minY); // Suppress title drawing for normal windows (popups use normal // window title bars). - [window_ setShouldHideTitle:[self isNormalWindow]]; + if ([window respondsToSelector:@selector(setShouldHideTitle:)]) { + [(id)window setShouldHideTitle:[self isNormalWindow]]; + } // Place the toolbar at the top of the reserved area, but only if we're not in // fullscreen mode. NSView* toolbarView = [toolbarController_ view]; NSRect toolbarFrame = [toolbarView frame]; - if (!fullscreen_) { + if (![self isFullscreen]) { // The toolbar is present in the window, so we make room for it. toolbarFrame.origin.x = 0; toolbarFrame.origin.y = maxY - NSHeight(toolbarFrame); diff --git a/chrome/browser/cocoa/browser_window_controller_unittest.mm b/chrome/browser/cocoa/browser_window_controller_unittest.mm index 4df1482..5533453 100644 --- a/chrome/browser/cocoa/browser_window_controller_unittest.mm +++ b/chrome/browser/cocoa/browser_window_controller_unittest.mm @@ -6,6 +6,7 @@ #include "base/scoped_nsautorelease_pool.h" #include "base/scoped_ptr.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_window.h" #include "chrome/browser/cocoa/browser_test_helper.h" #include "chrome/browser/cocoa/browser_window_controller.h" #include "chrome/browser/cocoa/cocoa_test_helper.h" @@ -14,7 +15,6 @@ #include "chrome/common/pref_service.h" #include "chrome/test/testing_browser_process.h" #include "chrome/test/testing_profile.h" -#include "testing/gtest/include/gtest/gtest.h" @interface BrowserWindowController (JustForTesting) // Already defined in BWC. @@ -57,21 +57,23 @@ } @end -class BrowserWindowControllerTest : public testing::Test { +class BrowserWindowControllerTest : public CocoaTest { + public: virtual void SetUp() { - controller_.reset([[BrowserWindowController alloc] - initWithBrowser:browser_helper_.browser() - takeOwnership:NO]); + CocoaTest::SetUp(); + Browser* browser = browser_helper_.browser(); + controller_ = [[BrowserWindowController alloc] initWithBrowser:browser + takeOwnership:NO]; + } + + virtual void TearDown() { + [controller_ close]; + CocoaTest::TearDown(); } public: - // Order is very important here. We want the controller deleted - // before the pool, and want the pool deleted before - // BrowserTestHelper. - CocoaTestHelper cocoa_helper_; BrowserTestHelper browser_helper_; - base::ScopedNSAutoreleasePool pool_; - scoped_nsobject<BrowserWindowController> controller_; + BrowserWindowController* controller_; }; TEST_F(BrowserWindowControllerTest, TestSaveWindowPosition) { @@ -89,70 +91,12 @@ TEST_F(BrowserWindowControllerTest, TestSaveWindowPosition) { EXPECT_TRUE(prefs->GetDictionary(prefs::kBrowserWindowPlacement) != NULL); } -@interface BrowserWindowControllerFakeFullscreen : BrowserWindowController { - @private - // We release the window ourselves, so we don't have to rely on the unittest - // doing it for us. - scoped_nsobject<NSWindow> fullscreenWindow_; -} -@end -@implementation BrowserWindowControllerFakeFullscreen -// Override fullscreenWindow to return a dummy window. This isn't needed to -// pass the test, but because the dummy window is only 100x100, it prevents the -// real fullscreen window from flashing up and taking over the whole screen.. -// We have to return an actual window because layoutSubviews: looks at the -// window's frame. -- (NSWindow*)fullscreenWindow { - if (fullscreenWindow_.get()) - return fullscreenWindow_.get(); - - fullscreenWindow_.reset( - [[NSWindow alloc] initWithContentRect:NSMakeRect(0,0,400,400) - styleMask:NSBorderlessWindowMask - backing:NSBackingStoreBuffered - defer:NO]); - [fullscreenWindow_ setReleasedWhenClosed:NO]; - return fullscreenWindow_.get(); -} -@end - -TEST_F(BrowserWindowControllerTest, TestFullscreen) { - // Note use of "controller", not "controller_" - scoped_nsobject<BrowserWindowController> controller; - controller.reset([[BrowserWindowControllerFakeFullscreen alloc] - initWithBrowser:browser_helper_.browser() - takeOwnership:NO]); - EXPECT_FALSE([controller isFullscreen]); - [controller setFullscreen:YES]; - EXPECT_TRUE([controller isFullscreen]); - [controller setFullscreen:NO]; - EXPECT_FALSE([controller isFullscreen]); - - // Confirm the real fullscreen command doesn't return nil +TEST_F(BrowserWindowControllerTest, TestFullScreenWindow) { + // Confirm the fullscreen command doesn't return nil. + // See BrowserWindowFullScreenControllerTest for more fullscreen tests. EXPECT_TRUE([controller_ fullscreenWindow]); } -TEST_F(BrowserWindowControllerTest, TestActivate) { - // Note use of "controller", not "controller_" - scoped_nsobject<BrowserWindowController> controller; - controller.reset([[BrowserWindowControllerFakeFullscreen alloc] - initWithBrowser:browser_helper_.browser() - takeOwnership:NO]); - EXPECT_FALSE([controller isFullscreen]); - - [controller activate]; - NSWindow* frontmostWindow = [[NSApp orderedWindows] objectAtIndex:0]; - EXPECT_EQ(frontmostWindow, [controller window]); - - [controller setFullscreen:YES]; - [controller activate]; - frontmostWindow = [[NSApp orderedWindows] objectAtIndex:0]; - EXPECT_EQ(frontmostWindow, [controller fullscreenWindow]); - - // We have to cleanup after ourselves by unfullscreening. - [controller setFullscreen:NO]; -} - TEST_F(BrowserWindowControllerTest, TestNormal) { // Force the bookmark bar to be shown. browser_helper_.profile()->GetPrefs()-> @@ -163,18 +107,15 @@ TEST_F(BrowserWindowControllerTest, TestNormal) { EXPECT_TRUE([controller_ isBookmarkBarVisible]); // And make sure a controller for a pop-up window is not normal. - scoped_ptr<Browser> popup_browser(Browser::CreateForPopup( - browser_helper_.profile())); - controller_.reset([[BrowserWindowController alloc] - initWithBrowser:popup_browser.get() - takeOwnership:NO]); - EXPECT_FALSE([controller_ isNormalWindow]); - EXPECT_FALSE([controller_ isBookmarkBarVisible]); - - // The created BrowserWindowController gets autoreleased, so make - // sure we don't also release it. - // (Confirmed with valgrind). - controller_.release(); + // popup_browser will be owned by its window. + Browser *popup_browser(Browser::CreateForPopup(browser_helper_.profile())); + NSWindow *cocoaWindow = popup_browser->window()->GetNativeHandle(); + BrowserWindowController* controller = + static_cast<BrowserWindowController*>([cocoaWindow windowController]); + ASSERT_TRUE([controller isKindOfClass:[BrowserWindowController class]]); + EXPECT_FALSE([controller isNormalWindow]); + EXPECT_FALSE([controller isBookmarkBarVisible]); + [controller close]; } @interface GTMTheme (BrowserThemeProviderInitialization) @@ -470,23 +411,93 @@ TEST_F(BrowserWindowControllerTest, TestZoomFrame) { TEST_F(BrowserWindowControllerTest, TestFindBarOnTop) { FindBarBridge bridge; - [controller_.get() addFindBar:bridge.find_bar_cocoa_controller()]; + [controller_ addFindBar:bridge.find_bar_cocoa_controller()]; // Test that the Z-order of the find bar is on top of everything. - NSArray* subviews = [[[controller_.get() window] contentView] subviews]; + NSArray* subviews = [[[controller_ window] contentView] subviews]; NSUInteger findBar_index = - [subviews indexOfObject:[controller_.get() findBarView]]; + [subviews indexOfObject:[controller_ findBarView]]; EXPECT_NE(NSNotFound, findBar_index); NSUInteger toolbar_index = - [subviews indexOfObject:[controller_.get() toolbarView]]; + [subviews indexOfObject:[controller_ toolbarView]]; EXPECT_NE(NSNotFound, toolbar_index); NSUInteger bookmark_index = - [subviews indexOfObject:[controller_.get() bookmarkView]]; + [subviews indexOfObject:[controller_ bookmarkView]]; EXPECT_NE(NSNotFound, bookmark_index); EXPECT_GT(findBar_index, toolbar_index); EXPECT_GT(findBar_index, bookmark_index); } +@interface BrowserWindowControllerFakeFullscreen : BrowserWindowController { + @private + // We release the window ourselves, so we don't have to rely on the unittest + // doing it for us. + scoped_nsobject<NSWindow> fullscreenWindow_; +} +@end + +class BrowserWindowFullScreenControllerTest : public CocoaTest { + public: + virtual void SetUp() { + CocoaTest::SetUp(); + Browser* browser = browser_helper_.browser(); + controller_ = + [[BrowserWindowControllerFakeFullscreen alloc] initWithBrowser:browser + takeOwnership:NO]; + } + + virtual void TearDown() { + [controller_ close]; + CocoaTest::TearDown(); + } + + public: + BrowserTestHelper browser_helper_; + BrowserWindowController* controller_; +}; + +TEST_F(BrowserWindowFullScreenControllerTest, TestFullscreen) { + EXPECT_FALSE([controller_ isFullscreen]); + [controller_ setFullscreen:YES]; + EXPECT_TRUE([controller_ isFullscreen]); + [controller_ setFullscreen:NO]; + EXPECT_FALSE([controller_ isFullscreen]); +} + +TEST_F(BrowserWindowFullScreenControllerTest, TestActivate) { + EXPECT_FALSE([controller_ isFullscreen]); + + [controller_ activate]; + NSWindow* frontmostWindow = [[NSApp orderedWindows] objectAtIndex:0]; + EXPECT_EQ(frontmostWindow, [controller_ window]); + + [controller_ setFullscreen:YES]; + [controller_ activate]; + frontmostWindow = [[NSApp orderedWindows] objectAtIndex:0]; + EXPECT_EQ(frontmostWindow, [controller_ fullscreenWindow]); + + // We have to cleanup after ourselves by unfullscreening. + [controller_ setFullscreen:NO]; +} + +@implementation BrowserWindowControllerFakeFullscreen +// Override fullscreenWindow to return a dummy window. This isn't needed to +// pass the test, but because the dummy window is only 100x100, it prevents the +// real fullscreen window from flashing up and taking over the whole screen.. +// We have to return an actual window because layoutSubviews: looks at the +// window's frame. +- (NSWindow*)fullscreenWindow { + if (fullscreenWindow_.get()) + return fullscreenWindow_.get(); + + fullscreenWindow_.reset( + [[NSWindow alloc] initWithContentRect:NSMakeRect(0,0,400,400) + styleMask:NSBorderlessWindowMask + backing:NSBackingStoreBuffered + defer:NO]); + return fullscreenWindow_.get(); +} +@end /* TODO(???): test other methods of BrowserWindowController */ diff --git a/chrome/browser/cocoa/bubble_view_unittest.mm b/chrome/browser/cocoa/bubble_view_unittest.mm index 2c949b5..d4179af 100644 --- a/chrome/browser/cocoa/bubble_view_unittest.mm +++ b/chrome/browser/cocoa/bubble_view_unittest.mm @@ -2,48 +2,34 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import <Cocoa/Cocoa.h> #include "base/scoped_nsobject.h" #import "chrome/browser/cocoa/bubble_view.h" #include "chrome/browser/cocoa/cocoa_test_helper.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "testing/platform_test.h" -class BubbleViewTest : public PlatformTest { +class BubbleViewTest : public CocoaTest { public: BubbleViewTest() { NSRect frame = NSMakeRect(0, 0, 50, 50); - view_.reset([[BubbleView alloc] initWithFrame:frame - themeProvider:cocoa_helper_.window()]); - [cocoa_helper_.contentView() addSubview:view_.get()]; + scoped_nsobject<BubbleView> view( + [[BubbleView alloc] initWithFrame:frame themeProvider:test_window()]); + view_ = view.get(); + [[test_window() contentView] addSubview:view_]; [view_ setContent:@"Hi there, I'm a bubble view"]; } - CocoaTestHelper cocoa_helper_; - scoped_nsobject<BubbleView> view_; + BubbleView* view_; }; -// Test adding/removing from the view hierarchy, mostly to ensure nothing -// leaks or crashes. -TEST_F(BubbleViewTest, AddRemove) { - EXPECT_EQ(cocoa_helper_.contentView(), [view_ superview]); - [view_.get() removeFromSuperview]; - EXPECT_FALSE([view_ superview]); -} - -// Test drawing, mostly to ensure nothing leaks or crashes. -TEST_F(BubbleViewTest, Display) { - [view_ display]; -} +TEST_VIEW(BubbleViewTest, view_); // Test a nil themeProvider in init. TEST_F(BubbleViewTest, NilThemeProvider) { NSRect frame = NSMakeRect(0, 0, 50, 50); - view_.reset([[BubbleView alloc] initWithFrame:frame - themeProvider:nil]); - [cocoa_helper_.contentView() addSubview:view_.get()]; - [view_ display]; + scoped_nsobject<BubbleView> view( + [[BubbleView alloc] initWithFrame:frame themeProvider:nil]); + [[test_window() contentView] addSubview:view.get()]; + [view display]; } // Make sure things don't go haywire when given invalid or long strings. diff --git a/chrome/browser/cocoa/cocoa_test_helper.h b/chrome/browser/cocoa/cocoa_test_helper.h index f980790..5b05505 100644 --- a/chrome/browser/cocoa/cocoa_test_helper.h +++ b/chrome/browser/cocoa/cocoa_test_helper.h @@ -105,15 +105,15 @@ class CocoaTest : public PlatformTest { // displaying the view to make sure it won't crash, as well as removing it // from a window. All tests that work with NSView subclasses and/or // NSViewController subclasses should use it. -#define TEST_VIEW(test_fixture, view_member_name) \ +#define TEST_VIEW(test_fixture, test_view) \ TEST_F(test_fixture, AddRemove##test_fixture) { \ - scoped_nsobject<NSView> view([view_member_name retain]); \ - EXPECT_EQ([test_window() contentView], [view_member_name superview]); \ - [view_member_name removeFromSuperview]; \ - EXPECT_FALSE([view_member_name superview]); \ + scoped_nsobject<NSView> view([test_view retain]); \ + EXPECT_EQ([test_window() contentView], [view superview]); \ + [view removeFromSuperview]; \ + EXPECT_FALSE([view superview]); \ } \ TEST_F(test_fixture, Display##test_fixture) { \ - [view_member_name display]; \ + [test_view display]; \ } // The classes below are deprecated and will be removed shortly. Do not write diff --git a/chrome/browser/cocoa/sad_tab_view_unittest.mm b/chrome/browser/cocoa/sad_tab_view_unittest.mm index 382fdb6..7daddd3 100644 --- a/chrome/browser/cocoa/sad_tab_view_unittest.mm +++ b/chrome/browser/cocoa/sad_tab_view_unittest.mm @@ -20,6 +20,6 @@ class SadTabViewTest : public CocoaTest { SadTabView* view_; // Weak. Owned by the view hierarchy. }; -TEST_VIEW(SadTabViewTest, view_) +TEST_VIEW(SadTabViewTest, view_); } // namespace |