Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(373)

Side by Side Diff: chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet_controller_unittest.mm

Issue 420413002: Ensure dialogs are centered on browser windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: test works Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet_con troller.h" 5 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet_con troller.h"
6 6
7 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" 7 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
8 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sh eet.h" 8 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sh eet.h"
9 #import "testing/gtest_mac.h" 9 #import "testing/gtest_mac.h"
10 10
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 protected: 68 protected:
69 virtual ~ConstrainedWindowSheetControllerTest() { 69 virtual ~ConstrainedWindowSheetControllerTest() {
70 } 70 }
71 71
72 virtual void SetUp() OVERRIDE { 72 virtual void SetUp() OVERRIDE {
73 CocoaTest::SetUp(); 73 CocoaTest::SetUp();
74 74
75 // Center the window so that the sheet doesn't go offscreen. 75 // Center the window so that the sheet doesn't go offscreen.
76 [test_window() center]; 76 [test_window() center];
77 77
78 // The real view setup is quite a few levels deep; recreate something
79 // similar.
80 NSRect dummy_rect = NSMakeRect(0, 0, 50, 50);
81 tab_view_parent_ = [test_window() contentView];
82 for (int i = 0; i < 3; ++i) {
83 base::scoped_nsobject<NSView> new_view(
84 [[NSView alloc] initWithFrame:dummy_rect]);
85 [tab_view_parent_ addSubview:new_view.get()];
86 tab_view_parent_ = new_view.get();
87 }
88
78 // Create two dummy tabs and make the first one active. 89 // Create two dummy tabs and make the first one active.
79 NSRect dummyRect = NSMakeRect(0, 0, 50, 50);
80 tab_views_.reset([[NSMutableArray alloc] init]); 90 tab_views_.reset([[NSMutableArray alloc] init]);
81 for (int i = 0; i < 2; ++i) { 91 for (int i = 0; i < 2; ++i) {
82 base::scoped_nsobject<NSView> view( 92 base::scoped_nsobject<NSView> view(
83 [[NSView alloc] initWithFrame:dummyRect]); 93 [[NSView alloc] initWithFrame:dummy_rect]);
84 [tab_views_ addObject:view]; 94 [tab_views_ addObject:view];
85 } 95 }
86 tab0_.reset([[tab_views_ objectAtIndex:0] retain]); 96 tab0_ = [tab_views_ objectAtIndex:0];
87 tab1_.reset([[tab_views_ objectAtIndex:1] retain]); 97 tab1_ = [tab_views_ objectAtIndex:1];
88 ActivateTabView(tab0_); 98 ActivateTabView(tab0_);
89 99
90 // Create a test sheet. 100 // Create a test sheet.
91 sheet_window_.reset([[NSWindow alloc] 101 sheet_window_.reset([[NSWindow alloc]
92 initWithContentRect:dummyRect 102 initWithContentRect:dummy_rect
93 styleMask:NSTitledWindowMask 103 styleMask:NSTitledWindowMask
94 backing:NSBackingStoreBuffered 104 backing:NSBackingStoreBuffered
95 defer:NO]); 105 defer:NO]);
96 [sheet_window_ setReleasedWhenClosed:NO]; 106 [sheet_window_ setReleasedWhenClosed:NO];
97 sheet_.reset([[CustomConstrainedWindowSheet alloc] 107 sheet_.reset([[CustomConstrainedWindowSheet alloc]
98 initWithCustomWindow:sheet_window_]); 108 initWithCustomWindow:sheet_window_]);
99 109
100 controller_.reset([[ConstrainedWindowSheetController 110 controller_.reset([[ConstrainedWindowSheetController
101 controllerForParentWindow:test_window()] retain]); 111 controllerForParentWindow:test_window()] retain]);
102 EXPECT_TRUE(controller_); 112 EXPECT_TRUE(controller_);
103 EXPECT_FALSE([ConstrainedWindowSheetController controllerForSheet:sheet_]); 113 EXPECT_FALSE([ConstrainedWindowSheetController controllerForSheet:sheet_]);
104 } 114 }
105 115
106 virtual void TearDown() OVERRIDE { 116 virtual void TearDown() OVERRIDE {
107 sheet_.reset(); 117 sheet_.reset();
108 sheet_window_.reset(); 118 sheet_window_.reset();
109 CocoaTest::TearDown(); 119 CocoaTest::TearDown();
110 } 120 }
111 121
112 void ActivateTabView(NSView* tab_view) { 122 void ActivateTabView(NSView* tab_view) {
113 for (NSView* view in tab_views_.get()) { 123 for (NSView* view in tab_views_.get())
114 [view removeFromSuperview]; 124 [view removeFromSuperview];
115 } 125 [tab_view_parent_ addSubview:tab_view];
116 [[test_window() contentView] addSubview:tab_view]; 126 active_tab_view_ = tab_view;
117 active_tab_view_.reset([tab_view retain]);
118 127
119 ConstrainedWindowSheetController* controller = 128 ConstrainedWindowSheetController* controller =
120 [ConstrainedWindowSheetController 129 [ConstrainedWindowSheetController
121 controllerForParentWindow:test_window()]; 130 controllerForParentWindow:test_window()];
122 EXPECT_TRUE(controller); 131 EXPECT_TRUE(controller);
123 [controller parentViewDidBecomeActive:active_tab_view_]; 132 [controller parentViewDidBecomeActive:active_tab_view_];
124 } 133 }
125 134
126 NSRect GetViewFrameInScreenCoordinates(NSView* view) { 135 NSRect GetViewFrameInScreenCoordinates(NSView* view) {
127 NSRect rect = [view convertRect:[view bounds] toView:nil]; 136 NSRect rect = [view convertRect:[view bounds] toView:nil];
(...skipping 10 matching lines...) Expand all
138 147
139 CGFloat GetSheetYOffset(NSRect sheet_frame, NSView* parent_view) { 148 CGFloat GetSheetYOffset(NSRect sheet_frame, NSView* parent_view) {
140 return NSMaxY(sheet_frame) - 149 return NSMaxY(sheet_frame) -
141 NSMaxY(GetViewFrameInScreenCoordinates(parent_view)); 150 NSMaxY(GetViewFrameInScreenCoordinates(parent_view));
142 } 151 }
143 152
144 base::scoped_nsobject<NSWindow> sheet_window_; 153 base::scoped_nsobject<NSWindow> sheet_window_;
145 base::scoped_nsobject<CustomConstrainedWindowSheet> sheet_; 154 base::scoped_nsobject<CustomConstrainedWindowSheet> sheet_;
146 base::scoped_nsobject<ConstrainedWindowSheetController> controller_; 155 base::scoped_nsobject<ConstrainedWindowSheetController> controller_;
147 base::scoped_nsobject<NSMutableArray> tab_views_; 156 base::scoped_nsobject<NSMutableArray> tab_views_;
148 base::scoped_nsobject<NSView> active_tab_view_; 157 NSView* tab_view_parent_;
149 base::scoped_nsobject<NSView> tab0_; 158 NSView* active_tab_view_;
150 base::scoped_nsobject<NSView> tab1_; 159 NSView* tab0_;
160 NSView* tab1_;
151 }; 161 };
152 162
153 // Test showing then hiding the sheet. 163 // Test showing then hiding the sheet.
154 TEST_F(ConstrainedWindowSheetControllerTest, ShowHide) { 164 TEST_F(ConstrainedWindowSheetControllerTest, ShowHide) {
155 EXPECT_FALSE([sheet_window_ isVisible]); 165 EXPECT_FALSE([sheet_window_ isVisible]);
156 [controller_ showSheet:sheet_ forParentView:active_tab_view_]; 166 [controller_ showSheet:sheet_ forParentView:active_tab_view_];
157 EXPECT_TRUE([ConstrainedWindowSheetController controllerForSheet:sheet_]); 167 EXPECT_TRUE([ConstrainedWindowSheetController controllerForSheet:sheet_]);
158 EXPECT_TRUE([sheet_window_ isVisible]); 168 EXPECT_TRUE([sheet_window_ isVisible]);
159 169
160 [controller_ closeSheet:sheet_]; 170 [controller_ closeSheet:sheet_];
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 EXPECT_TRUE(controller2); 212 EXPECT_TRUE(controller2);
203 EXPECT_NSNE(controller_, controller2); 213 EXPECT_NSNE(controller_, controller2);
204 214
205 [controller2 showSheet:sheet_ forParentView:[parent_window2 contentView]]; 215 [controller2 showSheet:sheet_ forParentView:[parent_window2 contentView]];
206 EXPECT_NSEQ(controller2, 216 EXPECT_NSEQ(controller2,
207 [ConstrainedWindowSheetController controllerForSheet:sheet_]); 217 [ConstrainedWindowSheetController controllerForSheet:sheet_]);
208 218
209 [parent_window2 close]; 219 [parent_window2 close];
210 } 220 }
211 221
212 // Test that using a top level parent view works.
213 TEST_F(ConstrainedWindowSheetControllerTest, TopLevelView) {
214 NSView* parentView = [[test_window() contentView] superview];
215 [controller_ parentViewDidBecomeActive:parentView];
216
217 EXPECT_FALSE([sheet_window_ isVisible]);
218 [controller_ showSheet:sheet_ forParentView:parentView];
219 EXPECT_TRUE([ConstrainedWindowSheetController controllerForSheet:sheet_]);
220 EXPECT_TRUE([sheet_window_ isVisible]);
221 VerifySheetXPosition([sheet_window_ frame], parentView);
222 }
223
224 // Test that resizing sheet works. 222 // Test that resizing sheet works.
225 TEST_F(ConstrainedWindowSheetControllerTest, Resize) { 223 TEST_F(ConstrainedWindowSheetControllerTest, Resize) {
226 [controller_ showSheet:sheet_ forParentView:active_tab_view_]; 224 [controller_ showSheet:sheet_ forParentView:active_tab_view_];
227 225
228 NSRect old_frame = [sheet_window_ frame]; 226 NSRect old_frame = [sheet_window_ frame];
229 227
230 NSRect sheet_frame; 228 NSRect sheet_frame;
231 sheet_frame.size = NSMakeSize(NSWidth(old_frame) + 100, 229 sheet_frame.size = NSMakeSize(NSWidth(old_frame) + 100,
232 NSHeight(old_frame) + 50); 230 NSHeight(old_frame) + 50);
233 sheet_frame.origin = [controller_ originForSheet:sheet_ 231 sheet_frame.origin = [controller_ originForSheet:sheet_
(...skipping 28 matching lines...) Expand all
262 // Test resizing parent window keeps the sheet anchored. 260 // Test resizing parent window keeps the sheet anchored.
263 TEST_F(ConstrainedWindowSheetControllerTest, ResizeParentWindow) { 261 TEST_F(ConstrainedWindowSheetControllerTest, ResizeParentWindow) {
264 [controller_ showSheet:sheet_ forParentView:active_tab_view_]; 262 [controller_ showSheet:sheet_ forParentView:active_tab_view_];
265 CGFloat sheet_offset = 263 CGFloat sheet_offset =
266 GetSheetYOffset([sheet_window_ frame], active_tab_view_); 264 GetSheetYOffset([sheet_window_ frame], active_tab_view_);
267 265
268 // Test 3x3 different parent window sizes. 266 // Test 3x3 different parent window sizes.
269 CGFloat insets[] = {-10, 0, 10}; 267 CGFloat insets[] = {-10, 0, 10};
270 NSRect old_frame = [test_window() frame]; 268 NSRect old_frame = [test_window() frame];
271 269
272 for (size_t x = 0; x < sizeof(insets) / sizeof(CGFloat); x++) { 270 for (size_t x = 0; x < arraysize(insets); x++) {
273 for (size_t y = 0; y < sizeof(insets) / sizeof(CGFloat); y++) { 271 for (size_t y = 0; y < arraysize(insets); y++) {
274 NSRect resized_frame = NSInsetRect(old_frame, insets[x], insets[y]); 272 NSRect resized_frame = NSInsetRect(old_frame, insets[x], insets[y]);
275 [test_window() setFrame:resized_frame display:YES]; 273 [test_window() setFrame:resized_frame display:YES];
276 NSRect sheet_frame = [sheet_window_ frame]; 274 NSRect sheet_frame = [sheet_window_ frame];
277 275
278 // Y pos should track parent view's position. 276 // Y pos should track parent view's position.
279 EXPECT_EQ(sheet_offset, GetSheetYOffset(sheet_frame, active_tab_view_)); 277 EXPECT_EQ(sheet_offset, GetSheetYOffset(sheet_frame, active_tab_view_));
280 278
281 // X pos should be centered on parent view. 279 // X pos should be centered on parent view.
282 VerifySheetXPosition(sheet_frame, active_tab_view_); 280 VerifySheetXPosition(sheet_frame, active_tab_view_);
283 } 281 }
284 } 282 }
285 } 283 }
286 284
287 // Test system sheets. 285 // Test system sheets.
288 TEST_F(ConstrainedWindowSheetControllerTest, SystemSheet) { 286 TEST_F(ConstrainedWindowSheetControllerTest, SystemSheet) {
289 base::scoped_nsobject<ConstrainedWindowSystemSheetTest> system_sheet( 287 base::scoped_nsobject<ConstrainedWindowSystemSheetTest> system_sheet(
290 [[ConstrainedWindowSystemSheetTest alloc] init]); 288 [[ConstrainedWindowSystemSheetTest alloc] init]);
291 base::scoped_nsobject<NSAlert> alert([[NSAlert alloc] init]); 289 base::scoped_nsobject<NSAlert> alert([[NSAlert alloc] init]);
292 [system_sheet setAlert:alert]; 290 [system_sheet setAlert:alert];
293 291
294 EXPECT_FALSE([[alert window] isVisible]); 292 EXPECT_FALSE([[alert window] isVisible]);
295 [controller_ showSheet:system_sheet 293 [controller_ showSheet:system_sheet forParentView:active_tab_view_];
296 forParentView:active_tab_view_];
297 EXPECT_TRUE([[alert window] isVisible]); 294 EXPECT_TRUE([[alert window] isVisible]);
298 295
299 [controller_ closeSheet:system_sheet]; 296 [controller_ closeSheet:system_sheet];
300 EXPECT_FALSE([[alert window] isVisible]); 297 EXPECT_FALSE([[alert window] isVisible]);
301 EXPECT_EQ(kSystemSheetReturnCode, [system_sheet returnCode]); 298 EXPECT_EQ(kSystemSheetReturnCode, [system_sheet returnCode]);
302 } 299 }
303 300
304 // Test showing a system sheet on an inactive tab. 301 // Test showing a system sheet on an inactive tab.
305 TEST_F(ConstrainedWindowSheetControllerTest, SystemSheetAddToInactiveTab) { 302 TEST_F(ConstrainedWindowSheetControllerTest, SystemSheetAddToInactiveTab) {
306 base::scoped_nsobject<ConstrainedWindowSystemSheetTest> system_sheet( 303 base::scoped_nsobject<ConstrainedWindowSystemSheetTest> system_sheet(
307 [[ConstrainedWindowSystemSheetTest alloc] init]); 304 [[ConstrainedWindowSystemSheetTest alloc] init]);
308 base::scoped_nsobject<NSAlert> alert([[NSAlert alloc] init]); 305 base::scoped_nsobject<NSAlert> alert([[NSAlert alloc] init]);
309 [system_sheet setAlert:alert]; 306 [system_sheet setAlert:alert];
310 307
311 EXPECT_FALSE([[alert window] isVisible]); 308 EXPECT_FALSE([[alert window] isVisible]);
312 [controller_ showSheet:system_sheet 309 [controller_ showSheet:system_sheet forParentView:tab1_];
313 forParentView:tab1_];
314 EXPECT_FALSE([[alert window] isVisible]); 310 EXPECT_FALSE([[alert window] isVisible]);
315 311
316 ActivateTabView(tab1_); 312 ActivateTabView(tab1_);
317 EXPECT_TRUE([[alert window] isVisible]); 313 EXPECT_TRUE([[alert window] isVisible]);
318 EXPECT_EQ(1.0, [[alert window] alphaValue]); 314 EXPECT_EQ(1.0, [[alert window] alphaValue]);
319 315
320 [controller_ closeSheet:system_sheet]; 316 [controller_ closeSheet:system_sheet];
321 } 317 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698