| Index: ui/views/widget/native_widget_mac_interactive_uitest.mm
|
| diff --git a/ui/views/widget/native_widget_mac_interactive_uitest.mm b/ui/views/widget/native_widget_mac_interactive_uitest.mm
|
| index 8f192662b248fed767728b6c73fb9181ff582065..88d51e2382d7cd0f352f3b8450e796b5a7e34340 100644
|
| --- a/ui/views/widget/native_widget_mac_interactive_uitest.mm
|
| +++ b/ui/views/widget/native_widget_mac_interactive_uitest.mm
|
| @@ -6,6 +6,7 @@
|
|
|
| #import <Cocoa/Cocoa.h>
|
|
|
| +#import "base/mac/mac_util.h"
|
| #import "base/mac/scoped_nsobject.h"
|
| #include "base/macros.h"
|
| #import "ui/base/test/windowed_nsnotification_observer.h"
|
| @@ -133,6 +134,83 @@ TEST_P(NativeWidgetMacInteractiveUITest, ShowInactiveIgnoresKeyStatus) {
|
| widget->CloseNow();
|
| }
|
|
|
| +namespace {
|
| +
|
| +// Show |widget| and wait for it to become the key window.
|
| +void ShowKeyWindow(Widget* widget) {
|
| + base::scoped_nsobject<WindowedNSNotificationObserver> waiter(
|
| + [[WindowedNSNotificationObserver alloc]
|
| + initForNotification:NSWindowDidBecomeKeyNotification
|
| + object:widget->GetNativeWindow()]);
|
| + widget->Show();
|
| + EXPECT_TRUE([waiter wait]);
|
| + EXPECT_TRUE([widget->GetNativeWindow() isKeyWindow]);
|
| +}
|
| +
|
| +NSData* ViewAsTIFF(NSView* view) {
|
| + NSBitmapImageRep* bitmap =
|
| + [view bitmapImageRepForCachingDisplayInRect:[view bounds]];
|
| + [view cacheDisplayInRect:[view bounds] toBitmapImageRep:bitmap];
|
| + return [bitmap TIFFRepresentation];
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +// Test that parent windows keep their traffic lights enabled when showing
|
| +// dialogs.
|
| +TEST_F(NativeWidgetMacInteractiveUITest, ParentWindowTrafficLights) {
|
| + // Snow leopard doesn't have -[NSWindow _sharesParentKeyState].
|
| + if (base::mac::IsOSSnowLeopard())
|
| + return;
|
| +
|
| + Widget* parent_widget = CreateTopLevelPlatformWidget();
|
| + parent_widget->SetBounds(gfx::Rect(100, 100, 100, 100));
|
| + ShowKeyWindow(parent_widget);
|
| +
|
| + NSWindow* parent = parent_widget->GetNativeWindow();
|
| + EXPECT_TRUE([parent isMainWindow]);
|
| +
|
| + NSButton* button = [parent standardWindowButton:NSWindowCloseButton];
|
| + EXPECT_TRUE(button);
|
| + NSData* active_button_image = ViewAsTIFF(button);
|
| + EXPECT_TRUE(active_button_image);
|
| +
|
| + // Create an activatable frameless child. Frameless so that it doesn't have
|
| + // traffic lights of its own, and activatable so that it can take key status.
|
| + Widget* child_widget = new Widget;
|
| + Widget::InitParams params(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
|
| + params.native_widget = new NativeWidgetMac(child_widget);
|
| + params.bounds = gfx::Rect(130, 130, 100, 100);
|
| + params.parent = parent_widget->GetNativeView();
|
| + child_widget->Init(params);
|
| + ShowKeyWindow(child_widget);
|
| +
|
| + // Ensure the button instance is still valid.
|
| + EXPECT_EQ(button, [parent standardWindowButton:NSWindowCloseButton]);
|
| +
|
| + // Parent window should still be main, and have its traffic lights active.
|
| + EXPECT_TRUE([parent isMainWindow]);
|
| + EXPECT_FALSE([parent isKeyWindow]);
|
| +
|
| + // Enabled status doesn't actually change, but check anyway.
|
| + EXPECT_TRUE([button isEnabled]);
|
| + NSData* button_image_with_child = ViewAsTIFF(button);
|
| + EXPECT_TRUE([active_button_image isEqualToData:button_image_with_child]);
|
| +
|
| + // Verify that activating some other random window does change the button.
|
| + Widget* other_widget = CreateTopLevelPlatformWidget();
|
| + other_widget->SetBounds(gfx::Rect(200, 200, 100, 100));
|
| + ShowKeyWindow(other_widget);
|
| + EXPECT_FALSE([parent isMainWindow]);
|
| + EXPECT_FALSE([parent isKeyWindow]);
|
| + EXPECT_TRUE([button isEnabled]);
|
| + NSData* inactive_button_image = ViewAsTIFF(button);
|
| + EXPECT_FALSE([active_button_image isEqualToData:inactive_button_image]);
|
| +
|
| + other_widget->CloseNow();
|
| + parent_widget->CloseNow();
|
| +}
|
| +
|
| INSTANTIATE_TEST_CASE_P(NativeWidgetMacInteractiveUITestInstance,
|
| NativeWidgetMacInteractiveUITest,
|
| ::testing::Bool());
|
|
|