OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
| 5 #include "ui/base/win/hwnd_subclass.h" |
| 6 |
5 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
6 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
7 #include "ui/base/win/window_impl.h" | 9 #include "ui/base/win/window_impl.h" |
8 #include "ui/base/win/hwnd_subclass.h" | |
9 | 10 |
10 namespace ui { | 11 namespace ui { |
11 | 12 |
12 typedef testing::Test HWNDSubclassTest; | |
13 | |
14 namespace { | 13 namespace { |
15 | 14 |
16 class TestWindow : public ui::WindowImpl { | 15 class TestWindow : public ui::WindowImpl { |
17 public: | 16 public: |
18 TestWindow() : saw_message(false) {} | 17 TestWindow() : saw_message(false) {} |
19 virtual ~TestWindow() {} | 18 virtual ~TestWindow() {} |
20 | 19 |
21 bool saw_message; | 20 bool saw_message; |
22 | 21 |
23 private: | 22 private: |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 return consume_messages; | 60 return consume_messages; |
62 } | 61 } |
63 return false; | 62 return false; |
64 } | 63 } |
65 | 64 |
66 DISALLOW_COPY_AND_ASSIGN(TestMessageFilter); | 65 DISALLOW_COPY_AND_ASSIGN(TestMessageFilter); |
67 }; | 66 }; |
68 | 67 |
69 } // namespace | 68 } // namespace |
70 | 69 |
71 TEST_F(HWNDSubclassTest, Filtering) { | 70 TEST(HWNDSubclassTest, Filtering) { |
72 TestWindow window; | 71 TestWindow window; |
73 window.Init(NULL, gfx::Rect(0, 0, 100, 100)); | 72 window.Init(NULL, gfx::Rect(0, 0, 100, 100)); |
74 EXPECT_TRUE(window.hwnd() != NULL); | 73 EXPECT_TRUE(window.hwnd() != NULL); |
75 | 74 |
76 { | 75 { |
77 TestMessageFilter mf; | 76 TestMessageFilter mf; |
78 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf); | 77 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf); |
79 | 78 |
80 // We are not filtering, so both the filter and the window should receive | 79 // We are not filtering, so both the filter and the window should receive |
81 // this message: | 80 // this message: |
82 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0); | 81 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0); |
83 | 82 |
84 EXPECT_TRUE(mf.saw_message); | 83 EXPECT_TRUE(mf.saw_message); |
85 EXPECT_TRUE(window.saw_message); | 84 EXPECT_TRUE(window.saw_message); |
86 | 85 |
87 mf.saw_message = false; | 86 mf.saw_message = false; |
88 window.saw_message = false; | 87 window.saw_message = false; |
89 | 88 |
90 mf.consume_messages = true; | 89 mf.consume_messages = true; |
91 | 90 |
92 // We are now filtering, so only the filter should see this message: | 91 // We are now filtering, so only the filter should see this message: |
93 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0); | 92 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0); |
94 | 93 |
95 EXPECT_TRUE(mf.saw_message); | 94 EXPECT_TRUE(mf.saw_message); |
96 EXPECT_FALSE(window.saw_message); | 95 EXPECT_FALSE(window.saw_message); |
97 } | 96 } |
98 } | 97 } |
99 | 98 |
100 TEST_F(HWNDSubclassTest, FilteringMultipleFilters) { | 99 TEST(HWNDSubclassTest, FilteringMultipleFilters) { |
101 TestWindow window; | 100 TestWindow window; |
102 window.Init(NULL, gfx::Rect(0, 0, 100, 100)); | 101 window.Init(NULL, gfx::Rect(0, 0, 100, 100)); |
103 EXPECT_TRUE(window.hwnd() != NULL); | 102 EXPECT_TRUE(window.hwnd() != NULL); |
104 | 103 |
105 { | 104 { |
106 TestMessageFilter mf1; | 105 TestMessageFilter mf1; |
107 TestMessageFilter mf2; | 106 TestMessageFilter mf2; |
108 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf1); | 107 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf1); |
109 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf2); | 108 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf2); |
110 | 109 |
(...skipping 13 matching lines...) Expand all Loading... |
124 | 123 |
125 // We are now filtering, so only the filter |mf1| should see this message: | 124 // We are now filtering, so only the filter |mf1| should see this message: |
126 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0); | 125 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0); |
127 | 126 |
128 EXPECT_TRUE(mf1.saw_message); | 127 EXPECT_TRUE(mf1.saw_message); |
129 EXPECT_FALSE(mf2.saw_message); | 128 EXPECT_FALSE(mf2.saw_message); |
130 EXPECT_FALSE(window.saw_message); | 129 EXPECT_FALSE(window.saw_message); |
131 } | 130 } |
132 } | 131 } |
133 | 132 |
134 TEST_F(HWNDSubclassTest, RemoveFilter) { | 133 TEST(HWNDSubclassTest, RemoveFilter) { |
135 TestWindow window; | 134 TestWindow window; |
136 window.Init(NULL, gfx::Rect(0, 0, 100, 100)); | 135 window.Init(NULL, gfx::Rect(0, 0, 100, 100)); |
137 EXPECT_TRUE(window.hwnd() != NULL); | 136 EXPECT_TRUE(window.hwnd() != NULL); |
138 | 137 |
139 { | 138 { |
140 TestMessageFilter mf1; | 139 TestMessageFilter mf1; |
141 TestMessageFilter mf2; | 140 TestMessageFilter mf2; |
142 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf1); | 141 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf1); |
143 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf2); | 142 HWNDSubclass::AddFilterToTarget(window.hwnd(), &mf2); |
144 | 143 |
145 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0); | 144 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0); |
146 EXPECT_TRUE(mf1.saw_message); | 145 EXPECT_TRUE(mf1.saw_message); |
147 EXPECT_TRUE(mf2.saw_message); | 146 EXPECT_TRUE(mf2.saw_message); |
148 EXPECT_TRUE(window.saw_message); | 147 EXPECT_TRUE(window.saw_message); |
149 | 148 |
150 mf1.saw_message = false; | 149 mf1.saw_message = false; |
151 mf2.saw_message = false; | 150 mf2.saw_message = false; |
152 window.saw_message = false; | 151 window.saw_message = false; |
153 | 152 |
154 // Remove a filter and try sending message again. | 153 // Remove a filter and try sending message again. |
155 HWNDSubclass::RemoveFilterFromAllTargets(&mf1); | 154 HWNDSubclass::RemoveFilterFromAllTargets(&mf1); |
156 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0); | 155 ::SendMessage(window.hwnd(), WM_NCHITTEST, 0, 0); |
157 EXPECT_FALSE(mf1.saw_message); | 156 EXPECT_FALSE(mf1.saw_message); |
158 EXPECT_TRUE(mf2.saw_message); | 157 EXPECT_TRUE(mf2.saw_message); |
159 EXPECT_TRUE(window.saw_message); | 158 EXPECT_TRUE(window.saw_message); |
160 } | 159 } |
161 } | 160 } |
162 | 161 |
163 } // namespace ui | 162 } // namespace ui |
OLD | NEW |