158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef UI_VIEWS_TEST_WIDGET_TEST_H_
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define UI_VIEWS_TEST_WIDGET_TEST_H_
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/native_widget_types.h"
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/views/test/views_test_base.h"
106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if defined(USE_AURA)
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/views/widget/native_widget_aura.h"
136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if !defined(OS_CHROMEOS)
146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif
166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#elif defined(OS_MACOSX)
176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "ui/views/widget/native_widget_mac.h"
186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif
196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)namespace ui {
216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class EventProcessor;
226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace views {
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class NativeWidget;
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class Widget;
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if defined(USE_AURA)
306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)typedef NativeWidgetAura PlatformNativeWidget;
316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if !defined(OS_CHROMEOS)
326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)typedef DesktopNativeWidgetAura PlatformDesktopNativeWidget;
336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif
346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#elif defined(OS_MACOSX)
356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)typedef NativeWidgetMac PlatformNativeWidget;
366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)typedef NativeWidgetMac PlatformDesktopNativeWidget;
376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif
386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace internal {
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class RootView;
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace internal
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace test {
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// A widget that assumes mouse capture always works. It won't on Aura in
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// testing, so we mock it.
496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class NativeWidgetCapture : public PlatformNativeWidget {
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  explicit NativeWidgetCapture(internal::NativeWidgetDelegate* delegate);
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~NativeWidgetCapture();
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void SetCapture() OVERRIDE;
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void ReleaseCapture() OVERRIDE;
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual bool HasCapture() const OVERRIDE;
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  bool mouse_capture_;
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NativeWidgetCapture);
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class WidgetTest : public ViewsTestBase {
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  WidgetTest();
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~WidgetTest();
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  NativeWidget* CreatePlatformNativeWidget(
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      internal::NativeWidgetDelegate* delegate);
7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  Widget* CreateTopLevelPlatformWidget();
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  Widget* CreateTopLevelFramelessPlatformWidget();
7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  Widget* CreateChildPlatformWidget(gfx::NativeView parent_native_view);
7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  Widget* CreateTopLevelNativeWidget();
7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  Widget* CreateChildNativeWidgetWithParent(Widget* parent);
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  Widget* CreateChildNativeWidget();
8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  View* GetMousePressedHandler(internal::RootView* root_view);
8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  View* GetMouseMoveHandler(internal::RootView* root_view);
8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  View* GetGestureHandler(internal::RootView* root_view);
8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // Simulate a OS-level destruction of the native widget held by |widget|.
916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  static void SimulateNativeDestroy(Widget* widget);
926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // Return true if |window| is visible according to the native platform.
946d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  static bool IsNativeWindowVisible(gfx::NativeWindow window);
956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // Return the event processor for |widget|. On aura platforms, this is an
976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // aura::WindowEventDispatcher. Otherwise, it is a bridge to the OS event
986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  // processor.
996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  static ui::EventProcessor* GetEventProcessor(Widget* widget);
1006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WidgetTest);
10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace test
10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace views
10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // UI_VIEWS_TEST_WIDGET_TEST_H_
109