Index: ui/views/widget/desktop_aura/x11_topmost_window_finder_interactive_uitest.cc |
diff --git a/ui/views/widget/desktop_aura/x11_topmost_window_finder_interactive_uitest.cc b/ui/views/widget/desktop_aura/x11_topmost_window_finder_interactive_uitest.cc |
index 0a930a2a1ae4e7089ef27a0113885e6ff40b7ba2..a3ca3462e077878bfc6292d42d4bd7f41321ac2e 100644 |
--- a/ui/views/widget/desktop_aura/x11_topmost_window_finder_interactive_uitest.cc |
+++ b/ui/views/widget/desktop_aura/x11_topmost_window_finder_interactive_uitest.cc |
@@ -356,6 +356,51 @@ TEST_F(X11TopmostWindowFinderTest, NonRectangular) { |
XDestroyWindow(xdisplay(), xid2); |
} |
+// Test that a window with an empty shape are properly handled. |
+TEST_F(X11TopmostWindowFinderTest, NonRectangularEmptyShape) { |
+ if (!ui::IsShapeExtensionAvailable()) |
+ return; |
+ |
+ scoped_ptr<Widget> widget1( |
+ CreateAndShowWidget(gfx::Rect(100, 100, 100, 100))); |
+ XID xid1 = widget1->GetNativeWindow()->GetHost()->GetAcceleratedWidget(); |
+ SkRegion* skregion1 = new SkRegion; |
+ skregion1->op(SkIRect::MakeXYWH(0, 0, 0, 0), SkRegion::kUnion_Op); |
+ // Widget takes ownership of |skregion1|. |
+ widget1->SetShape(skregion1); |
+ |
+ XID xids[] = { xid1 }; |
+ StackingClientListWaiter stack_waiter(xids, arraysize(xids)); |
+ stack_waiter.Wait(); |
+ ui::X11EventSource::GetInstance()->DispatchXEvents(); |
+ |
+ EXPECT_NE(xid1, FindTopmostXWindowAt(105, 105)); |
+} |
+ |
+// Test that setting a Null shape removes the shape. |
+TEST_F(X11TopmostWindowFinderTest, NonRectangularNullShape) { |
+ if (!ui::IsShapeExtensionAvailable()) |
+ return; |
+ |
+ scoped_ptr<Widget> widget1( |
+ CreateAndShowWidget(gfx::Rect(100, 100, 100, 100))); |
+ XID xid1 = widget1->GetNativeWindow()->GetHost()->GetAcceleratedWidget(); |
+ SkRegion* skregion1 = new SkRegion; |
+ skregion1->op(SkIRect::MakeXYWH(0, 0, 0, 0), SkRegion::kUnion_Op); |
+ // Widget takes ownership of |skregion1|. |
+ widget1->SetShape(skregion1); |
+ |
+ // Remove the shape - this is now just a normal window. |
+ widget1->SetShape(NULL); |
+ |
+ XID xids[] = { xid1 }; |
+ StackingClientListWaiter stack_waiter(xids, arraysize(xids)); |
+ stack_waiter.Wait(); |
+ ui::X11EventSource::GetInstance()->DispatchXEvents(); |
+ |
+ EXPECT_EQ(xid1, FindTopmostXWindowAt(105, 105)); |
+} |
+ |
// Test that the TopmostWindowFinder finds windows which belong to menus |
// (which may or may not belong to Chrome). |
TEST_F(X11TopmostWindowFinderTest, Menu) { |