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

Side by Side Diff: chrome/browser/ui/cocoa/browser_window_controller_unittest.mm

Issue 419683008: mac: Toolbar renders incorrectly when downloads bar is open. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments from shess. Created 6 years, 5 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
« no previous file with comments | « chrome/browser/ui/cocoa/browser_window_controller_private.mm ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/browser_window_controller.h" 5 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
6 6
7 #include "base/mac/mac_util.h" 7 #include "base/mac/mac_util.h"
8 #import "base/mac/scoped_nsobject.h" 8 #import "base/mac/scoped_nsobject.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "chrome/app/chrome_command_ids.h" 12 #include "chrome/app/chrome_command_ids.h"
13 #include "chrome/browser/chrome_notification_types.h" 13 #include "chrome/browser/chrome_notification_types.h"
14 #include "chrome/browser/signin/fake_signin_manager.h" 14 #include "chrome/browser/signin/fake_signin_manager.h"
15 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 15 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
16 #include "chrome/browser/signin/signin_manager_factory.h" 16 #include "chrome/browser/signin/signin_manager_factory.h"
17 #include "chrome/browser/sync/profile_sync_service.h" 17 #include "chrome/browser/sync/profile_sync_service.h"
18 #include "chrome/browser/sync/profile_sync_service_factory.h" 18 #include "chrome/browser/sync/profile_sync_service_factory.h"
19 #include "chrome/browser/sync/profile_sync_service_mock.h" 19 #include "chrome/browser/sync/profile_sync_service_mock.h"
20 #include "chrome/browser/ui/browser_list.h" 20 #include "chrome/browser/ui/browser_list.h"
21 #include "chrome/browser/ui/browser_window.h" 21 #include "chrome/browser/ui/browser_window.h"
22 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" 22 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
23 #import "chrome/browser/ui/cocoa/fast_resize_view.h"
Scott Hess - ex-Googler 2014/07/25 23:59:05 This seems unlikely, now that I look at it.
erikchen 2014/07/26 00:12:16 Won't compile without it. FastResizeView is forwar
Scott Hess - ex-Googler 2014/07/26 00:21:27 Weird. So I'm guessing what you mean is that [con
23 #include "chrome/browser/ui/cocoa/find_bar/find_bar_bridge.h" 24 #include "chrome/browser/ui/cocoa/find_bar/find_bar_bridge.h"
24 #import "chrome/browser/ui/cocoa/nsview_additions.h" 25 #import "chrome/browser/ui/cocoa/nsview_additions.h"
25 #include "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" 26 #include "chrome/browser/ui/cocoa/tabs/tab_strip_view.h"
26 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" 27 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
27 #include "chrome/browser/ui/host_desktop.h" 28 #include "chrome/browser/ui/host_desktop.h"
28 #include "chrome/common/pref_names.h" 29 #include "chrome/common/pref_names.h"
29 #include "chrome/test/base/testing_profile.h" 30 #include "chrome/test/base/testing_profile.h"
30 #include "components/signin/core/browser/fake_auth_status_provider.h" 31 #include "components/signin/core/browser/fake_auth_status_provider.h"
31 #include "components/signin/core/browser/profile_oauth2_token_service.h" 32 #include "components/signin/core/browser/profile_oauth2_token_service.h"
32 #include "components/signin/core/browser/signin_error_controller.h" 33 #include "components/signin/core/browser/signin_error_controller.h"
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 [controller_ installIncognitoBadge]; 236 [controller_ installIncognitoBadge];
236 NSRect newTabFrame = [[controller_ tabStripView] frame]; 237 NSRect newTabFrame = [[controller_ tabStripView] frame];
237 EXPECT_GT(tabFrame.size.width, newTabFrame.size.width); 238 EXPECT_GT(tabFrame.size.width, newTabFrame.size.width);
238 239
239 controller_.release(); 240 controller_.release();
240 } 241 }
241 #endif 242 #endif
242 243
243 namespace { 244 namespace {
244 245
246 // Returns the frame of the view in window coordinates.
247 NSRect FrameInWindowForView(NSView* view) {
248 return [[view superview] convertRect:[view frame] toView:nil];
249 }
250
251 // Whether the view's frame is within the bounds of the superview.
252 BOOL ViewContainmentValid(NSView* view) {
253 if (NSIsEmptyRect([view frame]))
254 return true;
255
256 return NSContainsRect([[view superview] bounds], [view frame]);
257 }
258
259 // Checks the view hierarchy rooted at |view| to ensure that each view is
260 // properly contained.
261 BOOL ViewHierarchyContainmentValid(NSView* view) {
262 // TODO(erikchen): Fix these views to have correct containment.
263 // http://crbug.com/397665.
264 if ([view isKindOfClass:NSClassFromString(@"DownloadShelfView")])
265 return YES;
266 if ([view isKindOfClass:NSClassFromString(@"BookmarkBarToolbarView")])
267 return YES;
268 if ([view isKindOfClass:NSClassFromString(@"BrowserActionsContainerView")])
269 return YES;
270
271 if (!ViewContainmentValid(view)) {
272 LOG(ERROR) << "View violates containment: " <<
273 [[view description] UTF8String];
274 return false;
275 }
276
277 for (NSView* subview in [view subviews]) {
278 BOOL result = ViewHierarchyContainmentValid(subview);
279 if (!result)
280 return false;
281 }
282
283 return true;
284 }
285
245 // Verifies that the toolbar, infobar, tab content area, and download shelf 286 // Verifies that the toolbar, infobar, tab content area, and download shelf
246 // completely fill the area under the tabstrip. 287 // completely fill the area under the tabstrip.
247 void CheckViewPositions(BrowserWindowController* controller) { 288 void CheckViewPositions(BrowserWindowController* controller) {
248 NSRect contentView = [[[controller window] contentView] bounds]; 289 EXPECT_TRUE(ViewHierarchyContainmentValid([[controller window] contentView]));
249 NSRect tabstrip = [[controller tabStripView] frame];
250 NSRect toolbar = [[controller toolbarView] frame];
251 NSRect infobar = [[controller infoBarContainerView] frame];
252 NSRect contentArea = [[controller tabContentArea] frame];
253 NSRect download = [[[controller downloadShelf] view] frame];
254 290
291 NSRect contentView = FrameInWindowForView([[controller window] contentView]);
292 NSRect tabstrip = FrameInWindowForView([controller tabStripView]);
293 NSRect toolbar = FrameInWindowForView([controller toolbarView]);
294 NSRect infobar = FrameInWindowForView([controller infoBarContainerView]);
295 NSRect tabContent = FrameInWindowForView([controller tabContentArea]);
296 NSRect download = FrameInWindowForView([[controller downloadShelf] view]);
297
298 // The height of the contentView varies between full height of the window
299 // (OSX 10.10+) and full height minus 22 points. Don't make any checks
300 // against NSMaxY of contentView.
Scott Hess - ex-Googler 2014/07/25 23:59:05 I don't think this comment helps, since this code
erikchen 2014/07/26 00:12:16 Removed the comment.
255 EXPECT_EQ(NSMinY(contentView), NSMinY(download)); 301 EXPECT_EQ(NSMinY(contentView), NSMinY(download));
256 EXPECT_EQ(NSMaxY(download), NSMinY(contentArea)); 302 EXPECT_EQ(NSMaxY(download), NSMinY(tabContent));
257 EXPECT_EQ(NSMaxY(contentArea), NSMinY(infobar)); 303 EXPECT_EQ(NSMaxY(tabContent), NSMinY(infobar));
304
305 // Toolbar should start immediately under the tabstrip, but the tabstrip is
306 // not necessarily fixed with respect to the content view.
307 EXPECT_EQ(NSMaxY(toolbar), NSMinY(tabstrip));
258 308
259 // Bookmark bar frame is random memory when hidden. 309 // Bookmark bar frame is random memory when hidden.
260 if ([controller bookmarkBarVisible]) { 310 if ([controller bookmarkBarVisible]) {
261 NSRect bookmark = [[controller bookmarkView] frame]; 311 NSRect bookmark = [[controller bookmarkView] frame];
262 EXPECT_EQ(NSMaxY(infobar), NSMinY(bookmark)); 312 EXPECT_EQ(NSMaxY(infobar), NSMinY(bookmark));
263 EXPECT_EQ(NSMaxY(bookmark), NSMinY(toolbar)); 313 EXPECT_EQ(NSMaxY(bookmark), NSMinY(toolbar));
264 EXPECT_FALSE([[controller bookmarkView] isHidden]); 314 EXPECT_FALSE([[controller bookmarkView] isHidden]);
265 } else { 315 } else {
266 EXPECT_EQ(NSMaxY(infobar), NSMinY(toolbar)); 316 EXPECT_EQ(NSMaxY(infobar), NSMinY(toolbar));
267 EXPECT_TRUE([[controller bookmarkView] isHidden]); 317 EXPECT_TRUE([[controller bookmarkView] isHidden]);
268 } 318 }
269
270 // Toolbar should start immediately under the tabstrip, but the tabstrip is
271 // not necessarily fixed with respect to the content view.
272 EXPECT_EQ(NSMinY(tabstrip), NSMaxY(toolbar));
273 } 319 }
274 320
275 } // end namespace 321 } // end namespace
276 322
277 TEST_F(BrowserWindowControllerTest, TestAdjustWindowHeight) { 323 TEST_F(BrowserWindowControllerTest, TestAdjustWindowHeight) {
278 NSWindow* window = [controller_ window]; 324 NSWindow* window = [controller_ window];
279 NSRect workarea = [[window screen] visibleFrame]; 325 NSRect workarea = [[window screen] visibleFrame];
280 326
281 // Place the window well above the bottom of the screen and try to adjust its 327 // Place the window well above the bottom of the screen and try to adjust its
282 // height. It should change appropriately (and only downwards). Then get it to 328 // height. It should change appropriately (and only downwards). Then get it to
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 [[NSWindow alloc] initWithContentRect:NSMakeRect(0,0,400,400) 927 [[NSWindow alloc] initWithContentRect:NSMakeRect(0,0,400,400)
882 styleMask:NSBorderlessWindowMask 928 styleMask:NSBorderlessWindowMask
883 backing:NSBackingStoreBuffered 929 backing:NSBackingStoreBuffered
884 defer:NO]); 930 defer:NO]);
885 [[testFullscreenWindow_ contentView] cr_setWantsLayer:YES]; 931 [[testFullscreenWindow_ contentView] cr_setWantsLayer:YES];
886 return testFullscreenWindow_.get(); 932 return testFullscreenWindow_.get();
887 } 933 }
888 @end 934 @end
889 935
890 /* TODO(???): test other methods of BrowserWindowController */ 936 /* TODO(???): test other methods of BrowserWindowController */
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/browser_window_controller_private.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698