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

Side by Side Diff: ui/views/cocoa/bridged_native_widget_unittest.mm

Issue 665823002: Fix MacViews views_unittest simulate FullScreen test for 10.7+ SDKs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Do something sensible when running on Snow Leopard Created 6 years, 2 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 | « base/mac/sdk_forward_declarations.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/cocoa/bridged_native_widget.h" 5 #import "ui/views/cocoa/bridged_native_widget.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/mac_util.h"
10 #import "base/mac/sdk_forward_declarations.h" 11 #import "base/mac/sdk_forward_declarations.h"
11 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
12 #include "base/message_loop/message_loop.h" 13 #include "base/message_loop/message_loop.h"
13 #include "base/run_loop.h" 14 #include "base/run_loop.h"
14 #include "base/strings/sys_string_conversions.h" 15 #include "base/strings/sys_string_conversions.h"
15 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
16 #import "testing/gtest_mac.h" 17 #import "testing/gtest_mac.h"
17 #import "ui/gfx/test/ui_cocoa_test_helper.h" 18 #import "ui/gfx/test/ui_cocoa_test_helper.h"
18 #import "ui/views/cocoa/bridged_content_view.h" 19 #import "ui/views/cocoa/bridged_content_view.h"
19 #include "ui/views/controls/textfield/textfield.h" 20 #include "ui/views/controls/textfield/textfield.h"
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 [ns_view_ doCommandBySelector:@selector(moveLeft:)]; 528 [ns_view_ doCommandBySelector:@selector(moveLeft:)];
528 [ns_view_ doCommandBySelector:@selector(deleteForward:)]; 529 [ns_view_ doCommandBySelector:@selector(deleteForward:)];
529 EXPECT_EQ("", GetText()); 530 EXPECT_EQ("", GetText());
530 EXPECT_EQ_RANGE(NSMakeRange(0, 0), [ns_view_ selectedRange]); 531 EXPECT_EQ_RANGE(NSMakeRange(0, 0), [ns_view_ selectedRange]);
531 } 532 }
532 533
533 // Tests for correct fullscreen tracking, regardless of whether it is initiated 534 // Tests for correct fullscreen tracking, regardless of whether it is initiated
534 // by the Widget code or elsewhere (e.g. by the user). 535 // by the Widget code or elsewhere (e.g. by the user).
535 TEST_F(BridgedNativeWidgetTest, FullscreenSynchronousState) { 536 TEST_F(BridgedNativeWidgetTest, FullscreenSynchronousState) {
536 EXPECT_FALSE(widget_->IsFullscreen()); 537 EXPECT_FALSE(widget_->IsFullscreen());
538 if (base::mac::IsOSSnowLeopard())
539 return;
540
537 // Allow user-initiated fullscreen changes on the Window. 541 // Allow user-initiated fullscreen changes on the Window.
538 [test_window() 542 [test_window()
539 setCollectionBehavior:[test_window() collectionBehavior] | 543 setCollectionBehavior:[test_window() collectionBehavior] |
540 NSWindowCollectionBehaviorFullScreenPrimary]; 544 NSWindowCollectionBehaviorFullScreenPrimary];
541 545
542 base::scoped_nsobject<NativeWidgetMacNotificationWaiter> waiter( 546 base::scoped_nsobject<NativeWidgetMacNotificationWaiter> waiter(
543 [[NativeWidgetMacNotificationWaiter alloc] initWithWindow:test_window()]); 547 [[NativeWidgetMacNotificationWaiter alloc] initWithWindow:test_window()]);
544 const gfx::Rect restored_bounds = widget_->GetRestoredBounds(); 548 const gfx::Rect restored_bounds = widget_->GetRestoredBounds();
545 549
546 // Simulate a user-initiated fullscreen. Note trying to to this again before 550 // Simulate a user-initiated fullscreen. Note trying to to this again before
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 base::scoped_nsobject<NativeWidgetMacNotificationWaiter> waiter( 591 base::scoped_nsobject<NativeWidgetMacNotificationWaiter> waiter(
588 [[NativeWidgetMacNotificationWaiter alloc] initWithWindow:test_window()]); 592 [[NativeWidgetMacNotificationWaiter alloc] initWithWindow:test_window()]);
589 593
590 EXPECT_FALSE(widget_->IsFullscreen()); 594 EXPECT_FALSE(widget_->IsFullscreen());
591 const gfx::Rect restored_bounds = widget_->GetRestoredBounds(); 595 const gfx::Rect restored_bounds = widget_->GetRestoredBounds();
592 EXPECT_FALSE(restored_bounds.IsEmpty()); 596 EXPECT_FALSE(restored_bounds.IsEmpty());
593 597
594 // Ensure this works without having to change collection behavior as for the 598 // Ensure this works without having to change collection behavior as for the
595 // test above. 599 // test above.
596 widget_->SetFullscreen(true); 600 widget_->SetFullscreen(true);
601 if (base::mac::IsOSSnowLeopard()) {
602 // On Snow Leopard, SetFullscreen() isn't implemented. But shouldn't crash.
603 EXPECT_FALSE(widget_->IsFullscreen());
604 return;
605 }
606
597 EXPECT_TRUE(widget_->IsFullscreen()); 607 EXPECT_TRUE(widget_->IsFullscreen());
598 EXPECT_EQ(restored_bounds, widget_->GetRestoredBounds()); 608 EXPECT_EQ(restored_bounds, widget_->GetRestoredBounds());
599 609
600 // Should be zero until the runloop spins. 610 // Should be zero until the runloop spins.
601 EXPECT_EQ(0, [waiter enterCount]); 611 EXPECT_EQ(0, [waiter enterCount]);
602 [waiter waitForEnterCount:1 exitCount:0]; 612 [waiter waitForEnterCount:1 exitCount:0];
603 613
604 // Verify it hasn't exceeded. 614 // Verify it hasn't exceeded.
605 EXPECT_EQ(1, [waiter enterCount]); 615 EXPECT_EQ(1, [waiter enterCount]);
606 EXPECT_EQ(0, [waiter exitCount]); 616 EXPECT_EQ(0, [waiter exitCount]);
(...skipping 11 matching lines...) Expand all
618 } 628 }
619 629
620 typedef BridgedNativeWidgetTestBase BridgedNativeWidgetSimulateFullscreenTest; 630 typedef BridgedNativeWidgetTestBase BridgedNativeWidgetSimulateFullscreenTest;
621 631
622 // Simulate the notifications that AppKit would send out if a fullscreen 632 // Simulate the notifications that AppKit would send out if a fullscreen
623 // operation begins, and then fails and must abort. This notification sequence 633 // operation begins, and then fails and must abort. This notification sequence
624 // was determined by posting delayed tasks to toggle fullscreen state and then 634 // was determined by posting delayed tasks to toggle fullscreen state and then
625 // mashing Ctrl+Left/Right to keep OSX in a transition between Spaces to cause 635 // mashing Ctrl+Left/Right to keep OSX in a transition between Spaces to cause
626 // the fullscreen transition to fail. 636 // the fullscreen transition to fail.
627 TEST_F(BridgedNativeWidgetSimulateFullscreenTest, FailToEnterAndExit) { 637 TEST_F(BridgedNativeWidgetSimulateFullscreenTest, FailToEnterAndExit) {
638 if (base::mac::IsOSSnowLeopard())
639 return;
640
628 base::scoped_nsobject<NSWindow> owned_window( 641 base::scoped_nsobject<NSWindow> owned_window(
629 [[BridgedNativeWidgetTestFullScreenWindow alloc] 642 [[BridgedNativeWidgetTestFullScreenWindow alloc]
630 initWithContentRect:NSMakeRect(50, 50, 400, 300) 643 initWithContentRect:NSMakeRect(50, 50, 400, 300)
631 styleMask:NSBorderlessWindowMask 644 styleMask:NSBorderlessWindowMask
632 backing:NSBackingStoreBuffered 645 backing:NSBackingStoreBuffered
633 defer:YES]); 646 defer:YES]);
634 [owned_window setReleasedWhenClosed:NO]; // Owned by scoped_nsobject. 647 [owned_window setReleasedWhenClosed:NO]; // Owned by scoped_nsobject.
635 bridge()->Init(owned_window, Widget::InitParams()); // Transfers ownership. 648 bridge()->Init(owned_window, Widget::InitParams()); // Transfers ownership.
636 649
637 BridgedNativeWidgetTestFullScreenWindow* window = 650 BridgedNativeWidgetTestFullScreenWindow* window =
(...skipping 12 matching lines...) Expand all
650 // On a failure, Cocoa starts by sending an unexpected *exit* fullscreen, and 663 // On a failure, Cocoa starts by sending an unexpected *exit* fullscreen, and
651 // BridgedNativeWidget will think it's just a delayed transition and try to go 664 // BridgedNativeWidget will think it's just a delayed transition and try to go
652 // back into fullscreen but get ignored by Cocoa. 665 // back into fullscreen but get ignored by Cocoa.
653 EXPECT_EQ(0, [window ignoredToggleFullScreenCount]); 666 EXPECT_EQ(0, [window ignoredToggleFullScreenCount]);
654 EXPECT_TRUE(bridge()->target_fullscreen_state()); 667 EXPECT_TRUE(bridge()->target_fullscreen_state());
655 [center postNotificationName:NSWindowDidExitFullScreenNotification 668 [center postNotificationName:NSWindowDidExitFullScreenNotification
656 object:window]; 669 object:window];
657 EXPECT_EQ(1, [window ignoredToggleFullScreenCount]); 670 EXPECT_EQ(1, [window ignoredToggleFullScreenCount]);
658 EXPECT_FALSE(bridge()->target_fullscreen_state()); 671 EXPECT_FALSE(bridge()->target_fullscreen_state());
659 672
660 // Cocoa follows up with a failure notification. 673 // Cocoa follows up with a failure message sent to the NSWindowDelegate (there
661 [center postNotificationName:NSWindowDidFailToEnterFullScreenNotification 674 // is no equivalent notification for failure). Called via id so that this
662 object:window]; 675 // compiles on 10.6.
676 id window_delegate = [window delegate];
677 [window_delegate windowDidFailToEnterFullScreen:window];
663 EXPECT_FALSE(bridge()->target_fullscreen_state()); 678 EXPECT_FALSE(bridge()->target_fullscreen_state());
664 679
665 // Now perform a successful fullscreen operation. 680 // Now perform a successful fullscreen operation.
666 [center postNotificationName:NSWindowWillEnterFullScreenNotification 681 [center postNotificationName:NSWindowWillEnterFullScreenNotification
667 object:window]; 682 object:window];
668 EXPECT_TRUE(bridge()->target_fullscreen_state()); 683 EXPECT_TRUE(bridge()->target_fullscreen_state());
669 [center postNotificationName:NSWindowDidEnterFullScreenNotification 684 [center postNotificationName:NSWindowDidEnterFullScreenNotification
670 object:window]; 685 object:window];
671 EXPECT_TRUE(bridge()->target_fullscreen_state()); 686 EXPECT_TRUE(bridge()->target_fullscreen_state());
672 687
673 // And try to get out. 688 // And try to get out.
674 [center postNotificationName:NSWindowWillExitFullScreenNotification 689 [center postNotificationName:NSWindowWillExitFullScreenNotification
675 object:window]; 690 object:window];
676 EXPECT_FALSE(bridge()->target_fullscreen_state()); 691 EXPECT_FALSE(bridge()->target_fullscreen_state());
677 692
678 // On a failure, Cocoa sends a failure notification, but then just dumps the 693 // On a failure, Cocoa sends a failure message, but then just dumps the window
679 // Window out of fullscreen anyway (in that order). 694 // out of fullscreen anyway (in that order).
680 [center postNotificationName:NSWindowDidFailToExitFullScreenNotification 695 [window_delegate windowDidFailToExitFullScreen:window];
681 object:window];
682 EXPECT_FALSE(bridge()->target_fullscreen_state()); 696 EXPECT_FALSE(bridge()->target_fullscreen_state());
683 [center postNotificationName:NSWindowDidExitFullScreenNotification 697 [center postNotificationName:NSWindowDidExitFullScreenNotification
684 object:window]; 698 object:window];
685 EXPECT_EQ(1, [window ignoredToggleFullScreenCount]); // No change. 699 EXPECT_EQ(1, [window ignoredToggleFullScreenCount]); // No change.
686 EXPECT_FALSE(bridge()->target_fullscreen_state()); 700 EXPECT_FALSE(bridge()->target_fullscreen_state());
687 701
688 widget_->CloseNow(); 702 widget_->CloseNow();
689 } 703 }
690 704
691 } // namespace test 705 } // namespace test
692 } // namespace views 706 } // namespace views
OLDNEW
« no previous file with comments | « base/mac/sdk_forward_declarations.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698