diff options
9 files changed, 60 insertions, 408 deletions
diff --git a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm index b0591e0..a8130c7 100644 --- a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm +++ b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm @@ -362,7 +362,7 @@ bool NativeAppWindowCocoa::IsActive() const { } bool NativeAppWindowCocoa::IsMaximized() const { - return is_maximized_ && !IsMinimized(); + return is_maximized_; } bool NativeAppWindowCocoa::IsMinimized() const { @@ -497,14 +497,9 @@ void NativeAppWindowCocoa::Deactivate() { } void NativeAppWindowCocoa::Maximize() { - if (is_fullscreen_) - return; - UpdateRestoredBounds(); is_maximized_ = true; // See top of file NOTE: State Before Update. [window() setFrame:[[window() screen] visibleFrame] display:YES animate:YES]; - if (IsMinimized()) - [window() deminiaturize:window_controller_]; } void NativeAppWindowCocoa::Minimize() { @@ -514,12 +509,13 @@ void NativeAppWindowCocoa::Minimize() { void NativeAppWindowCocoa::Restore() { DCHECK(!IsFullscreenOrPending()); // SetFullscreen, not Restore, expected. - if (is_maximized_) { + if (IsMaximized()) { is_maximized_ = false; // See top of file NOTE: State Before Update. [window() setFrame:restored_bounds() display:YES animate:YES]; - } - if (IsMinimized()) + } else if (IsMinimized()) { + is_maximized_ = false; // See top of file NOTE: State Before Update. [window() deminiaturize:window_controller_]; + } } void NativeAppWindowCocoa::SetBounds(const gfx::Rect& bounds) { @@ -767,7 +763,6 @@ void NativeAppWindowCocoa::WindowDidDeminiaturize() { } void NativeAppWindowCocoa::WindowDidEnterFullscreen() { - is_maximized_ = false; is_fullscreen_ = true; app_window_->OnNativeWindowChanged(); } @@ -777,8 +772,6 @@ void NativeAppWindowCocoa::WindowDidExitFullscreen() { if (!shows_fullscreen_controls_) gfx::SetNSWindowCanFullscreen(window(), false); - WindowDidFinishResize(); - app_window_->OnNativeWindowChanged(); } diff --git a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm index e9f82b8..7ca858a 100644 --- a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm +++ b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm @@ -25,7 +25,6 @@ #include "extensions/common/constants.h" #include "testing/gmock/include/gmock/gmock.h" #import "ui/base/test/nswindow_fullscreen_notification_waiter.h" -#import "ui/base/test/windowed_nsnotification_observer.h" #import "ui/gfx/mac/nswindow_frame_controls.h" using extensions::AppWindow; @@ -214,6 +213,42 @@ IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, testing::Mock::VerifyAndClearExpectations(&mock_host); } +@interface ScopedNotificationWatcher : NSObject { + @private + BOOL received_; +} +- (id)initWithNotification:(NSString*)notification + andObject:(NSObject*)object; +- (void)onNotification:(NSString*)notification; +- (void)waitForNotification; +@end + +@implementation ScopedNotificationWatcher + +- (id)initWithNotification:(NSString*)notification + andObject:(NSObject*)object { + if ((self = [super init])) { + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(onNotification:) + name:notification + object:object]; + } + return self; +} + +- (void)onNotification:(NSString*)notification { + received_ = YES; + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)waitForNotification { + while (!received_) + content::RunAllPendingInMessageLoop(); +} + +@end + // Test that NativeAppWindow and AppWindow fullscreen state is updated when // the window is fullscreened natively. IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, Fullscreen) { @@ -224,8 +259,7 @@ IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, Fullscreen) { CreateTestAppWindow("{\"alwaysOnTop\": true }"); extensions::NativeAppWindow* window = app_window->GetBaseWindow(); NSWindow* ns_window = app_window->GetNativeWindow(); - base::scoped_nsobject<NSWindowFullscreenNotificationWaiter> waiter( - [[NSWindowFullscreenNotificationWaiter alloc] initWithWindow:ns_window]); + base::scoped_nsobject<ScopedNotificationWatcher> watcher; EXPECT_EQ(AppWindow::FULLSCREEN_TYPE_NONE, app_window->fullscreen_types_for_test()); @@ -233,34 +267,46 @@ IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, Fullscreen) { EXPECT_FALSE([ns_window styleMask] & NSFullScreenWindowMask); EXPECT_TRUE(gfx::IsNSWindowAlwaysOnTop(ns_window)); + watcher.reset([[ScopedNotificationWatcher alloc] + initWithNotification:NSWindowDidEnterFullScreenNotification + andObject:ns_window]); [ns_window toggleFullScreen:nil]; - [waiter waitForEnterCount:1 exitCount:0]; + [watcher waitForNotification]; EXPECT_TRUE(app_window->fullscreen_types_for_test() & AppWindow::FULLSCREEN_TYPE_OS); EXPECT_TRUE(window->IsFullscreen()); EXPECT_TRUE([ns_window styleMask] & NSFullScreenWindowMask); EXPECT_FALSE(gfx::IsNSWindowAlwaysOnTop(ns_window)); + watcher.reset([[ScopedNotificationWatcher alloc] + initWithNotification:NSWindowDidExitFullScreenNotification + andObject:ns_window]); app_window->Restore(); EXPECT_FALSE(window->IsFullscreenOrPending()); - [waiter waitForEnterCount:1 exitCount:1]; + [watcher waitForNotification]; EXPECT_EQ(AppWindow::FULLSCREEN_TYPE_NONE, app_window->fullscreen_types_for_test()); EXPECT_FALSE(window->IsFullscreen()); EXPECT_FALSE([ns_window styleMask] & NSFullScreenWindowMask); EXPECT_TRUE(gfx::IsNSWindowAlwaysOnTop(ns_window)); + watcher.reset([[ScopedNotificationWatcher alloc] + initWithNotification:NSWindowDidEnterFullScreenNotification + andObject:ns_window]); app_window->Fullscreen(); EXPECT_TRUE(window->IsFullscreenOrPending()); - [waiter waitForEnterCount:2 exitCount:1]; + [watcher waitForNotification]; EXPECT_TRUE(app_window->fullscreen_types_for_test() & AppWindow::FULLSCREEN_TYPE_WINDOW_API); EXPECT_TRUE(window->IsFullscreen()); EXPECT_TRUE([ns_window styleMask] & NSFullScreenWindowMask); EXPECT_FALSE(gfx::IsNSWindowAlwaysOnTop(ns_window)); + watcher.reset([[ScopedNotificationWatcher alloc] + initWithNotification:NSWindowDidExitFullScreenNotification + andObject:ns_window]); [ns_window toggleFullScreen:nil]; - [waiter waitForEnterCount:2 exitCount:2]; + [watcher waitForNotification]; EXPECT_EQ(AppWindow::FULLSCREEN_TYPE_NONE, app_window->fullscreen_types_for_test()); EXPECT_FALSE(window->IsFullscreen()); @@ -268,242 +314,6 @@ IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, Fullscreen) { EXPECT_TRUE(gfx::IsNSWindowAlwaysOnTop(ns_window)); } -// Test Minimize, Restore combinations with their native equivalents. -IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, Minimize) { - SetUpAppWithWindows(1); - AppWindow* app_window = GetFirstAppWindow(); - extensions::NativeAppWindow* window = app_window->GetBaseWindow(); - NSWindow* ns_window = app_window->GetNativeWindow(); - - NSRect initial_frame = [ns_window frame]; - - EXPECT_FALSE(window->IsMinimized()); - EXPECT_FALSE([ns_window isMiniaturized]); - - // Native minimize, Restore. - [ns_window miniaturize:nil]; - EXPECT_TRUE(NSEqualRects(initial_frame, [ns_window frame])); - EXPECT_TRUE(window->IsMinimized()); - EXPECT_TRUE([ns_window isMiniaturized]); - - app_window->Restore(); - EXPECT_TRUE(NSEqualRects(initial_frame, [ns_window frame])); - EXPECT_FALSE(window->IsMinimized()); - EXPECT_FALSE([ns_window isMiniaturized]); - - // Minimize, native restore. - app_window->Minimize(); - EXPECT_TRUE(NSEqualRects(initial_frame, [ns_window frame])); - EXPECT_TRUE(window->IsMinimized()); - EXPECT_TRUE([ns_window isMiniaturized]); - - [ns_window deminiaturize:nil]; - EXPECT_TRUE(NSEqualRects(initial_frame, [ns_window frame])); - EXPECT_FALSE(window->IsMinimized()); - EXPECT_FALSE([ns_window isMiniaturized]); -} - -// Test Maximize, Restore combinations with their native equivalents. -IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, Maximize) { - SetUpAppWithWindows(1); - AppWindow* app_window = GetFirstAppWindow(); - extensions::NativeAppWindow* window = app_window->GetBaseWindow(); - NSWindow* ns_window = app_window->GetNativeWindow(); - base::scoped_nsobject<WindowedNSNotificationObserver> watcher; - - gfx::Rect initial_restored_bounds = window->GetRestoredBounds(); - NSRect initial_frame = [ns_window frame]; - NSRect maximized_frame = [[ns_window screen] visibleFrame]; - - EXPECT_FALSE(window->IsMaximized()); - - // Native maximize, Restore. - watcher.reset([[WindowedNSNotificationObserver alloc] - initForNotification:NSWindowDidResizeNotification - object:ns_window]); - [ns_window zoom:nil]; - [watcher wait]; - EXPECT_EQ(initial_restored_bounds, window->GetRestoredBounds()); - EXPECT_TRUE(NSEqualRects(maximized_frame, [ns_window frame])); - EXPECT_TRUE(window->IsMaximized()); - - watcher.reset([[WindowedNSNotificationObserver alloc] - initForNotification:NSWindowDidResizeNotification - object:ns_window]); - app_window->Restore(); - [watcher wait]; - EXPECT_EQ(initial_restored_bounds, window->GetRestoredBounds()); - EXPECT_TRUE(NSEqualRects(initial_frame, [ns_window frame])); - EXPECT_FALSE(window->IsMaximized()); - - // Maximize, native restore. - watcher.reset([[WindowedNSNotificationObserver alloc] - initForNotification:NSWindowDidResizeNotification - object:ns_window]); - app_window->Maximize(); - [watcher wait]; - EXPECT_EQ(initial_restored_bounds, window->GetRestoredBounds()); - EXPECT_TRUE(NSEqualRects(maximized_frame, [ns_window frame])); - EXPECT_TRUE(window->IsMaximized()); - - watcher.reset([[WindowedNSNotificationObserver alloc] - initForNotification:NSWindowDidResizeNotification - object:ns_window]); - [ns_window zoom:nil]; - [watcher wait]; - EXPECT_EQ(initial_restored_bounds, window->GetRestoredBounds()); - EXPECT_TRUE(NSEqualRects(initial_frame, [ns_window frame])); - EXPECT_FALSE(window->IsMaximized()); -} - -// Test Maximize when the window has a maximum size. The maximum size means that -// the window is not user-maximizable. However, calling Maximize() via the -// javascript API should still maximize and since the zoom button is removed, -// the codepath changes. -IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, MaximizeConstrained) { - AppWindow* app_window = CreateTestAppWindow( - "{\"outerBounds\": {\"maxWidth\":200, \"maxHeight\":300}}"); - extensions::NativeAppWindow* window = app_window->GetBaseWindow(); - NSWindow* ns_window = app_window->GetNativeWindow(); - base::scoped_nsobject<WindowedNSNotificationObserver> watcher; - - gfx::Rect initial_restored_bounds = window->GetRestoredBounds(); - NSRect initial_frame = [ns_window frame]; - NSRect maximized_frame = [[ns_window screen] visibleFrame]; - - EXPECT_FALSE(window->IsMaximized()); - - // Maximize, Restore. - watcher.reset([[WindowedNSNotificationObserver alloc] - initForNotification:NSWindowDidResizeNotification - object:ns_window]); - app_window->Maximize(); - [watcher wait]; - EXPECT_EQ(initial_restored_bounds, window->GetRestoredBounds()); - EXPECT_TRUE(NSEqualRects(maximized_frame, [ns_window frame])); - EXPECT_TRUE(window->IsMaximized()); - - watcher.reset([[WindowedNSNotificationObserver alloc] - initForNotification:NSWindowDidResizeNotification - object:ns_window]); - app_window->Restore(); - [watcher wait]; - EXPECT_EQ(initial_restored_bounds, window->GetRestoredBounds()); - EXPECT_TRUE(NSEqualRects(initial_frame, [ns_window frame])); - EXPECT_FALSE(window->IsMaximized()); -} - -// Test Minimize, Maximize, Restore combinations with their native equivalents. -IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, MinimizeMaximize) { - SetUpAppWithWindows(1); - AppWindow* app_window = GetFirstAppWindow(); - extensions::NativeAppWindow* window = app_window->GetBaseWindow(); - NSWindow* ns_window = app_window->GetNativeWindow(); - base::scoped_nsobject<WindowedNSNotificationObserver> watcher; - - NSRect initial_frame = [ns_window frame]; - NSRect maximized_frame = [[ns_window screen] visibleFrame]; - - EXPECT_FALSE(window->IsMaximized()); - EXPECT_FALSE(window->IsMinimized()); - EXPECT_FALSE([ns_window isMiniaturized]); - - // Maximize, Minimize, Restore. - watcher.reset([[WindowedNSNotificationObserver alloc] - initForNotification:NSWindowDidResizeNotification - object:ns_window]); - app_window->Maximize(); - [watcher wait]; - EXPECT_TRUE(NSEqualRects(maximized_frame, [ns_window frame])); - EXPECT_TRUE(window->IsMaximized()); - - app_window->Minimize(); - EXPECT_TRUE(NSEqualRects(maximized_frame, [ns_window frame])); - EXPECT_FALSE(window->IsMaximized()); - EXPECT_TRUE(window->IsMinimized()); - EXPECT_TRUE([ns_window isMiniaturized]); - - app_window->Restore(); - EXPECT_TRUE(NSEqualRects(initial_frame, [ns_window frame])); - EXPECT_FALSE(window->IsMaximized()); - EXPECT_FALSE(window->IsMinimized()); - EXPECT_FALSE([ns_window isMiniaturized]); - - // Minimize, Maximize. - app_window->Minimize(); - EXPECT_TRUE(NSEqualRects(initial_frame, [ns_window frame])); - EXPECT_TRUE(window->IsMinimized()); - EXPECT_TRUE([ns_window isMiniaturized]); - - app_window->Maximize(); - EXPECT_TRUE([ns_window isVisible]); - EXPECT_TRUE(NSEqualRects(maximized_frame, [ns_window frame])); - EXPECT_TRUE(window->IsMaximized()); - EXPECT_FALSE(window->IsMinimized()); - EXPECT_FALSE([ns_window isMiniaturized]); -} - -// Test Maximize, Fullscreen, Restore combinations. -// TODO(jackhou): Enable this when we can mock out fullscreen. -// See http://crbug.com/502150 -IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, - DISABLED_MaximizeFullscreen) { - SetUpAppWithWindows(1); - AppWindow* app_window = GetFirstAppWindow(); - extensions::NativeAppWindow* window = app_window->GetBaseWindow(); - NSWindow* ns_window = app_window->GetNativeWindow(); - base::scoped_nsobject<WindowedNSNotificationObserver> watcher; - base::scoped_nsobject<NSWindowFullscreenNotificationWaiter> waiter( - [[NSWindowFullscreenNotificationWaiter alloc] initWithWindow:ns_window]); - - NSRect initial_frame = [ns_window frame]; - NSRect maximized_frame = [[ns_window screen] visibleFrame]; - - EXPECT_FALSE(window->IsMaximized()); - EXPECT_FALSE(window->IsFullscreen()); - - // Maximize, Fullscreen, Restore, Restore. - watcher.reset([[WindowedNSNotificationObserver alloc] - initForNotification:NSWindowDidResizeNotification - object:ns_window]); - app_window->Maximize(); - [watcher wait]; - EXPECT_TRUE(NSEqualRects(maximized_frame, [ns_window frame])); - EXPECT_TRUE(window->IsMaximized()); - - EXPECT_EQ(0, [waiter enterCount]); - app_window->Fullscreen(); - [waiter waitForEnterCount:1 exitCount:0]; - EXPECT_FALSE(window->IsMaximized()); - EXPECT_TRUE(window->IsFullscreen()); - - app_window->Restore(); - [waiter waitForEnterCount:1 exitCount:1]; - EXPECT_TRUE(NSEqualRects(maximized_frame, [ns_window frame])); - EXPECT_TRUE(window->IsMaximized()); - EXPECT_FALSE(window->IsFullscreen()); - - app_window->Restore(); - EXPECT_TRUE(NSEqualRects(initial_frame, [ns_window frame])); - EXPECT_FALSE(window->IsMaximized()); - - // Fullscreen, Maximize, Restore. - app_window->Fullscreen(); - [waiter waitForEnterCount:2 exitCount:1]; - EXPECT_FALSE(window->IsMaximized()); - EXPECT_TRUE(window->IsFullscreen()); - - app_window->Maximize(); - EXPECT_FALSE(window->IsMaximized()); - EXPECT_TRUE(window->IsFullscreen()); - - app_window->Restore(); - [waiter waitForEnterCount:2 exitCount:2]; - EXPECT_TRUE(NSEqualRects(initial_frame, [ns_window frame])); - EXPECT_FALSE(window->IsMaximized()); - EXPECT_FALSE(window->IsFullscreen()); -} - // Test that, in frameless windows, the web contents has the same size as the // window. IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, Frameless) { diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views_mac.h b/chrome/browser/ui/views/apps/chrome_native_app_window_views_mac.h index 18b057b..5d930c8 100644 --- a/chrome/browser/ui/views/apps/chrome_native_app_window_views_mac.h +++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views_mac.h @@ -5,22 +5,14 @@ #ifndef CHROME_BROWSER_UI_VIEWS_APPS_CHROME_NATIVE_APP_WINDOW_VIEWS_MAC_H_ #define CHROME_BROWSER_UI_VIEWS_APPS_CHROME_NATIVE_APP_WINDOW_VIEWS_MAC_H_ -#import <Foundation/Foundation.h> - -#import "base/mac/scoped_nsobject.h" #include "chrome/browser/ui/views/apps/chrome_native_app_window_views.h" -@class StartResizeNotificationObserver; - // Mac-specific parts of ChromeNativeAppWindowViews. class ChromeNativeAppWindowViewsMac : public ChromeNativeAppWindowViews { public: ChromeNativeAppWindowViewsMac(); ~ChromeNativeAppWindowViewsMac() override; - // Called by |nswindow_observer_| when the window is about to resize. - void OnWindowWillStartLiveResize(); - protected: // ChromeNativeAppWindowViews implementation. void OnBeforeWidgetInit( @@ -31,18 +23,11 @@ class ChromeNativeAppWindowViewsMac : public ChromeNativeAppWindowViews { views::NonClientFrameView* CreateNonStandardAppFrame() override; // ui::BaseWindow implementation. - bool IsMaximized() const override; - gfx::Rect GetRestoredBounds() const override; void Show() override; void ShowInactive() override; void Activate() override; - void Maximize() override; - void Restore() override; void FlashFrame(bool flash) override; - // WidgetObserver implementation. - void OnWidgetCreated(views::Widget* widget) override; - // NativeAppWindow implementation. void UpdateDraggableRegions( const std::vector<extensions::DraggableRegion>& regions) override; @@ -56,12 +41,6 @@ class ChromeNativeAppWindowViewsMac : public ChromeNativeAppWindowViews { // Unset is_hidden_with_app_ and tell the shim to unhide. void UnhideWithoutActivation(); - // Used to notify us about certain NSWindow events. - base::scoped_nsobject<StartResizeNotificationObserver> nswindow_observer_; - - // The bounds of the window just before it was last maximized. - NSRect bounds_before_maximize_; - // Whether this window last became hidden due to a request to hide the entire // app, e.g. via the dock menu or Cmd+H. This is set by Hide/ShowWithApp. bool is_hidden_with_app_; diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views_mac.mm b/chrome/browser/ui/views/apps/chrome_native_app_window_views_mac.mm index ab7e05a..61e9657 100644 --- a/chrome/browser/ui/views/apps/chrome_native_app_window_views_mac.mm +++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views_mac.mm @@ -7,81 +7,19 @@ #import <Cocoa/Cocoa.h> #import "base/mac/scoped_nsobject.h" -#import "base/mac/sdk_forward_declarations.h" #include "chrome/browser/apps/app_shim/extension_app_shim_handler_mac.h" #import "chrome/browser/ui/views/apps/app_window_native_widget_mac.h" #import "chrome/browser/ui/views/apps/native_app_window_frame_view_mac.h" -#import "ui/gfx/mac/coordinate_conversion.h" @interface NSView (WebContentsView) - (void)setMouseDownCanMoveWindow:(BOOL)can_move; @end -// This observer is used to get NSWindowWillStartLiveResizeNotification. We need -// a single hook when animated/user resize begins to save the current bounds. -@interface StartResizeNotificationObserver : NSObject { - @private - // Weak. Owns us. - ChromeNativeAppWindowViewsMac* nativeAppWindow_; -} -- (id)initForNativeAppWindow:(ChromeNativeAppWindowViewsMac*)nativeAppWindow; -- (void)onWindowWillStartLiveResize:(NSNotification*)notification; -- (void)stopObserving; -@end - -@implementation StartResizeNotificationObserver - -- (id)initForNativeAppWindow:(ChromeNativeAppWindowViewsMac*)nativeAppWindow { - if ((self = [super init])) { - nativeAppWindow_ = nativeAppWindow; - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(onWindowWillStartLiveResize:) - name:NSWindowWillStartLiveResizeNotification - object:implicit_cast<ui::BaseWindow*>(nativeAppWindow) - ->GetNativeWindow()]; - } - return self; -} - -- (void)onWindowWillStartLiveResize:(NSNotification*)notification { - nativeAppWindow_->OnWindowWillStartLiveResize(); -} - -- (void)stopObserving { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - nativeAppWindow_ = nullptr; -} - -@end - -namespace { - -bool NSWindowIsMaximized(NSWindow* window) { - // -[NSWindow isZoomed] only works if the zoom button is enabled. - if ([[window standardWindowButton:NSWindowZoomButton] isEnabled]) - return [window isZoomed]; - - // We don't attempt to distinguish between a window that has been explicitly - // maximized versus one that has just been dragged by the user to fill the - // screen. This is the same behavior as -[NSWindow isZoomed] above. - return NSEqualRects([window frame], [[window screen] visibleFrame]); -} - -} // namespace - ChromeNativeAppWindowViewsMac::ChromeNativeAppWindowViewsMac() : is_hidden_with_app_(false) { } ChromeNativeAppWindowViewsMac::~ChromeNativeAppWindowViewsMac() { - [nswindow_observer_ stopObserving]; -} - -void ChromeNativeAppWindowViewsMac::OnWindowWillStartLiveResize() { - if (!NSWindowIsMaximized(GetNativeWindow())) { - bounds_before_maximize_ = [GetNativeWindow() frame]; - } } void ChromeNativeAppWindowViewsMac::OnBeforeWidgetInit( @@ -105,17 +43,6 @@ ChromeNativeAppWindowViewsMac::CreateNonStandardAppFrame() { return new NativeAppWindowFrameViewMac(widget(), this); } -bool ChromeNativeAppWindowViewsMac::IsMaximized() const { - return !IsMinimized() && NSWindowIsMaximized(GetNativeWindow()); -} - -gfx::Rect ChromeNativeAppWindowViewsMac::GetRestoredBounds() const { - if (NSWindowIsMaximized(GetNativeWindow())) - return gfx::ScreenRectFromNSRect(bounds_before_maximize_); - - return ChromeNativeAppWindowViews::GetRestoredBounds(); -} - void ChromeNativeAppWindowViewsMac::Show() { UnhideWithoutActivation(); ChromeNativeAppWindowViews::Show(); @@ -133,37 +60,12 @@ void ChromeNativeAppWindowViewsMac::Activate() { ChromeNativeAppWindowViews::Activate(); } -void ChromeNativeAppWindowViewsMac::Maximize() { - if (IsFullscreen()) - return; - - NSWindow* window = GetNativeWindow(); - if (!NSWindowIsMaximized(window)) - [window setFrame:[[window screen] visibleFrame] display:YES animate:YES]; - - if (IsMinimized()) - [window deminiaturize:nil]; -} - -void ChromeNativeAppWindowViewsMac::Restore() { - NSWindow* window = GetNativeWindow(); - if (NSWindowIsMaximized(window)) - [window setFrame:bounds_before_maximize_ display:YES animate:YES]; - - ChromeNativeAppWindowViews::Restore(); -} - void ChromeNativeAppWindowViewsMac::FlashFrame(bool flash) { apps::ExtensionAppShimHandler::RequestUserAttentionForWindow( app_window(), flash ? apps::APP_SHIM_ATTENTION_CRITICAL : apps::APP_SHIM_ATTENTION_CANCEL); } -void ChromeNativeAppWindowViewsMac::OnWidgetCreated(views::Widget* widget) { - nswindow_observer_.reset( - [[StartResizeNotificationObserver alloc] initForNativeAppWindow:this]); -} - void ChromeNativeAppWindowViewsMac::UpdateDraggableRegions( const std::vector<extensions::DraggableRegion>& regions) { ChromeNativeAppWindowViews::UpdateDraggableRegions(regions); diff --git a/extensions/components/native_app_window/native_app_window_views.cc b/extensions/components/native_app_window/native_app_window_views.cc index 0233623..e80e852 100644 --- a/extensions/components/native_app_window/native_app_window_views.cc +++ b/extensions/components/native_app_window/native_app_window_views.cc @@ -44,10 +44,10 @@ void NativeAppWindowViews::Init(AppWindow* app_window, Observe(app_window_->web_contents()); widget_ = new views::Widget; - widget_->AddObserver(this); InitializeWindow(app_window, create_params); OnViewWasResized(); + widget_->AddObserver(this); } NativeAppWindowViews::~NativeAppWindowViews() { diff --git a/ui/base/test/windowed_nsnotification_observer.h b/ui/base/test/windowed_nsnotification_observer.h index ffecd97..92b897a 100644 --- a/ui/base/test/windowed_nsnotification_observer.h +++ b/ui/base/test/windowed_nsnotification_observer.h @@ -27,10 +27,6 @@ class RunLoop; // Watch for an NSNotification on the default notification center. - (id)initForNotification:(NSString*)name; -// Watch for an NSNotification on the default notification center from a -// particular object. -- (id)initForNotification:(NSString*)name object:(id)sender; - // Watch for an NSNotification on the shared workspace notification center for // the // given application. diff --git a/ui/base/test/windowed_nsnotification_observer.mm b/ui/base/test/windowed_nsnotification_observer.mm index ae8d2f4..02f4517 100644 --- a/ui/base/test/windowed_nsnotification_observer.mm +++ b/ui/base/test/windowed_nsnotification_observer.mm @@ -15,15 +15,11 @@ @implementation WindowedNSNotificationObserver - (id)initForNotification:(NSString*)name { - return [self initForNotification:name object:nil]; -} - -- (id)initForNotification:(NSString*)name object:(id)sender { if ((self = [super init])) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onNotification:) name:name - object:sender]; + object:nil]; } return self; } diff --git a/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm b/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm index 6b4db34..f7c4329 100644 --- a/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm +++ b/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm @@ -149,29 +149,6 @@ TEST_F(BridgedNativeWidgetUITest, FullscreenEnterAndExit) { EXPECT_EQ(restored_bounds, widget_->GetRestoredBounds()); } -// Test that Widget::Restore exits fullscreen. -TEST_F(BridgedNativeWidgetUITest, FullscreenRestore) { - if (base::mac::IsOSSnowLeopard()) - return; - - base::scoped_nsobject<NSWindowFullscreenNotificationWaiter> waiter( - [[NSWindowFullscreenNotificationWaiter alloc] - initWithWindow:test_window()]); - - EXPECT_FALSE(widget_->IsFullscreen()); - const gfx::Rect restored_bounds = widget_->GetRestoredBounds(); - EXPECT_FALSE(restored_bounds.IsEmpty()); - - widget_->SetFullscreen(true); - EXPECT_TRUE(widget_->IsFullscreen()); - [waiter waitForEnterCount:1 exitCount:0]; - - widget_->Restore(); - EXPECT_FALSE(widget_->IsFullscreen()); - [waiter waitForEnterCount:1 exitCount:1]; - EXPECT_EQ(restored_bounds, widget_->GetRestoredBounds()); -} - namespace { // This is used to wait for reposted events to be seen. We can't just use diff --git a/ui/views/widget/native_widget_mac.mm b/ui/views/widget/native_widget_mac.mm index 0cd870c..680abb3 100644 --- a/ui/views/widget/native_widget_mac.mm +++ b/ui/views/widget/native_widget_mac.mm @@ -445,7 +445,6 @@ bool NativeWidgetMac::IsMinimized() const { } void NativeWidgetMac::Restore() { - SetFullscreen(false); [GetNativeWindow() deminiaturize:nil]; } |