Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(352)

Side by Side Diff: ui/aura/event_filter_unittest.cc

Issue 10916095: Fix leaks in aura_unittests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/aura/event_filter.h" 5 #include "ui/aura/event_filter.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "ui/aura/focus_manager.h" 9 #include "ui/aura/focus_manager.h"
10 #include "ui/aura/root_window.h" 10 #include "ui/aura/root_window.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 int mouse_event_count_; 96 int mouse_event_count_;
97 int touch_event_count_; 97 int touch_event_count_;
98 ui::EventResult key_event_handling_result_; 98 ui::EventResult key_event_handling_result_;
99 ui::EventResult mouse_event_handling_result_; 99 ui::EventResult mouse_event_handling_result_;
100 bool consumes_touch_events_; 100 bool consumes_touch_events_;
101 101
102 DISALLOW_COPY_AND_ASSIGN(TestEventFilterWindowDelegate); 102 DISALLOW_COPY_AND_ASSIGN(TestEventFilterWindowDelegate);
103 }; 103 };
104 104
105 Window* CreateWindow(int id, Window* parent, WindowDelegate* delegate) { 105 Window* CreateWindow(int id, Window* parent, WindowDelegate* delegate) {
106 Window* window = 106 Window* window = new Window(
107 new Window(delegate ? delegate : new test::TestWindowDelegate); 107 delegate ? delegate :
108 test::TestWindowDelegate::CreateSelfDestroyingDelegate());
108 window->set_id(id); 109 window->set_id(id);
109 window->Init(ui::LAYER_TEXTURED); 110 window->Init(ui::LAYER_TEXTURED);
110 window->SetParent(parent); 111 window->SetParent(parent);
111 window->SetBounds(gfx::Rect(0, 0, 100, 100)); 112 window->SetBounds(gfx::Rect(0, 0, 100, 100));
112 window->Show(); 113 window->Show();
113 return window; 114 return window;
114 } 115 }
115 116
116 // Creates this hierarchy: 117 // Creates this hierarchy:
117 // 118 //
118 // RootWindow (EF) 119 // RootWindow (EF)
119 // +- w1 (EF) 120 // +- w1 (EF)
120 // +- w11 121 // +- w11
121 // +- w111 (EF) 122 // +- w111 (EF)
122 // +- w1111 <-- target window 123 // +- w1111 <-- target window
123 TEST_F(EventFilterTest, PreHandle) { 124 TEST_F(EventFilterTest, PreHandle) {
124 scoped_ptr<Window> w1(CreateWindow(1, root_window(), NULL)); 125 scoped_ptr<Window> w1(CreateWindow(1, root_window(), NULL));
125 scoped_ptr<Window> w11(CreateWindow(11, w1.get(), NULL)); 126 scoped_ptr<Window> w11(CreateWindow(11, w1.get(), NULL));
126 scoped_ptr<Window> w111(CreateWindow(111, w11.get(), NULL)); 127 scoped_ptr<Window> w111(CreateWindow(111, w11.get(), NULL));
127 TestEventFilterWindowDelegate* d1111 = new TestEventFilterWindowDelegate; 128 TestEventFilterWindowDelegate d1111;
128 scoped_ptr<Window> w1111(CreateWindow(1111, w111.get(), d1111)); 129 scoped_ptr<Window> w1111(CreateWindow(1111, w111.get(), &d1111));
129 130
130 test::TestEventFilter* root_window_filter = new test::TestEventFilter; 131 test::TestEventFilter* root_window_filter = new test::TestEventFilter;
131 test::TestEventFilter* w1_filter = new test::TestEventFilter; 132 test::TestEventFilter* w1_filter = new test::TestEventFilter;
132 test::TestEventFilter* w111_filter = new test::TestEventFilter; 133 test::TestEventFilter* w111_filter = new test::TestEventFilter;
133 root_window()->SetEventFilter(root_window_filter); 134 root_window()->SetEventFilter(root_window_filter);
134 w1->SetEventFilter(w1_filter); 135 w1->SetEventFilter(w1_filter);
135 w111->SetEventFilter(w111_filter); 136 w111->SetEventFilter(w111_filter);
136 137
137 w1111->GetFocusManager()->SetFocusedWindow(w1111.get(), NULL); 138 w1111->GetFocusManager()->SetFocusedWindow(w1111.get(), NULL);
138 139
139 // To start with, no one is going to consume any events. All three filters 140 // To start with, no one is going to consume any events. All three filters
140 // and the w1111's delegate should receive the event. 141 // and the w1111's delegate should receive the event.
141 test::EventGenerator generator(root_window(), w1111.get()); 142 test::EventGenerator generator(root_window(), w1111.get());
142 generator.PressLeftButton(); 143 generator.PressLeftButton();
143 ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, 0); 144 ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, 0);
144 root_window()->AsRootWindowHostDelegate()->OnHostKeyEvent(&key_event); 145 root_window()->AsRootWindowHostDelegate()->OnHostKeyEvent(&key_event);
145 146
146 // TODO(sadrul): TouchEvent! 147 // TODO(sadrul): TouchEvent!
147 EXPECT_EQ(1, root_window_filter->key_event_count()); 148 EXPECT_EQ(1, root_window_filter->key_event_count());
148 EXPECT_EQ(1, w1_filter->key_event_count()); 149 EXPECT_EQ(1, w1_filter->key_event_count());
149 EXPECT_EQ(1, w111_filter->key_event_count()); 150 EXPECT_EQ(1, w111_filter->key_event_count());
150 EXPECT_EQ(1, d1111->key_event_count()); 151 EXPECT_EQ(1, d1111.key_event_count());
151 EXPECT_EQ(1, root_window_filter->mouse_event_count()); 152 EXPECT_EQ(1, root_window_filter->mouse_event_count());
152 EXPECT_EQ(1, w1_filter->mouse_event_count()); 153 EXPECT_EQ(1, w1_filter->mouse_event_count());
153 EXPECT_EQ(1, w111_filter->mouse_event_count()); 154 EXPECT_EQ(1, w111_filter->mouse_event_count());
154 EXPECT_EQ(1, d1111->mouse_event_count()); 155 EXPECT_EQ(1, d1111.mouse_event_count());
155 EXPECT_EQ(0, root_window_filter->touch_event_count()); 156 EXPECT_EQ(0, root_window_filter->touch_event_count());
156 EXPECT_EQ(0, w1_filter->touch_event_count()); 157 EXPECT_EQ(0, w1_filter->touch_event_count());
157 EXPECT_EQ(0, w111_filter->touch_event_count()); 158 EXPECT_EQ(0, w111_filter->touch_event_count());
158 EXPECT_EQ(0, d1111->touch_event_count()); 159 EXPECT_EQ(0, d1111.touch_event_count());
159 160
160 d1111->ResetCounts(); 161 d1111.ResetCounts();
161 root_window_filter->ResetCounts(); 162 root_window_filter->ResetCounts();
162 w1_filter->ResetCounts(); 163 w1_filter->ResetCounts();
163 w111_filter->ResetCounts(); 164 w111_filter->ResetCounts();
164 165
165 // Now make w1's EF consume the event. 166 // Now make w1's EF consume the event.
166 w1_filter->set_key_event_handling_result(ui::ER_CONSUMED); 167 w1_filter->set_key_event_handling_result(ui::ER_CONSUMED);
167 w1_filter->set_mouse_event_handling_result(ui::ER_CONSUMED); 168 w1_filter->set_mouse_event_handling_result(ui::ER_CONSUMED);
168 169
169 generator.ReleaseLeftButton(); 170 generator.ReleaseLeftButton();
170 root_window()->AsRootWindowHostDelegate()->OnHostKeyEvent(&key_event); 171 root_window()->AsRootWindowHostDelegate()->OnHostKeyEvent(&key_event);
171 172
172 // TODO(sadrul): TouchEvent/GestureEvent! 173 // TODO(sadrul): TouchEvent/GestureEvent!
173 EXPECT_EQ(1, root_window_filter->key_event_count()); 174 EXPECT_EQ(1, root_window_filter->key_event_count());
174 EXPECT_EQ(1, w1_filter->key_event_count()); 175 EXPECT_EQ(1, w1_filter->key_event_count());
175 EXPECT_EQ(0, w111_filter->key_event_count()); 176 EXPECT_EQ(0, w111_filter->key_event_count());
176 EXPECT_EQ(0, d1111->key_event_count()); 177 EXPECT_EQ(0, d1111.key_event_count());
177 EXPECT_EQ(1, root_window_filter->mouse_event_count()); 178 EXPECT_EQ(1, root_window_filter->mouse_event_count());
178 EXPECT_EQ(1, w1_filter->mouse_event_count()); 179 EXPECT_EQ(1, w1_filter->mouse_event_count());
179 EXPECT_EQ(0, w111_filter->mouse_event_count()); 180 EXPECT_EQ(0, w111_filter->mouse_event_count());
180 EXPECT_EQ(0, d1111->mouse_event_count()); 181 EXPECT_EQ(0, d1111.mouse_event_count());
181 EXPECT_EQ(0, root_window_filter->touch_event_count()); 182 EXPECT_EQ(0, root_window_filter->touch_event_count());
182 EXPECT_EQ(0, w1_filter->touch_event_count()); 183 EXPECT_EQ(0, w1_filter->touch_event_count());
183 EXPECT_EQ(0, w111_filter->touch_event_count()); 184 EXPECT_EQ(0, w111_filter->touch_event_count());
184 EXPECT_EQ(0, d1111->touch_event_count()); 185 EXPECT_EQ(0, d1111.touch_event_count());
185 } 186 }
186 187
187 // Tests PostHandle* methods for this hierarchy: 188 // Tests PostHandle* methods for this hierarchy:
188 // RootWindow 189 // RootWindow
189 // w1 (EF) 190 // w1 (EF)
190 // w11 <-- target window 191 // w11 <-- target window
191 TEST_F(EventFilterTest, PostHandle) { 192 TEST_F(EventFilterTest, PostHandle) {
192 scoped_ptr<Window> w1(CreateWindow(1, root_window(), NULL)); 193 scoped_ptr<Window> w1(CreateWindow(1, root_window(), NULL));
193 TestEventFilterWindowDelegate* d11 = new TestEventFilterWindowDelegate; 194 TestEventFilterWindowDelegate d11;
194 scoped_ptr<Window> w11(CreateWindow(11, w1.get(), d11)); 195 scoped_ptr<Window> w11(CreateWindow(11, w1.get(), &d11));
195 196
196 test::TestEventFilter* root_window_filter = new test::TestEventFilter; 197 test::TestEventFilter root_window_filter;
197 test::TestEventFilter* w1_filter = new test::TestEventFilter; 198 test::TestEventFilter* w1_filter = new test::TestEventFilter;
198 root_window()->AddPostTargetHandler(root_window_filter); 199 root_window()->AddPostTargetHandler(&root_window_filter);
199 w1->AddPostTargetHandler(w1_filter); 200 w1->AddPostTargetHandler(w1_filter);
200 201
201 w1->GetFocusManager()->SetFocusedWindow(w11.get(), NULL); 202 w1->GetFocusManager()->SetFocusedWindow(w11.get(), NULL);
202 203
203 // TODO(sadrul): TouchEvent/GestureEvent! 204 // TODO(sadrul): TouchEvent/GestureEvent!
204 205
205 // To start with, no one is going to consume any events. The post- 206 // To start with, no one is going to consume any events. The post-
206 // event filters and w11's delegate will be notified. 207 // event filters and w11's delegate will be notified.
207 test::EventGenerator generator(root_window(), w11.get()); 208 test::EventGenerator generator(root_window(), w11.get());
208 209
209 d11->set_key_event_handling_result(ui::ER_UNHANDLED); 210 d11.set_key_event_handling_result(ui::ER_UNHANDLED);
210 d11->set_mouse_event_handling_result(ui::ER_UNHANDLED); 211 d11.set_mouse_event_handling_result(ui::ER_UNHANDLED);
211 d11->set_consumes_touch_events(false); 212 d11.set_consumes_touch_events(false);
212 213
213 generator.PressKey(ui::VKEY_A, 0); 214 generator.PressKey(ui::VKEY_A, 0);
214 generator.PressLeftButton(); 215 generator.PressLeftButton();
215 216
216 EXPECT_EQ(1, w1_filter->key_event_count()); 217 EXPECT_EQ(1, w1_filter->key_event_count());
217 EXPECT_EQ(1, w1_filter->mouse_event_count()); 218 EXPECT_EQ(1, w1_filter->mouse_event_count());
218 EXPECT_EQ(1, root_window_filter->mouse_event_count()); 219 EXPECT_EQ(1, root_window_filter.mouse_event_count());
219 EXPECT_EQ(1, d11->key_event_count()); 220 EXPECT_EQ(1, d11.key_event_count());
220 EXPECT_EQ(1, d11->mouse_event_count()); 221 EXPECT_EQ(1, d11.mouse_event_count());
221 222
222 root_window_filter->ResetCounts(); 223 root_window_filter.ResetCounts();
223 w1_filter->ResetCounts(); 224 w1_filter->ResetCounts();
224 d11->ResetCounts(); 225 d11.ResetCounts();
225 generator.set_flags(0); 226 generator.set_flags(0);
226 227
227 // Let |w1_filter| handle (but not consume) an event. The root-window's 228 // Let |w1_filter| handle (but not consume) an event. The root-window's
228 // post-target filter should still receive the event. 229 // post-target filter should still receive the event.
229 w1_filter->set_mouse_event_handling_result(ui::ER_HANDLED); 230 w1_filter->set_mouse_event_handling_result(ui::ER_HANDLED);
230 generator.PressLeftButton(); 231 generator.PressLeftButton();
231 EXPECT_EQ(1, d11->mouse_event_count()); 232 EXPECT_EQ(1, d11.mouse_event_count());
232 EXPECT_EQ(1, w1_filter->mouse_event_count()); 233 EXPECT_EQ(1, w1_filter->mouse_event_count());
233 EXPECT_EQ(1, root_window_filter->mouse_event_count()); 234 EXPECT_EQ(1, root_window_filter.mouse_event_count());
234 235
235 root_window_filter->ResetCounts(); 236 root_window_filter.ResetCounts();
236 w1_filter->ResetCounts(); 237 w1_filter->ResetCounts();
237 d11->ResetCounts(); 238 d11.ResetCounts();
238 generator.set_flags(0); 239 generator.set_flags(0);
239 240
240 // Let |w1_filter| consume an event. So the root-window's post-target 241 // Let |w1_filter| consume an event. So the root-window's post-target
241 // filter should no longer receive the event. 242 // filter should no longer receive the event.
242 w1_filter->set_mouse_event_handling_result(ui::ER_CONSUMED); 243 w1_filter->set_mouse_event_handling_result(ui::ER_CONSUMED);
243 generator.PressLeftButton(); 244 generator.PressLeftButton();
244 EXPECT_EQ(1, d11->mouse_event_count()); 245 EXPECT_EQ(1, d11.mouse_event_count());
245 EXPECT_EQ(1, w1_filter->mouse_event_count()); 246 EXPECT_EQ(1, w1_filter->mouse_event_count());
246 EXPECT_EQ(0, root_window_filter->mouse_event_count()); 247 EXPECT_EQ(0, root_window_filter.mouse_event_count());
247 248
248 // Now we'll have the delegate handle the events. 249 // Now we'll have the delegate handle the events.
249 root_window_filter->ResetCounts(); 250 root_window_filter.ResetCounts();
250 w1_filter->ResetCounts(); 251 w1_filter->ResetCounts();
251 d11->ResetCounts(); 252 d11.ResetCounts();
252 generator.set_flags(0); 253 generator.set_flags(0);
253 254
254 w1_filter->set_mouse_event_handling_result(ui::ER_UNHANDLED); 255 w1_filter->set_mouse_event_handling_result(ui::ER_UNHANDLED);
255 d11->set_key_event_handling_result(ui::ER_HANDLED); 256 d11.set_key_event_handling_result(ui::ER_HANDLED);
256 d11->set_mouse_event_handling_result(ui::ER_HANDLED); 257 d11.set_mouse_event_handling_result(ui::ER_HANDLED);
257 d11->set_consumes_touch_events(true); 258 d11.set_consumes_touch_events(true);
258 259
259 generator.PressKey(ui::VKEY_A, 0); 260 generator.PressKey(ui::VKEY_A, 0);
260 generator.PressLeftButton(); 261 generator.PressLeftButton();
261 262
262 EXPECT_EQ(1, d11->key_event_count()); 263 EXPECT_EQ(1, d11.key_event_count());
263 EXPECT_EQ(1, d11->mouse_event_count()); 264 EXPECT_EQ(1, d11.mouse_event_count());
264 // The delegate processed the event. But it should still bubble up to the 265 // The delegate processed the event. But it should still bubble up to the
265 // post-target filters. 266 // post-target filters.
266 EXPECT_EQ(1, w1_filter->key_event_count()); 267 EXPECT_EQ(1, w1_filter->key_event_count());
267 EXPECT_EQ(1, root_window_filter->key_event_count()); 268 EXPECT_EQ(1, root_window_filter.key_event_count());
268 EXPECT_EQ(1, w1_filter->mouse_event_count()); 269 EXPECT_EQ(1, w1_filter->mouse_event_count());
269 EXPECT_EQ(1, root_window_filter->mouse_event_count()); 270 EXPECT_EQ(1, root_window_filter.mouse_event_count());
270 271
271 // Now we'll have the delegate consume the events. 272 // Now we'll have the delegate consume the events.
272 root_window_filter->ResetCounts(); 273 root_window_filter.ResetCounts();
273 w1_filter->ResetCounts(); 274 w1_filter->ResetCounts();
274 d11->ResetCounts(); 275 d11.ResetCounts();
275 generator.set_flags(0); 276 generator.set_flags(0);
276 277
277 d11->set_key_event_handling_result(ui::ER_CONSUMED); 278 d11.set_key_event_handling_result(ui::ER_CONSUMED);
278 d11->set_mouse_event_handling_result(ui::ER_CONSUMED); 279 d11.set_mouse_event_handling_result(ui::ER_CONSUMED);
279 d11->set_consumes_touch_events(true); 280 d11.set_consumes_touch_events(true);
280 281
281 generator.PressKey(ui::VKEY_A, 0); 282 generator.PressKey(ui::VKEY_A, 0);
282 generator.PressLeftButton(); 283 generator.PressLeftButton();
283 284
284 EXPECT_EQ(1, d11->key_event_count()); 285 EXPECT_EQ(1, d11.key_event_count());
285 EXPECT_EQ(1, d11->mouse_event_count()); 286 EXPECT_EQ(1, d11.mouse_event_count());
286 // The delegate consumed the event. So it should no longer reach the 287 // The delegate consumed the event. So it should no longer reach the
287 // post-target filters. 288 // post-target filters.
288 EXPECT_EQ(0, w1_filter->key_event_count()); 289 EXPECT_EQ(0, w1_filter->key_event_count());
289 EXPECT_EQ(0, root_window_filter->key_event_count()); 290 EXPECT_EQ(0, root_window_filter.key_event_count());
290 EXPECT_EQ(0, w1_filter->mouse_event_count()); 291 EXPECT_EQ(0, w1_filter->mouse_event_count());
291 EXPECT_EQ(0, root_window_filter->mouse_event_count()); 292 EXPECT_EQ(0, root_window_filter.mouse_event_count());
292 293
293 // Now we'll have the pre-filter methods consume the events. 294 // Now we'll have the pre-filter methods consume the events.
294 w1->RemovePostTargetHandler(w1_filter); 295 w1->RemovePostTargetHandler(w1_filter);
295 w1->SetEventFilter(w1_filter); 296 w1->SetEventFilter(w1_filter);
296 w1_filter->ResetCounts(); 297 w1_filter->ResetCounts();
297 d11->ResetCounts(); 298 d11.ResetCounts();
298 generator.set_flags(0); 299 generator.set_flags(0);
299 300
300 d11->set_key_event_handling_result(ui::ER_UNHANDLED); 301 d11.set_key_event_handling_result(ui::ER_UNHANDLED);
301 d11->set_mouse_event_handling_result(ui::ER_UNHANDLED); 302 d11.set_mouse_event_handling_result(ui::ER_UNHANDLED);
302 d11->set_consumes_touch_events(false); 303 d11.set_consumes_touch_events(false);
303 304
304 w1_filter->set_key_event_handling_result(ui::ER_CONSUMED); 305 w1_filter->set_key_event_handling_result(ui::ER_CONSUMED);
305 w1_filter->set_mouse_event_handling_result(ui::ER_CONSUMED); 306 w1_filter->set_mouse_event_handling_result(ui::ER_CONSUMED);
306 w1_filter->set_consumes_touch_events(true); 307 w1_filter->set_consumes_touch_events(true);
307 308
308 generator.PressKey(ui::VKEY_A, 0); 309 generator.PressKey(ui::VKEY_A, 0);
309 generator.PressLeftButton(); 310 generator.PressLeftButton();
310 311
311 EXPECT_EQ(1, w1_filter->key_event_count()); 312 EXPECT_EQ(1, w1_filter->key_event_count());
312 EXPECT_EQ(0, d11->key_event_count()); 313 EXPECT_EQ(0, d11.key_event_count());
313 EXPECT_EQ(1, w1_filter->mouse_event_count()); 314 EXPECT_EQ(1, w1_filter->mouse_event_count());
314 EXPECT_EQ(0, d11->mouse_event_count()); 315 EXPECT_EQ(0, d11.mouse_event_count());
315 } 316 }
316 317
317 } // namespace aura 318 } // namespace aura
OLDNEW
« no previous file with comments | « tools/valgrind/memcheck/suppressions.txt ('k') | ui/aura/gestures/gesture_recognizer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698