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
3 // found in the LICENSE file.
5 #ifndef UI_VIEWS_TEST_WIDGET_TEST_H_
6 #define UI_VIEWS_TEST_WIDGET_TEST_H_
8 #include "ui/gfx/native_widget_types.h"
9 #include "ui/views/test/views_test_base.h"
12 #include "ui/views/widget/native_widget_aura.h"
13 #if !defined(OS_CHROMEOS)
14 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
16 #elif defined(OS_MACOSX)
17 #include "ui/views/widget/native_widget_mac.h"
30 typedef NativeWidgetAura PlatformNativeWidget
;
31 #if !defined(OS_CHROMEOS)
32 typedef DesktopNativeWidgetAura PlatformDesktopNativeWidget
;
34 #elif defined(OS_MACOSX)
35 typedef NativeWidgetMac PlatformNativeWidget
;
36 typedef NativeWidgetMac PlatformDesktopNativeWidget
;
43 } // namespace internal
47 // A widget that assumes mouse capture always works. It won't on Aura in
48 // testing, so we mock it.
49 class NativeWidgetCapture
: public PlatformNativeWidget
{
51 explicit NativeWidgetCapture(internal::NativeWidgetDelegate
* delegate
);
52 ~NativeWidgetCapture() override
;
54 void SetCapture() override
;
55 void ReleaseCapture() override
;
56 bool HasCapture() const override
;
61 DISALLOW_COPY_AND_ASSIGN(NativeWidgetCapture
);
64 class WidgetTest
: public ViewsTestBase
{
66 // Scoped handle that fakes all widgets into claiming they are active. This
67 // allows a test to assume active status does not get stolen by a test that
68 // may be running in parallel. It shouldn't be used in tests that create
70 class FakeActivation
{
72 virtual ~FakeActivation() {}
78 DISALLOW_COPY_AND_ASSIGN(FakeActivation
);
82 ~WidgetTest() override
;
84 NativeWidget
* CreatePlatformNativeWidget(
85 internal::NativeWidgetDelegate
* delegate
);
87 Widget
* CreateTopLevelPlatformWidget();
89 Widget
* CreateTopLevelFramelessPlatformWidget();
91 Widget
* CreateChildPlatformWidget(gfx::NativeView parent_native_view
);
93 Widget
* CreateTopLevelNativeWidget();
95 Widget
* CreateChildNativeWidgetWithParent(Widget
* parent
);
97 Widget
* CreateChildNativeWidget();
99 View
* GetMousePressedHandler(internal::RootView
* root_view
);
101 View
* GetMouseMoveHandler(internal::RootView
* root_view
);
103 View
* GetGestureHandler(internal::RootView
* root_view
);
105 // Simulate a OS-level destruction of the native widget held by |widget|.
106 static void SimulateNativeDestroy(Widget
* widget
);
108 // Return true if |window| is visible according to the native platform.
109 static bool IsNativeWindowVisible(gfx::NativeWindow window
);
111 // Return true if |above| is higher than |below| in the native window Z-order.
112 // Both windows must be visible.
113 static bool IsWindowStackedAbove(Widget
* above
, Widget
* below
);
115 // Return the event processor for |widget|. On aura platforms, this is an
116 // aura::WindowEventDispatcher. Otherwise, it is a bridge to the OS event
118 static ui::EventProcessor
* GetEventProcessor(Widget
* widget
);
120 #if defined(OS_MACOSX)
121 static scoped_ptr
<FakeActivation
> FakeWidgetIsActiveAlways();
125 DISALLOW_COPY_AND_ASSIGN(WidgetTest
);
131 #endif // UI_VIEWS_TEST_WIDGET_TEST_H_