Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/apps/native_app_window_cocoa.h" | 5 #import "chrome/browser/ui/cocoa/apps/native_app_window_cocoa.h" |
| 6 | 6 |
| 7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
| 8 | 8 |
| 9 #include "apps/app_window_registry.h" | 9 #include "apps/app_window_registry.h" |
| 10 #include "base/mac/mac_util.h" | |
| 10 #include "chrome/browser/apps/app_browsertest_util.h" | 11 #include "chrome/browser/apps/app_browsertest_util.h" |
| 11 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
| 12 #include "chrome/browser/ui/extensions/application_launch.h" | 13 #include "chrome/browser/ui/extensions/application_launch.h" |
| 13 #include "content/public/browser/notification_service.h" | 14 #include "content/public/browser/notification_service.h" |
| 14 #include "content/public/test/test_utils.h" | 15 #include "content/public/test/test_utils.h" |
| 15 | 16 |
| 16 using extensions::PlatformAppBrowserTest; | 17 using extensions::PlatformAppBrowserTest; |
| 17 | 18 |
| 18 namespace { | 19 namespace { |
| 19 | 20 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 100 other_window->Hide(); | 101 other_window->Hide(); |
| 101 EXPECT_FALSE([other_ns_window isVisible]); | 102 EXPECT_FALSE([other_ns_window isVisible]); |
| 102 | 103 |
| 103 // HideWithApp, ShowWithApp does not show the other window. | 104 // HideWithApp, ShowWithApp does not show the other window. |
| 104 window->HideWithApp(); | 105 window->HideWithApp(); |
| 105 EXPECT_FALSE([ns_window isVisible]); | 106 EXPECT_FALSE([ns_window isVisible]); |
| 106 window->ShowWithApp(); | 107 window->ShowWithApp(); |
| 107 EXPECT_TRUE([ns_window isVisible]); | 108 EXPECT_TRUE([ns_window isVisible]); |
| 108 EXPECT_FALSE([other_ns_window isVisible]); | 109 EXPECT_FALSE([other_ns_window isVisible]); |
| 109 } | 110 } |
| 111 | |
| 112 // Only test fullscreen for 10.7 and above. | |
| 113 // Replicate specific 10.7 SDK declarations for building with prior SDKs. | |
| 114 #if !defined(MAC_OS_X_VERSION_10_7) || \ | |
| 115 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7 | |
| 116 | |
| 117 @interface NSWindow (LionSDKDeclarations) | |
| 118 - (void)toggleFullScreen:(id)sender; | |
| 119 @end | |
| 120 | |
| 121 enum { | |
| 122 NSWindowCollectionBehaviorFullScreenPrimary = 1 << 7, | |
| 123 NSFullScreenWindowMask = 1 << 14 | |
| 124 }; | |
| 125 | |
| 126 NSString* const NSWindowDidEnterFullScreenNotification = | |
| 127 @"NSWindowDidEnterFullScreenNotification"; | |
| 128 NSString* const NSWindowDidExitFullScreenNotification = | |
| 129 @"NSWindowDidExitFullScreenNotification"; | |
| 130 | |
| 131 #endif // MAC_OS_X_VERSION_10_7 | |
| 132 | |
| 133 @interface ScopedNotificationWatcher : NSObject { | |
| 134 @private | |
| 135 BOOL received_; | |
| 136 } | |
| 137 - (id)initWithNotification:(NSString*)notification | |
| 138 andObject:(NSObject*)object; | |
| 139 - (void)onNotification:(NSString*)notification; | |
| 140 - (void)waitForNotification; | |
| 141 @end | |
| 142 | |
| 143 @implementation ScopedNotificationWatcher | |
| 144 | |
| 145 - (id)initWithNotification:(NSString*)notification | |
| 146 andObject:(NSObject*)object { | |
| 147 if ((self = [super init])) { | |
| 148 [[NSNotificationCenter defaultCenter] | |
| 149 addObserver:self | |
| 150 selector:@selector(onNotification:) | |
| 151 name:notification | |
| 152 object:object]; | |
| 153 } | |
| 154 return self; | |
| 155 } | |
| 156 | |
| 157 - (void)onNotification:(NSString*)notification { | |
| 158 received_ = YES; | |
| 159 [[NSNotificationCenter defaultCenter] removeObserver:self]; | |
| 160 } | |
| 161 | |
| 162 - (void)waitForNotification { | |
| 163 while (!received_) | |
| 164 content::RunAllPendingInMessageLoop(); | |
| 165 } | |
| 166 | |
| 167 @end | |
| 168 | |
| 169 // Test that NativeAppWindow and AppWindow fullscreen state is updated when | |
| 170 // the window is fullscreened natively. | |
| 171 IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Fullscreen) { | |
| 172 if (!base::mac::IsOSLionOrLater()) | |
| 173 return; | |
| 174 | |
| 175 SetUpAppWithWindows(1); | |
| 176 apps::AppWindow* app_window = GetFirstAppWindow(); | |
| 177 apps::NativeAppWindow* window = app_window->GetBaseWindow(); | |
| 178 NSWindow* ns_window = app_window->GetNativeWindow(); | |
| 179 base::scoped_nsobject<ScopedNotificationWatcher> watcher; | |
| 180 | |
| 181 EXPECT_FALSE(app_window->fullscreen_types_for_test()); | |
|
tapted
2014/05/15 07:44:40
nit: EXPECT_EQ(0, .. (it will give a nicer log me
jackhou1
2014/05/15 08:05:03
Done.
| |
| 182 EXPECT_FALSE(window->IsFullscreen()); | |
| 183 EXPECT_FALSE([ns_window styleMask] & NSFullScreenWindowMask); | |
| 184 | |
| 185 watcher.reset([[ScopedNotificationWatcher alloc] | |
| 186 initWithNotification:NSWindowDidEnterFullScreenNotification | |
| 187 andObject:ns_window]); | |
| 188 [ns_window toggleFullScreen:nil]; | |
| 189 [watcher waitForNotification]; | |
| 190 EXPECT_TRUE(app_window->fullscreen_types_for_test() & | |
| 191 apps::AppWindow::FULLSCREEN_TYPE_OS); | |
| 192 EXPECT_TRUE(window->IsFullscreen()); | |
| 193 EXPECT_TRUE([ns_window styleMask] & NSFullScreenWindowMask); | |
| 194 | |
| 195 watcher.reset([[ScopedNotificationWatcher alloc] | |
| 196 initWithNotification:NSWindowDidExitFullScreenNotification | |
| 197 andObject:ns_window]); | |
| 198 app_window->Restore(); | |
| 199 EXPECT_FALSE(window->IsFullscreenOrPending()); | |
| 200 [watcher waitForNotification]; | |
| 201 EXPECT_FALSE(app_window->fullscreen_types_for_test()); | |
| 202 EXPECT_FALSE(window->IsFullscreen()); | |
| 203 EXPECT_FALSE([ns_window styleMask] & NSFullScreenWindowMask); | |
| 204 | |
| 205 watcher.reset([[ScopedNotificationWatcher alloc] | |
| 206 initWithNotification:NSWindowDidEnterFullScreenNotification | |
| 207 andObject:ns_window]); | |
| 208 app_window->Fullscreen(); | |
| 209 EXPECT_TRUE(window->IsFullscreenOrPending()); | |
| 210 [watcher waitForNotification]; | |
| 211 EXPECT_TRUE(app_window->fullscreen_types_for_test() & | |
| 212 apps::AppWindow::FULLSCREEN_TYPE_WINDOW_API); | |
| 213 EXPECT_TRUE(window->IsFullscreen()); | |
| 214 EXPECT_TRUE([ns_window styleMask] & NSFullScreenWindowMask); | |
| 215 | |
| 216 watcher.reset([[ScopedNotificationWatcher alloc] | |
| 217 initWithNotification:NSWindowDidExitFullScreenNotification | |
| 218 andObject:ns_window]); | |
| 219 [ns_window toggleFullScreen:nil]; | |
| 220 [watcher waitForNotification]; | |
| 221 EXPECT_FALSE(app_window->fullscreen_types_for_test()); | |
| 222 EXPECT_FALSE(window->IsFullscreen()); | |
| 223 EXPECT_FALSE([ns_window styleMask] & NSFullScreenWindowMask); | |
| 224 } | |
| OLD | NEW |