Chromium Code Reviews| Index: ui/views/widget/widget_unittest.cc |
| diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc |
| index 95fc77e0acd3fda26940cc855991f4f6d59d608a..115f31c99ceaa6306f987c5aa218aeae2df24587 100644 |
| --- a/ui/views/widget/widget_unittest.cc |
| +++ b/ui/views/widget/widget_unittest.cc |
| @@ -7,7 +7,6 @@ |
| #include <set> |
| #include "base/bind.h" |
| -#include "base/environment.h" |
| #include "base/macros.h" |
| #include "base/message_loop/message_loop.h" |
| #include "base/run_loop.h" |
| @@ -48,11 +47,6 @@ |
| #include "base/mac/mac_util.h" |
| #endif |
| -#if defined(USE_X11) && !defined(OS_CHROMEOS) |
| -#include "ui/base/x/x11_util_internal.h" // nogncheck |
| -#include "ui/gfx/x/x11_switches.h" // nogncheck |
| -#endif |
| - |
| namespace views { |
| namespace test { |
| @@ -3743,50 +3737,86 @@ void InitializeWidgetForOpacity( |
| Widget& widget, |
| Widget::InitParams init_params, |
| const Widget::InitParams::WindowOpacity opacity) { |
| -#if defined(USE_X11) |
| - // testing/xvfb.py runs xvfb and xcompmgr. |
| - std::unique_ptr<base::Environment> env(base::Environment::Create()); |
| - bool has_compositing_manager = env->HasVar("_CHROMIUM_INSIDE_XVFB"); |
| - int depth = 0; |
| - ui::ChooseVisualForWindow(has_compositing_manager, NULL, &depth); |
| - |
| - if (has_compositing_manager) |
| - EXPECT_EQ(depth, 32); |
| -#endif |
| - |
| + init_params.child = false; |
| init_params.opacity = opacity; |
| init_params.show_state = ui::SHOW_STATE_NORMAL; |
| + init_params.parent = nullptr; |
|
sadrul
2016/09/02 19:53:24
Do you need to explicitly set child and parent her
Julien Isorce Samsung
2016/09/02 20:59:08
No I will remove it, all are initialized to 0.
|
| init_params.bounds = gfx::Rect(0, 0, 500, 500); |
| init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| init_params.native_widget = |
| CreatePlatformDesktopNativeWidgetImpl(init_params, &widget, nullptr); |
| widget.Init(init_params); |
| +} |
| + |
| +class CompositingWidgetTest : public views::test::WidgetTest { |
| + public: |
| + CompositingWidgetTest() |
| + : widget_types_{Widget::InitParams::TYPE_WINDOW, |
| + Widget::InitParams::TYPE_PANEL, |
| + Widget::InitParams::TYPE_WINDOW_FRAMELESS, |
| + Widget::InitParams::TYPE_CONTROL, |
| + Widget::InitParams::TYPE_POPUP, |
| + Widget::InitParams::TYPE_MENU, |
| + Widget::InitParams::TYPE_TOOLTIP, |
| + Widget::InitParams::TYPE_BUBBLE, |
| + Widget::InitParams::TYPE_DRAG} {} |
| + ~CompositingWidgetTest() override {} |
| + |
| + void CheckAllWidgetsForOpacity( |
| + const Widget::InitParams::WindowOpacity opacity) { |
| + for (const auto& widget_type : widget_types_) { |
| +#if defined(OS_MACOSX) |
| + // Tooltips are native on Mac. See BridgedNativeWidget::Init. |
| + if (widget_type == Widget::InitParams::TYPE_TOOLTIP) |
| + continue; |
| +#elif defined(OS_WIN) |
| + // Other widget types would require to create a parent window and the |
| + // the purpose of this test is mainly X11 in the first place. |
| + if (widget_type != Widget::InitParams::TYPE_WINDOW) |
| + continue; |
| +#endif |
| + Widget widget; |
| + InitializeWidgetForOpacity(widget, CreateParams(widget_type), opacity); |
| + |
| + // Use NativeWidgetAura directly. |
| + if (IsMus() && |
| + (widget_type == Widget::InitParams::TYPE_WINDOW_FRAMELESS || |
| + widget_type == Widget::InitParams::TYPE_CONTROL)) |
| + continue; |
| + |
| + EXPECT_EQ(IsNativeWindowTransparent(widget.GetNativeWindow()), |
| + widget.ShouldWindowContentsBeTransparent()); |
| + |
| + // When using the Mandoline UI Service, the translucency does not rely on |
| + // the widget type. |
| + if (IsMus()) |
| + continue; |
| #if defined(USE_X11) |
| - if (has_compositing_manager) |
| - EXPECT_TRUE(widget.IsTranslucentWindowOpacitySupported()); |
| + if (HasCompositingManager() && |
| + (widget_type == Widget::InitParams::TYPE_DRAG || |
| + widget_type == Widget::InitParams::TYPE_WINDOW)) { |
| + EXPECT_TRUE(widget.IsTranslucentWindowOpacitySupported()); |
| + } else { |
| + EXPECT_FALSE(widget.IsTranslucentWindowOpacitySupported()); |
| + } |
| #endif |
| -} |
| + } |
| + } |
| + |
| + protected: |
|
sadrul
2016/09/02 19:53:24
private?
Also, DISALLOW_COPY_AND_ASSIGN
Julien Isorce Samsung
2016/09/02 20:59:08
Done.
|
| + const std::vector<Widget::InitParams::Type> widget_types_; |
| +}; |
| } // namespace |
| // Test opacity when compositing is enabled. |
| -TEST_F(WidgetTest, Transparency_DesktopWidgetInferOpacity) { |
| - Widget widget; |
| - InitializeWidgetForOpacity(widget, |
| - CreateParams(Widget::InitParams::TYPE_WINDOW), |
| - Widget::InitParams::INFER_OPACITY); |
| - EXPECT_EQ(IsNativeWindowTransparent(widget.GetNativeWindow()), |
| - widget.ShouldWindowContentsBeTransparent()); |
| +TEST_F(CompositingWidgetTest, Transparency_DesktopWidgetInferOpacity) { |
| + CheckAllWidgetsForOpacity(Widget::InitParams::INFER_OPACITY); |
| } |
| -TEST_F(WidgetTest, Transparency_DesktopWidgetOpaque) { |
| - Widget widget; |
| - InitializeWidgetForOpacity(widget, |
| - CreateParams(Widget::InitParams::TYPE_WINDOW), |
| - Widget::InitParams::OPAQUE_WINDOW); |
| - EXPECT_EQ(IsNativeWindowTransparent(widget.GetNativeWindow()), |
| - widget.ShouldWindowContentsBeTransparent()); |
| +TEST_F(CompositingWidgetTest, Transparency_DesktopWidgetOpaque) { |
| + CheckAllWidgetsForOpacity(Widget::InitParams::OPAQUE_WINDOW); |
| } |
| // Failing on Mac. http://cbrug.com/623421 |
| @@ -3797,13 +3827,8 @@ TEST_F(WidgetTest, Transparency_DesktopWidgetOpaque) { |
| #define MAYBE_Transparency_DesktopWidgetTranslucent \ |
| Transparency_DesktopWidgetTranslucent |
| #endif |
| -TEST_F(WidgetTest, MAYBE_Transparency_DesktopWidgetTranslucent) { |
| - Widget widget; |
| - InitializeWidgetForOpacity(widget, |
| - CreateParams(Widget::InitParams::TYPE_WINDOW), |
| - Widget::InitParams::TRANSLUCENT_WINDOW); |
| - EXPECT_EQ(IsNativeWindowTransparent(widget.GetNativeWindow()), |
| - widget.ShouldWindowContentsBeTransparent()); |
| +TEST_F(CompositingWidgetTest, MAYBE_Transparency_DesktopWidgetTranslucent) { |
| + CheckAllWidgetsForOpacity(Widget::InitParams::TRANSLUCENT_WINDOW); |
| } |
| #endif // !defined(OS_CHROMEOS) |