| Index: ui/views/widget/widget_interactive_uitest.cc
|
| diff --git a/ui/views/widget/widget_interactive_uitest.cc b/ui/views/widget/widget_interactive_uitest.cc
|
| index 3340462d064684c91d03eb40e8117f11085409b1..564ddd0f88401cb2e89ce978c53c608f1d9c45ad 100644
|
| --- a/ui/views/widget/widget_interactive_uitest.cc
|
| +++ b/ui/views/widget/widget_interactive_uitest.cc
|
| @@ -9,10 +9,6 @@
|
| #include "base/run_loop.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| -#include "ui/aura/client/focus_client.h"
|
| -#include "ui/aura/env.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/aura/window_tree_host.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| #include "ui/base/ui_base_paths.h"
|
| #include "ui/base/ui_base_switches.h"
|
| @@ -22,17 +18,18 @@
|
| #include "ui/gl/gl_surface.h"
|
| #include "ui/views/controls/textfield/textfield.h"
|
| #include "ui/views/controls/textfield/textfield_test_api.h"
|
| +#include "ui/views/focus/focus_manager.h"
|
| +#include "ui/views/test/focus_manager_test.h"
|
| #include "ui/views/test/widget_test.h"
|
| #include "ui/views/touchui/touch_selection_controller_impl.h"
|
| #include "ui/views/widget/widget.h"
|
| #include "ui/views/window/dialog_delegate.h"
|
| #include "ui/wm/public/activation_client.h"
|
|
|
| -#if !defined(OS_CHROMEOS)
|
| -#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
|
| -#endif
|
| -
|
| #if defined(OS_WIN)
|
| +#include "ui/aura/window.h"
|
| +#include "ui/aura/window_tree_host.h"
|
| +#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
|
| #include "ui/views/win/hwnd_util.h"
|
| #endif
|
|
|
| @@ -175,7 +172,10 @@ class WidgetTestInteractive : public WidgetTest {
|
| DCHECK(controller);
|
| if (controller->context_menu_timer_.IsRunning()) {
|
| controller->context_menu_timer_.Stop();
|
| +// TODO(tapted): Enable this when porting ui/views/touchui to Mac.
|
| +#if !defined(OS_MACOSX)
|
| controller->ContextMenuTimerFired();
|
| +#endif
|
| }
|
| }
|
|
|
| @@ -249,7 +249,7 @@ TEST_F(WidgetTestInteractive, DesktopNativeWidgetAuraActivationAndFocusTest) {
|
| reinterpret_cast<aura::Window*>(NULL));
|
| EXPECT_EQ(activation_client1->GetActiveWindow(), widget1.GetNativeView());
|
| }
|
| -#endif
|
| +#endif // defined(OS_WIN)
|
|
|
| TEST_F(WidgetTestInteractive, CaptureAutoReset) {
|
| Widget* toplevel = CreateTopLevelFramelessPlatformWidget();
|
| @@ -632,7 +632,7 @@ TEST_F(WidgetTestInteractive, WidgetNotActivatedOnFakeActivationMessages) {
|
| EXPECT_EQ(true, widget1.active());
|
| EXPECT_EQ(false, widget2.active());
|
| }
|
| -#endif
|
| +#endif // defined(OS_WIN)
|
|
|
| #if !defined(OS_CHROMEOS)
|
| // Provides functionality to create a window modal dialog.
|
| @@ -655,6 +655,11 @@ class ModalDialogDelegate : public DialogDelegateView {
|
| // Tests whether the focused window is set correctly when a modal window is
|
| // created and destroyed. When it is destroyed it should focus the owner window.
|
| TEST_F(WidgetTestInteractive, WindowModalWindowDestroyedActivationTest) {
|
| + TestWidgetFocusChangeListener focus_listener;
|
| + WidgetFocusManager::GetInstance()->AddFocusChangeListener(&focus_listener);
|
| + const std::vector<NativeViewPair>& focus_changes =
|
| + focus_listener.focus_changes();
|
| +
|
| // Create a top level widget.
|
| Widget top_level_widget;
|
| Widget::InitParams init_params =
|
| @@ -663,13 +668,14 @@ TEST_F(WidgetTestInteractive, WindowModalWindowDestroyedActivationTest) {
|
| gfx::Rect initial_bounds(0, 0, 500, 500);
|
| init_params.bounds = initial_bounds;
|
| init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
|
| - init_params.native_widget = new DesktopNativeWidgetAura(&top_level_widget);
|
| + init_params.native_widget =
|
| + new PlatformDesktopNativeWidget(&top_level_widget);
|
| top_level_widget.Init(init_params);
|
| top_level_widget.Show();
|
|
|
| - aura::Window* top_level_window = top_level_widget.GetNativeWindow();
|
| - EXPECT_EQ(top_level_window, aura::client::GetFocusClient(
|
| - top_level_window)->GetFocusedWindow());
|
| + gfx::NativeView top_level_native_view = top_level_widget.GetNativeView();
|
| + EXPECT_EQ(1u, focus_changes.size());
|
| + EXPECT_EQ(NativeViewPair(NULL, top_level_native_view), focus_changes[0]);
|
|
|
| // Create a modal dialog.
|
| // This instance will be destroyed when the dialog is destroyed.
|
| @@ -677,21 +683,34 @@ TEST_F(WidgetTestInteractive, WindowModalWindowDestroyedActivationTest) {
|
| new ModalDialogDelegate(ui::MODAL_TYPE_WINDOW);
|
|
|
| Widget* modal_dialog_widget = views::DialogDelegate::CreateDialogWidget(
|
| - dialog_delegate, NULL, top_level_widget.GetNativeWindow());
|
| + dialog_delegate, NULL, top_level_widget.GetNativeView());
|
| modal_dialog_widget->SetBounds(gfx::Rect(100, 100, 200, 200));
|
| modal_dialog_widget->Show();
|
| - aura::Window* dialog_window = modal_dialog_widget->GetNativeWindow();
|
| - EXPECT_EQ(dialog_window, aura::client::GetFocusClient(
|
| - top_level_window)->GetFocusedWindow());
|
| +
|
| + gfx::NativeView modal_native_view = modal_dialog_widget->GetNativeView();
|
| + EXPECT_EQ(3u, focus_changes.size());
|
| + EXPECT_EQ(NativeViewPair(top_level_native_view, modal_native_view),
|
| + focus_changes[1]);
|
| + EXPECT_EQ(NativeViewPair(top_level_native_view, modal_native_view),
|
| + focus_changes[2]);
|
|
|
| modal_dialog_widget->CloseNow();
|
| - EXPECT_EQ(top_level_window, aura::client::GetFocusClient(
|
| - top_level_window)->GetFocusedWindow());
|
| +
|
| + EXPECT_EQ(5u, focus_changes.size());
|
| + EXPECT_EQ(NativeViewPair(modal_native_view, top_level_native_view),
|
| + focus_changes[3]);
|
| + EXPECT_EQ(NativeViewPair(modal_native_view, top_level_native_view),
|
| + focus_changes[4]);
|
| +
|
| top_level_widget.CloseNow();
|
| + WidgetFocusManager::GetInstance()->RemoveFocusChangeListener(&focus_listener);
|
| }
|
|
|
| // Test that when opening a system-modal window, capture is released.
|
| TEST_F(WidgetTestInteractive, SystemModalWindowReleasesCapture) {
|
| + TestWidgetFocusChangeListener focus_listener;
|
| + WidgetFocusManager::GetInstance()->AddFocusChangeListener(&focus_listener);
|
| +
|
| // Create a top level widget.
|
| Widget top_level_widget;
|
| Widget::InitParams init_params =
|
| @@ -700,34 +719,35 @@ TEST_F(WidgetTestInteractive, SystemModalWindowReleasesCapture) {
|
| gfx::Rect initial_bounds(0, 0, 500, 500);
|
| init_params.bounds = initial_bounds;
|
| init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
|
| - init_params.native_widget = new DesktopNativeWidgetAura(&top_level_widget);
|
| + init_params.native_widget =
|
| + new PlatformDesktopNativeWidget(&top_level_widget);
|
| top_level_widget.Init(init_params);
|
| top_level_widget.Show();
|
|
|
| - aura::Window* top_level_window = top_level_widget.GetNativeWindow();
|
| - EXPECT_EQ(top_level_window, aura::client::GetFocusClient(
|
| - top_level_window)->GetFocusedWindow());
|
| + EXPECT_EQ(top_level_widget.GetNativeView(),
|
| + focus_listener.focus_changes().back().second);;
|
|
|
| - EXPECT_FALSE(top_level_window->HasCapture());
|
| - top_level_window->SetCapture();
|
| - EXPECT_TRUE(top_level_window->HasCapture());
|
| + EXPECT_FALSE(top_level_widget.HasCapture());
|
| + top_level_widget.SetCapture(NULL);
|
| + EXPECT_TRUE(top_level_widget.HasCapture());
|
|
|
| // Create a modal dialog.
|
| ModalDialogDelegate* dialog_delegate =
|
| new ModalDialogDelegate(ui::MODAL_TYPE_SYSTEM);
|
|
|
| Widget* modal_dialog_widget = views::DialogDelegate::CreateDialogWidget(
|
| - dialog_delegate, NULL, top_level_widget.GetNativeWindow());
|
| + dialog_delegate, NULL, top_level_widget.GetNativeView());
|
| modal_dialog_widget->SetBounds(gfx::Rect(100, 100, 200, 200));
|
| modal_dialog_widget->Show();
|
|
|
| - EXPECT_FALSE(top_level_window->HasCapture());
|
| + EXPECT_FALSE(top_level_widget.HasCapture());
|
|
|
| modal_dialog_widget->CloseNow();
|
| top_level_widget.CloseNow();
|
| + WidgetFocusManager::GetInstance()->RemoveFocusChangeListener(&focus_listener);
|
| }
|
|
|
| -#endif
|
| +#endif // !defined(OS_CHROMEOS)
|
|
|
| TEST_F(WidgetTestInteractive, CanActivateFlagIsHonored) {
|
| Widget widget;
|
| @@ -737,7 +757,7 @@ TEST_F(WidgetTestInteractive, CanActivateFlagIsHonored) {
|
| init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
|
| init_params.activatable = Widget::InitParams::ACTIVATABLE_NO;
|
| #if !defined(OS_CHROMEOS)
|
| - init_params.native_widget = new DesktopNativeWidgetAura(&widget);
|
| + init_params.native_widget = new PlatformDesktopNativeWidget(&widget);
|
| #endif // !defined(OS_CHROMEOS)
|
| widget.Init(init_params);
|
|
|
| @@ -771,7 +791,7 @@ TEST_F(WidgetTestInteractive, TouchSelectionQuickMenuIsNotActivated) {
|
|
|
| RunPendingMessages();
|
|
|
| - ui::test::EventGenerator generator(widget.GetNativeView()->GetRootWindow());
|
| + ui::test::EventGenerator generator(widget.GetNativeWindow());
|
| generator.GestureTapAt(gfx::Point(10, 10));
|
| ShowQuickMenuImmediately(static_cast<TouchSelectionControllerImpl*>(
|
| textfield_test_api.touch_selection_controller()));
|
| @@ -874,7 +894,7 @@ class WidgetCaptureTest : public ViewsTestBase {
|
| Widget* widget) {
|
| #if !defined(OS_CHROMEOS)
|
| if (create_desktop_native_widget)
|
| - return new DesktopNativeWidgetAura(widget);
|
| + return new PlatformDesktopNativeWidget(widget);
|
| #endif
|
| return NULL;
|
| }
|
| @@ -919,11 +939,10 @@ TEST_F(WidgetCaptureTest, FailedCaptureRequestIsNoop) {
|
| EXPECT_FALSE(widget.HasCapture());
|
|
|
| widget.Show();
|
| - ui::MouseEvent mouse_press_event(ui::ET_MOUSE_PRESSED, gfx::Point(300, 10),
|
| - gfx::Point(300, 10), ui::EF_NONE, ui::EF_NONE);
|
| - ui::EventDispatchDetails details = widget.GetNativeWindow()->GetHost()->
|
| - event_processor()->OnEventFromSource(&mouse_press_event);
|
| - ASSERT_FALSE(details.dispatcher_destroyed);
|
| + ui::test::EventGenerator generator(GetContext(), widget.GetNativeWindow());
|
| + generator.set_current_location(gfx::Point(300, 10));
|
| + generator.PressLeftButton();
|
| +
|
| EXPECT_FALSE(mouse_view1->pressed());
|
| EXPECT_TRUE(mouse_view2->pressed());
|
| }
|
| @@ -953,11 +972,10 @@ TEST_F(WidgetCaptureTest, MouseExitOnCaptureGrab) {
|
| widget2.Show();
|
| widget2.SetBounds(gfx::Rect(400, 0, 300, 300));
|
|
|
| - ui::MouseEvent mouse_move_event(ui::ET_MOUSE_MOVED, gfx::Point(100, 100),
|
| - gfx::Point(100, 100), ui::EF_NONE, ui::EF_NONE);
|
| - ui::EventDispatchDetails details = widget1.GetNativeWindow()->GetHost()->
|
| - event_processor()->OnEventFromSource(&mouse_move_event);
|
| - ASSERT_FALSE(details.dispatcher_destroyed);
|
| + ui::test::EventGenerator generator(widget1.GetNativeWindow());
|
| + generator.set_current_location(gfx::Point(100, 100));
|
| + generator.MoveMouseBy(0, 0);
|
| +
|
| EXPECT_EQ(1, mouse_view1->EnteredCalls());
|
| EXPECT_EQ(0, mouse_view1->ExitedCalls());
|
|
|
| @@ -967,7 +985,7 @@ TEST_F(WidgetCaptureTest, MouseExitOnCaptureGrab) {
|
| // in addition to the one generated by Chrome.
|
| EXPECT_LT(0, mouse_view1->ExitedCalls());
|
| }
|
| -#endif
|
| +#endif // !defined(OS_CHROMEOS)
|
|
|
| namespace {
|
|
|
| @@ -1006,7 +1024,7 @@ TEST_F(WidgetCaptureTest, SetCaptureToNonToplevel) {
|
| Widget::InitParams child_params =
|
| CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
|
| child_params.parent = toplevel.GetNativeView();
|
| - child_params.context = toplevel.GetNativeView();
|
| + child_params.context = toplevel.GetNativeWindow();
|
| child->Init(child_params);
|
|
|
| CaptureOnActivationObserver observer;
|
| @@ -1083,7 +1101,7 @@ TEST_F(WidgetCaptureTest, MouseEventDispatchedToRightWindow) {
|
| EXPECT_TRUE(widget1.GetAndClearGotMouseEvent());
|
| EXPECT_FALSE(widget2.GetAndClearGotMouseEvent());
|
| }
|
| -#endif
|
| +#endif // defined(OS_WIN)
|
|
|
| } // namespace test
|
| } // namespace views
|
|
|