| Index: ui/base/win/hwnd_subclass_unittest.cc
|
| ===================================================================
|
| --- ui/base/win/hwnd_subclass_unittest.cc (revision 0)
|
| +++ ui/base/win/hwnd_subclass_unittest.cc (revision 0)
|
| @@ -0,0 +1,101 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/base/win/window_impl.h"
|
| +#include "ui/base/win/hwnd_subclass.h"
|
| +
|
| +namespace ui {
|
| +
|
| +typedef testing::Test HWNDSubclassTest;
|
| +
|
| +namespace {
|
| +
|
| +class TestWindow : public ui::WindowImpl {
|
| + public:
|
| + TestWindow() : saw_message(false) {}
|
| + virtual ~TestWindow() {}
|
| +
|
| + bool saw_message;
|
| +
|
| + private:
|
| + // Overridden from ui::WindowImpl:
|
| + virtual BOOL ProcessWindowMessage(HWND window,
|
| + UINT message,
|
| + WPARAM w_param,
|
| + LPARAM l_param,
|
| + LRESULT& result,
|
| + DWORD msg_map_id) OVERRIDE {
|
| + if (message == WM_NCHITTEST)
|
| + saw_message = true;
|
| +
|
| + return FALSE; // Results in DefWindowProc().
|
| + }
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestWindow);
|
| +};
|
| +
|
| +class TestMessageFilter : public HWNDMessageFilter {
|
| + public:
|
| + TestMessageFilter() : consume_messages(false), saw_message(false) {}
|
| + virtual ~TestMessageFilter() {}
|
| +
|
| + // Setting to true causes the filter subclass to stop messages from reaching
|
| + // the subclassed window procedure.
|
| + bool consume_messages;
|
| +
|
| + // True if the message filter saw the message.
|
| + bool saw_message;
|
| +
|
| + private:
|
| + // Overridden from HWNDMessageFilter:
|
| + virtual bool FilterMessage(HWND hwnd,
|
| + UINT message,
|
| + WPARAM w_param,
|
| + LPARAM l_param,
|
| + LRESULT* l_result) OVERRIDE {
|
| + if (message == WM_NCHITTEST) {
|
| + saw_message = true;
|
| + return consume_messages;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestMessageFilter);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +TEST_F(HWNDSubclassTest, Filtering) {
|
| + TestWindow window;
|
| + window.Init(NULL, gfx::Rect(0, 0, 100, 100));
|
| + EXPECT_TRUE(window.hwnd() != NULL);
|
| +
|
| + {
|
| + TestMessageFilter* mf = new TestMessageFilter;
|
| + HWNDSubclass subclass(window.hwnd());
|
| + subclass.SetFilter(mf);
|
| +
|
| + // We are not filtering, so both the filter and the window should receive
|
| + // this message:
|
| + ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0);
|
| +
|
| + EXPECT_TRUE(mf->saw_message);
|
| + EXPECT_TRUE(window.saw_message);
|
| +
|
| + mf->saw_message = false;
|
| + window.saw_message = false;
|
| +
|
| + mf->consume_messages = true;
|
| +
|
| + // We are now filtering, so only the filter should see this message:
|
| + ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0);
|
| +
|
| + EXPECT_TRUE(mf->saw_message);
|
| + EXPECT_FALSE(window.saw_message);
|
| + }
|
| +}
|
| +
|
| +} // namespace ui
|
|
|
| Property changes on: ui\base\win\hwnd_subclass_unittest.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|