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

Side by Side Diff: ui/views/widget/native_widget_mac_unittest.mm

Issue 2069103004: MacViews: Attach child windows when parent is on the screen. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed OnVisibilityChangedTo(). Added test. Created 4 years, 6 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 | « ui/views/cocoa/views_nswindow_delegate.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "ui/views/widget/native_widget_mac.h" 5 #import "ui/views/widget/native_widget_mac.h"
6 6
7 #import <Cocoa/Cocoa.h> 7 #import <Cocoa/Cocoa.h>
8 8
9 #import "base/mac/foundation_util.h" 9 #import "base/mac/foundation_util.h"
10 #import "base/mac/scoped_nsobject.h" 10 #import "base/mac/scoped_nsobject.h"
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 int paint_count() { return paint_count_; } 366 int paint_count() { return paint_count_; }
367 367
368 private: 368 private:
369 int paint_count_ = 0; 369 int paint_count_ = 0;
370 int target_paint_count_ = 0; 370 int target_paint_count_ = 0;
371 base::RunLoop* run_loop_ = nullptr; 371 base::RunLoop* run_loop_ = nullptr;
372 372
373 DISALLOW_COPY_AND_ASSIGN(PaintCountView); 373 DISALLOW_COPY_AND_ASSIGN(PaintCountView);
374 }; 374 };
375 375
376 // Test for correct child window restore when parent window is minimized
377 // and restored using makeKeyAndOrderFront.
tapted 2016/06/22 04:09:15 nit: -makeKeyAndOrderFront:.
kirr 2016/06/22 12:59:03 Done.
378 // Child window could become occluded (because of cocoa bug?).
tapted 2016/06/22 04:09:14 You can say: Parent-child window relationships i
kirr 2016/06/22 12:59:03 Done.
379 TEST_F(NativeWidgetMacTest, OrderFrontAfterMiniturize) {
tapted 2016/06/22 04:09:14 Miniturize -> Miniaturize (or Minimize)
kirr 2016/06/22 12:59:04 Done.
380 Widget* widget = new Widget;
tapted 2016/06/22 04:09:14 You should be able to avoid using InitParams with
kirr 2016/06/22 12:59:04 Done.
381 Widget::InitParams init_params(Widget::InitParams::TYPE_WINDOW);
382 widget->Init(init_params);
383 NSWindow* ns_window = widget->GetNativeWindow();
384
385 Widget* child_widget = new Widget;
tapted 2016/06/22 04:09:14 Widget* child = CreateChildPlatformWidget(widget->
kirr 2016/06/22 12:59:04 Done.
386 Widget::InitParams child_params(Widget::InitParams::TYPE_CONTROL);
387 child_params.parent = widget->GetNativeView();
388 child_widget->Init(child_params);
389 NSWindow* child_ns_window = child_widget->GetNativeWindow();
390
391 // Set parent bounds that overlap child.
392 widget->SetBounds(gfx::Rect(100, 100, 300, 300));
393 child_widget->SetBounds(gfx::Rect(110, 110, 100, 100));
tapted 2016/06/22 04:09:14 note with TYPE_CONTROL, I think the bounds will be
394
395 widget->Show();
tapted 2016/06/22 04:09:14 show the child too?
kirr 2016/06/22 12:59:04 I think no. Test visually works fine without it. B
tapted 2016/06/23 12:09:26 hm - I'm pretty sure you need to show it. It's val
396 base::RunLoop().RunUntilIdle();
tapted 2016/06/22 04:09:14 is this needed?
kirr 2016/06/22 12:59:04 Yes, seems like it is also related to window activ
397
398 EXPECT_FALSE(widget->IsMinimized());
399
400 // Minimize parent.
401 [ns_window performMiniaturize:nil];
402 base::RunLoop().RunUntilIdle();
tapted 2016/06/22 04:09:14 this shouldn't be needed - miniaturize is synchron
kirr 2016/06/22 12:59:04 It's also not for the expectations below, bot for
403
404 EXPECT_TRUE(widget->IsMinimized());
405 EXPECT_FALSE(widget->IsVisible());
406 EXPECT_FALSE(child_widget->IsVisible());
407
408 // Restore parent window as AppController does.
409 [ns_window makeKeyAndOrderFront:nil];
410
411 // Wait and check that child is really visible.
412 // TODO(kirr): remove the fixed timeout.
413 base::MessageLoop::current()->PostDelayedTask(
kirr 2016/06/21 16:33:47 I've added the test to show the problem. But I don
tapted 2016/06/22 04:09:14 Can you get a stack trace from the visibility chan
kirr 2016/06/22 12:59:04 Here is NSNotifications trace for the test (+ orde
tapted 2016/06/23 12:09:26 You can get the stack with something like base::de
414 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
415 base::TimeDelta::FromSeconds(2));
416 base::MessageLoop::current()->Run();
417
418 EXPECT_FALSE(widget->IsMinimized());
419 EXPECT_TRUE(widget->IsVisible());
420 EXPECT_TRUE(child_widget->IsVisible());
421 // Check that child window is visible.
422 EXPECT_TRUE([child_ns_window occlusionState] & NSWindowOcclusionStateVisible);
tapted 2016/06/22 04:09:14 ah, occlusion states are updated from the window s
kirr 2016/06/22 12:59:04 WidgetTest::IsWindowStackedAbove(..) returns the s
tapted 2016/06/23 12:09:25 So, like you probably saw, we can't guarantee that
kirr 2016/06/23 16:20:11 Ok, I agree that we can't commit with a fixed dela
423 widget->Close();
424 }
425
376 // Test minimized states triggered externally, implied visibility and restored 426 // Test minimized states triggered externally, implied visibility and restored
377 // bounds whilst minimized. 427 // bounds whilst minimized.
378 TEST_F(NativeWidgetMacTest, MiniaturizeExternally) { 428 TEST_F(NativeWidgetMacTest, MiniaturizeExternally) {
379 Widget* widget = new Widget; 429 Widget* widget = new Widget;
380 Widget::InitParams init_params(Widget::InitParams::TYPE_WINDOW); 430 Widget::InitParams init_params(Widget::InitParams::TYPE_WINDOW);
381 widget->Init(init_params); 431 widget->Init(init_params);
382 432
383 PaintCountView* view = new PaintCountView(); 433 PaintCountView* view = new PaintCountView();
384 widget->GetContentsView()->AddChildView(view); 434 widget->GetContentsView()->AddChildView(view);
385 NSWindow* ns_window = widget->GetNativeWindow(); 435 NSWindow* ns_window = widget->GetNativeWindow();
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 // -[NSWindow orderOut:] call that is triggered from -[ViewsNSWindowDelegate 973 // -[NSWindow orderOut:] call that is triggered from -[ViewsNSWindowDelegate
924 // sheetDidEnd:]. |sheet_widget| will be destroyed next, so it's still safe to 974 // sheetDidEnd:]. |sheet_widget| will be destroyed next, so it's still safe to
925 // use in the block. However, since the orderOut just happened, it's not very 975 // use in the block. However, since the orderOut just happened, it's not very
926 // interesting. 976 // interesting.
927 observer = [[NSNotificationCenter defaultCenter] 977 observer = [[NSNotificationCenter defaultCenter]
928 addObserverForName:NSWindowDidEndSheetNotification 978 addObserverForName:NSWindowDidEndSheetNotification
929 object:native_parent 979 object:native_parent
930 queue:nil 980 queue:nil
931 usingBlock:^(NSNotification* note) { 981 usingBlock:^(NSNotification* note) {
932 EXPECT_TRUE([sheet_window delegate]); 982 EXPECT_TRUE([sheet_window delegate]);
933 EXPECT_FALSE(sheet_widget->IsVisible());
934 EXPECT_FALSE(sheet_widget->GetLayer()->IsDrawn());
935 *did_observe_ptr = true; 983 *did_observe_ptr = true;
936 }]; 984 }];
937 985
938 // Pump in order to trigger -[NSWindow endSheet:..], which will block while 986 // Pump in order to trigger -[NSWindow endSheet:..], which will block while
939 // the animation runs, then delete |sheet_widget|. 987 // the animation runs, then delete |sheet_widget|.
940 TestWidgetObserver widget_observer(sheet_widget); 988 TestWidgetObserver widget_observer(sheet_widget);
941 EXPECT_TRUE([sheet_window delegate]); 989 EXPECT_TRUE([sheet_window delegate]);
942 base::RunLoop().RunUntilIdle(); 990 base::RunLoop().RunUntilIdle();
943 EXPECT_FALSE([sheet_window delegate]); 991 EXPECT_FALSE([sheet_window delegate]);
944 992
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after
1585 lastDirtyRect_ = dirtyRect; 1633 lastDirtyRect_ = dirtyRect;
1586 } 1634 }
1587 1635
1588 @end 1636 @end
1589 1637
1590 @implementation FocusableTestNSView 1638 @implementation FocusableTestNSView
1591 - (BOOL)acceptsFirstResponder { 1639 - (BOOL)acceptsFirstResponder {
1592 return YES; 1640 return YES;
1593 } 1641 }
1594 @end 1642 @end
OLDNEW
« no previous file with comments | « ui/views/cocoa/views_nswindow_delegate.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698