| Index: chrome/browser/cocoa/browser_window_controller_unittest.mm | 
| =================================================================== | 
| --- chrome/browser/cocoa/browser_window_controller_unittest.mm	(revision 22499) | 
| +++ chrome/browser/cocoa/browser_window_controller_unittest.mm	(working copy) | 
| @@ -15,10 +15,28 @@ | 
| #include "chrome/test/testing_profile.h" | 
| #include "testing/gtest/include/gtest/gtest.h" | 
|  | 
| -@interface BrowserWindowController (ExposedForTesting) | 
| +@interface BrowserWindowController (JustForTesting) | 
| +// Already defined in BWC. | 
| - (void)saveWindowPositionToPrefs:(PrefService*)prefs; | 
| +- (void)layoutSubviews; | 
| @end | 
|  | 
| +@interface BrowserWindowController (ExposedForTesting) | 
| +// Implementations are below. | 
| +- (NSView*)infoBarContainerView; | 
| +- (NSView*)toolbarView; | 
| +@end | 
| + | 
| +@implementation BrowserWindowController (ExposedForTesting) | 
| +- (NSView*)infoBarContainerView { | 
| +  return [infoBarContainerController_ view]; | 
| +} | 
| + | 
| +- (NSView*)toolbarView { | 
| +  return [toolbarController_ view]; | 
| +} | 
| +@end | 
| + | 
| class BrowserWindowControllerTest : public testing::Test { | 
| virtual void SetUp() { | 
| controller_.reset([[BrowserWindowController alloc] | 
| @@ -132,4 +150,95 @@ | 
| } | 
| #endif | 
|  | 
| +@interface BrowserWindowControllerResizePong : BrowserWindowController { | 
| +} | 
| +@end | 
| + | 
| +@implementation BrowserWindowControllerResizePong | 
| +@end | 
| + | 
| +// Test to make sure resizing and relaying-out subviews works correctly. | 
| +TEST_F(BrowserWindowControllerTest, TestResizeViews) { | 
| +  TabStripView* tabstrip = [controller_ tabStripView]; | 
| +  NSView* contentView = [[tabstrip window] contentView]; | 
| +  NSView* toolbar = [controller_ toolbarView]; | 
| +  NSView* infobar = [controller_ infoBarContainerView]; | 
| +  NSView* contentArea = [controller_ tabContentArea]; | 
| + | 
| +  // We need to muck with the views a bit to put us in a consistent state before | 
| +  // we start resizing.  In particular, we need to move the tab strip to be | 
| +  // immediately above the content area, since we layout views to be directly | 
| +  // under the tab strip.  We also explicitly set the contentView's frame to be | 
| +  // 800x600. | 
| +  [contentView setFrame:NSMakeRect(0, 0, 800, 600)]; | 
| +  NSRect tabstripFrame = [tabstrip frame]; | 
| +  tabstripFrame.origin.y = NSMaxY([contentView frame]); | 
| +  [tabstrip setFrame:tabstripFrame]; | 
| + | 
| +  // Make sure each view is as tall as we expect. | 
| +  ASSERT_EQ(39, NSHeight([toolbar frame])); | 
| +  ASSERT_EQ(0, NSHeight([infobar frame])); | 
| + | 
| +  // Force a layout and check each view's frame. | 
| +  // contentView should be at 0,0 800x600 | 
| +  // contentArea should be at 0,0 800x561 | 
| +  // infobar should be at 0,561 800x0 | 
| +  // toolbar should be at 0,561 800x39 | 
| +  [controller_ layoutSubviews]; | 
| +  EXPECT_TRUE(NSEqualRects([contentView frame], NSMakeRect(0, 0, 800, 600))); | 
| +  EXPECT_TRUE(NSEqualRects([contentArea frame], NSMakeRect(0, 0, 800, 561))); | 
| +  EXPECT_TRUE(NSEqualRects([infobar frame], NSMakeRect(0, 561, 800, 0))); | 
| +  EXPECT_TRUE(NSEqualRects([toolbar frame], NSMakeRect(0, 561, 800, 39))); | 
| + | 
| +  // Expand the infobar to 60px and recheck | 
| +  // contentView should be at 0,0 800x600 | 
| +  // contentArea should be at 0,0 800x501 | 
| +  // infobar should be at 0,501 800x60 | 
| +  // toolbar should be at 0,561 800x39 | 
| +  [controller_ resizeView:infobar newHeight:60]; | 
| +  EXPECT_TRUE(NSEqualRects([contentView frame], NSMakeRect(0, 0, 800, 600))); | 
| +  EXPECT_TRUE(NSEqualRects([contentArea frame], NSMakeRect(0, 0, 800, 501))); | 
| +  EXPECT_TRUE(NSEqualRects([infobar frame], NSMakeRect(0, 501, 800, 60))); | 
| +  EXPECT_TRUE(NSEqualRects([toolbar frame], NSMakeRect(0, 561, 800, 39))); | 
| + | 
| +  // Expand the toolbar to 64px and recheck | 
| +  // contentView should be at 0,0 800x600 | 
| +  // contentArea should be at 0,0 800x476 | 
| +  // infobar should be at 0,476 800x60 | 
| +  // toolbar should be at 0,536 800x64 | 
| +  [controller_ resizeView:toolbar newHeight:64]; | 
| +  EXPECT_TRUE(NSEqualRects([contentView frame], NSMakeRect(0, 0, 800, 600))); | 
| +  EXPECT_TRUE(NSEqualRects([contentArea frame], NSMakeRect(0, 0, 800, 476))); | 
| +  EXPECT_TRUE(NSEqualRects([infobar frame], NSMakeRect(0, 476, 800, 60))); | 
| +  EXPECT_TRUE(NSEqualRects([toolbar frame], NSMakeRect(0, 536, 800, 64))); | 
| + | 
| +  // Add a 30px download shelf and recheck | 
| +  // contentView should be at 0,0 800x600 | 
| +  // download should be at 0,0 800x30 | 
| +  // contentArea should be at 0,30 800x446 | 
| +  // infobar should be at 0,476 800x60 | 
| +  // toolbar should be at 0,536 800x64 | 
| +  NSView* download = [[controller_ downloadShelf] view]; | 
| +  [controller_ resizeView:download newHeight:30]; | 
| +  EXPECT_TRUE(NSEqualRects([contentView frame], NSMakeRect(0, 0, 800, 600))); | 
| +  EXPECT_TRUE(NSEqualRects([download frame], NSMakeRect(0, 0, 800, 30))); | 
| +  EXPECT_TRUE(NSEqualRects([contentArea frame], NSMakeRect(0, 30, 800, 446))); | 
| +  EXPECT_TRUE(NSEqualRects([infobar frame], NSMakeRect(0, 476, 800, 60))); | 
| +  EXPECT_TRUE(NSEqualRects([toolbar frame], NSMakeRect(0, 536, 800, 64))); | 
| + | 
| +  // Shrink the infobar to 0px and toolbar to 39px and recheck | 
| +  // contentView should be at 0,0 800x600 | 
| +  // download should be at 0,0 800x30 | 
| +  // contentArea should be at 0,30 800x531 | 
| +  // infobar should be at 0,561 800x0 | 
| +  // toolbar should be at 0,561 800x39 | 
| +  [controller_ resizeView:infobar newHeight:0]; | 
| +  [controller_ resizeView:toolbar newHeight:39]; | 
| +  EXPECT_TRUE(NSEqualRects([contentView frame], NSMakeRect(0, 0, 800, 600))); | 
| +  EXPECT_TRUE(NSEqualRects([download frame], NSMakeRect(0, 0, 800, 30))); | 
| +  EXPECT_TRUE(NSEqualRects([contentArea frame], NSMakeRect(0, 30, 800, 531))); | 
| +  EXPECT_TRUE(NSEqualRects([infobar frame], NSMakeRect(0, 561, 800, 0))); | 
| +  EXPECT_TRUE(NSEqualRects([toolbar frame], NSMakeRect(0, 561, 800, 39))); | 
| +} | 
| + | 
| /* TODO(???): test other methods of BrowserWindowController */ | 
|  |