Cast: Stop logging kVideoFrameSentToEncoder and rename a couple events.
[chromium-blink-merge.git] / ui / base / win / hwnd_subclass_unittest.cc
blob520f52b4b1671b57cb8c30221e39fe93281fc8b8
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ui/base/win/hwnd_subclass.h"
7 #include "base/basictypes.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "ui/gfx/win/window_impl.h"
11 namespace ui {
13 namespace {
15 class TestWindow : public gfx::WindowImpl {
16 public:
17 TestWindow() : saw_message(false) {}
18 virtual ~TestWindow() {}
20 bool saw_message;
22 private:
23 // Overridden from gfx::WindowImpl:
24 virtual BOOL ProcessWindowMessage(HWND window,
25 UINT message,
26 WPARAM w_param,
27 LPARAM l_param,
28 LRESULT& result,
29 DWORD msg_map_id) OVERRIDE {
30 if (message == WM_NCHITTEST)
31 saw_message = true;
33 return FALSE; // Results in DefWindowProc().
36 DISALLOW_COPY_AND_ASSIGN(TestWindow);
39 class TestMessageFilter : public HWNDMessageFilter {
40 public:
41 TestMessageFilter() : consume_messages(false), saw_message(false) {}
42 virtual ~TestMessageFilter() {}
44 // Setting to true causes the filter subclass to stop messages from reaching
45 // the subclassed window procedure.
46 bool consume_messages;
48 // True if the message filter saw the message.
49 bool saw_message;
51 private:
52 // Overridden from HWNDMessageFilter:
53 virtual bool FilterMessage(HWND hwnd,
54 UINT message,
55 WPARAM w_param,
56 LPARAM l_param,
57 LRESULT* l_result) OVERRIDE {
58 if (message == WM_NCHITTEST) {
59 saw_message = true;
60 return consume_messages;
62 return false;
65 DISALLOW_COPY_AND_ASSIGN(TestMessageFilter);
68 } // namespace
70 TEST(HWNDSubclassTest, Filtering) {
71 TestWindow window;
72 window.Init(NULL, gfx::Rect(0, 0, 100, 100));
73 EXPECT_TRUE(window.hwnd() != NULL);
76 TestMessageFilter mf;
77 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf);
79 // We are not filtering, so both the filter and the window should receive
80 // this message:
81 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0);
83 EXPECT_TRUE(mf.saw_message);
84 EXPECT_TRUE(window.saw_message);
86 mf.saw_message = false;
87 window.saw_message = false;
89 mf.consume_messages = true;
91 // We are now filtering, so only the filter should see this message:
92 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0);
94 EXPECT_TRUE(mf.saw_message);
95 EXPECT_FALSE(window.saw_message);
99 TEST(HWNDSubclassTest, FilteringMultipleFilters) {
100 TestWindow window;
101 window.Init(NULL, gfx::Rect(0, 0, 100, 100));
102 EXPECT_TRUE(window.hwnd() != NULL);
105 TestMessageFilter mf1;
106 TestMessageFilter mf2;
107 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf1);
108 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf2);
110 // We are not filtering, so both the filter and the window should receive
111 // this message:
112 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0);
114 EXPECT_TRUE(mf1.saw_message);
115 EXPECT_TRUE(mf2.saw_message);
116 EXPECT_TRUE(window.saw_message);
118 mf1.saw_message = false;
119 mf2.saw_message = false;
120 window.saw_message = false;
122 mf1.consume_messages = true;
124 // We are now filtering, so only the filter |mf1| should see this message:
125 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0);
127 EXPECT_TRUE(mf1.saw_message);
128 EXPECT_FALSE(mf2.saw_message);
129 EXPECT_FALSE(window.saw_message);
133 TEST(HWNDSubclassTest, RemoveFilter) {
134 TestWindow window;
135 window.Init(NULL, gfx::Rect(0, 0, 100, 100));
136 EXPECT_TRUE(window.hwnd() != NULL);
139 TestMessageFilter mf1;
140 TestMessageFilter mf2;
141 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf1);
142 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf2);
144 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0);
145 EXPECT_TRUE(mf1.saw_message);
146 EXPECT_TRUE(mf2.saw_message);
147 EXPECT_TRUE(window.saw_message);
149 mf1.saw_message = false;
150 mf2.saw_message = false;
151 window.saw_message = false;
153 // Remove a filter and try sending message again.
154 HWNDSubclass::RemoveFilterFromAllTargets(&mf1);
155 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0);
156 EXPECT_FALSE(mf1.saw_message);
157 EXPECT_TRUE(mf2.saw_message);
158 EXPECT_TRUE(window.saw_message);
162 } // namespace ui