| Index: ui/views/widget/widget_unittest.cc
|
| diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
|
| index 5556db5367fe9ce3f0effc9fa36e2b097143569a..4ad12053519e80f838f7d3fbf5347250f51b5dca 100644
|
| --- a/ui/views/widget/widget_unittest.cc
|
| +++ b/ui/views/widget/widget_unittest.cc
|
| @@ -34,6 +34,10 @@
|
| #include "ui/views/window/native_frame_view.h"
|
|
|
| #if defined(OS_WIN)
|
| +#include "ui/aura/window.h"
|
| +#include "ui/aura/window_tree_host.h"
|
| +#include "ui/base/view_prop.h"
|
| +#include "ui/base/win/window_event_target.h"
|
| #include "ui/views/win/hwnd_util.h"
|
| #endif
|
|
|
| @@ -3384,5 +3388,32 @@ TEST_F(WidgetTest, NonClientWindowValidAfterInit) {
|
| widget->CloseNow();
|
| }
|
|
|
| +#if defined(OS_WIN)
|
| +// This test validates that sending WM_CHAR/WM_SYSCHAR/WM_SYSDEADCHAR
|
| +// messages via the WindowEventTarget interface implemented by the
|
| +// HWNDMessageHandler class does not cause a crash due to an unprocessed
|
| +// event
|
| +TEST_F(WidgetTest, CharMessagesAsKeyboardMessagesDoesNotCrash) {
|
| + Widget widget;
|
| + Widget::InitParams params =
|
| + CreateParams(Widget::InitParams::TYPE_WINDOW);
|
| + params.native_widget = new PlatformDesktopNativeWidget(&widget);
|
| + params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
|
| + widget.Init(params);
|
| + widget.Show();
|
| +
|
| + ui::WindowEventTarget* target =
|
| + reinterpret_cast<ui::WindowEventTarget*>(ui::ViewProp::GetValue(
|
| + widget.GetNativeWindow()->GetHost()->GetAcceleratedWidget(),
|
| + ui::WindowEventTarget::kWin32InputEventTarget));
|
| + EXPECT_NE(nullptr, target);
|
| + bool handled = false;
|
| + target->HandleKeyboardMessage(WM_CHAR, 0, 0, &handled);
|
| + target->HandleKeyboardMessage(WM_SYSCHAR, 0, 0, &handled);
|
| + target->HandleKeyboardMessage(WM_SYSDEADCHAR, 0, 0, &handled);
|
| + widget.CloseNow();
|
| +}
|
| +#endif
|
| +
|
| } // namespace test
|
| } // namespace views
|
|
|