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

Side by Side Diff: ui/views/focus/focus_manager_unittest.cc

Issue 838253004: MacViews: Fix duplicate definition of ExtensionKeyBindingRegistry::SetShortcutHandlingSuspended (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@DragBookmarks2
Patch Set: Created 5 years, 11 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
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/views/focus/focus_manager.h" 5 #include "ui/views/focus/focus_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "ui/aura/client/focus_client.h" 12 #include "ui/aura/client/focus_client.h"
13 #include "ui/aura/window.h" 13 #include "ui/aura/window.h"
14 #include "ui/base/accelerators/accelerator.h" 14 #include "ui/base/accelerators/accelerator.h"
15 #include "ui/base/accelerators/accelerator_processor.h"
15 #include "ui/base/ime/dummy_text_input_client.h" 16 #include "ui/base/ime/dummy_text_input_client.h"
16 #include "ui/base/ime/text_input_focus_manager.h" 17 #include "ui/base/ime/text_input_focus_manager.h"
17 #include "ui/base/ui_base_switches.h" 18 #include "ui/base/ui_base_switches.h"
18 #include "ui/events/keycodes/keyboard_codes.h" 19 #include "ui/events/keycodes/keyboard_codes.h"
19 #include "ui/views/accessible_pane_view.h" 20 #include "ui/views/accessible_pane_view.h"
20 #include "ui/views/controls/button/label_button.h" 21 #include "ui/views/controls/button/label_button.h"
21 #include "ui/views/focus/focus_manager_factory.h" 22 #include "ui/views/focus/focus_manager_factory.h"
22 #include "ui/views/focus/widget_focus_manager.h" 23 #include "ui/views/focus/widget_focus_manager.h"
23 #include "ui/views/test/focus_manager_test.h" 24 #include "ui/views/test/focus_manager_test.h"
24 #include "ui/views/widget/widget.h" 25 #include "ui/views/widget/widget.h"
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 } 182 }
182 183
183 private: 184 private:
184 int accelerator_count_; // number of times that the accelerator is activated 185 int accelerator_count_; // number of times that the accelerator is activated
185 bool process_accelerator_; // return value of AcceleratorPressed 186 bool process_accelerator_; // return value of AcceleratorPressed
186 bool can_handle_accelerators_; // return value of CanHandleAccelerators 187 bool can_handle_accelerators_; // return value of CanHandleAccelerators
187 188
188 DISALLOW_COPY_AND_ASSIGN(TestAcceleratorTarget); 189 DISALLOW_COPY_AND_ASSIGN(TestAcceleratorTarget);
189 }; 190 };
190 191
192 // Consumes and counts accelerator calls.
193 class TestAcceleratorProcessor : public ui::AcceleratorProcessor {
194 public:
195 TestAcceleratorProcessor() : accelerator_count_(0) {}
196
197 int accelerator_count() const { return accelerator_count_; }
198
199 bool ProcessAccelerator(const ui::Accelerator& accelerator) override {
200 ++accelerator_count_;
201 return true;
202 }
203
204 ui::AcceleratorTarget* GetTargetForAccelerator(
205 const ui::Accelerator& accelerator) const override {
206 return nullptr;
207 }
208
209 private:
210 int accelerator_count_; // number of times that the accelerator is activated
211
212 DISALLOW_COPY_AND_ASSIGN(TestAcceleratorProcessor);
213 };
214
191 TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) { 215 TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) {
192 FocusManager* focus_manager = GetFocusManager(); 216 FocusManager* focus_manager = GetFocusManager();
193 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); 217 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE);
194 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); 218 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE);
195 219
196 TestAcceleratorTarget return_target(true); 220 TestAcceleratorTarget return_target(true);
197 TestAcceleratorTarget escape_target(true); 221 TestAcceleratorTarget escape_target(true);
198 EXPECT_EQ(return_target.accelerator_count(), 0); 222 EXPECT_EQ(return_target.accelerator_count(), 0);
199 EXPECT_EQ(escape_target.accelerator_count(), 0); 223 EXPECT_EQ(escape_target.accelerator_count(), 0);
200 EXPECT_EQ(NULL, 224 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(return_accelerator));
201 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 225 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(escape_accelerator));
202 EXPECT_EQ(NULL,
203 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
204 226
205 // Register targets. 227 // Register targets.
206 focus_manager->RegisterAccelerator(return_accelerator, 228 focus_manager->RegisterAccelerator(return_accelerator,
207 ui::AcceleratorManager::kNormalPriority, 229 ui::AcceleratorManager::kNormalPriority,
208 &return_target); 230 &return_target);
209 focus_manager->RegisterAccelerator(escape_accelerator, 231 focus_manager->RegisterAccelerator(escape_accelerator,
210 ui::AcceleratorManager::kNormalPriority, 232 ui::AcceleratorManager::kNormalPriority,
211 &escape_target); 233 &escape_target);
212 234
213 // Checks if the correct target is registered. 235 // Checks if the correct target is registered.
214 EXPECT_EQ(&return_target, 236 EXPECT_EQ(&return_target,
215 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 237 focus_manager->GetTargetForAccelerator(return_accelerator));
216 EXPECT_EQ(&escape_target, 238 EXPECT_EQ(&escape_target,
217 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); 239 focus_manager->GetTargetForAccelerator(escape_accelerator));
218 240
219 // Hitting the return key. 241 // Hitting the return key.
220 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 242 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
221 EXPECT_EQ(return_target.accelerator_count(), 1); 243 EXPECT_EQ(return_target.accelerator_count(), 1);
222 EXPECT_EQ(escape_target.accelerator_count(), 0); 244 EXPECT_EQ(escape_target.accelerator_count(), 0);
223 245
224 // Hitting the escape key. 246 // Hitting the escape key.
225 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); 247 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
226 EXPECT_EQ(return_target.accelerator_count(), 1); 248 EXPECT_EQ(return_target.accelerator_count(), 1);
227 EXPECT_EQ(escape_target.accelerator_count(), 1); 249 EXPECT_EQ(escape_target.accelerator_count(), 1);
228 250
229 // Register another target for the return key. 251 // Register another target for the return key.
230 TestAcceleratorTarget return_target2(true); 252 TestAcceleratorTarget return_target2(true);
231 EXPECT_EQ(return_target2.accelerator_count(), 0); 253 EXPECT_EQ(return_target2.accelerator_count(), 0);
232 focus_manager->RegisterAccelerator(return_accelerator, 254 focus_manager->RegisterAccelerator(return_accelerator,
233 ui::AcceleratorManager::kNormalPriority, 255 ui::AcceleratorManager::kNormalPriority,
234 &return_target2); 256 &return_target2);
235 EXPECT_EQ(&return_target2, 257 EXPECT_EQ(&return_target2,
236 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 258 focus_manager->GetTargetForAccelerator(return_accelerator));
237 259
238 // Hitting the return key; return_target2 has the priority. 260 // Hitting the return key; return_target2 has the priority.
239 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 261 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
240 EXPECT_EQ(return_target.accelerator_count(), 1); 262 EXPECT_EQ(return_target.accelerator_count(), 1);
241 EXPECT_EQ(return_target2.accelerator_count(), 1); 263 EXPECT_EQ(return_target2.accelerator_count(), 1);
242 264
243 // Register a target that does not process the accelerator event. 265 // Register a target that does not process the accelerator event.
244 TestAcceleratorTarget return_target3(false); 266 TestAcceleratorTarget return_target3(false);
245 EXPECT_EQ(return_target3.accelerator_count(), 0); 267 EXPECT_EQ(return_target3.accelerator_count(), 0);
246 focus_manager->RegisterAccelerator(return_accelerator, 268 focus_manager->RegisterAccelerator(return_accelerator,
247 ui::AcceleratorManager::kNormalPriority, 269 ui::AcceleratorManager::kNormalPriority,
248 &return_target3); 270 &return_target3);
249 EXPECT_EQ(&return_target3, 271 EXPECT_EQ(&return_target3,
250 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 272 focus_manager->GetTargetForAccelerator(return_accelerator));
251 273
252 // Hitting the return key. 274 // Hitting the return key.
253 // Since the event handler of return_target3 returns false, return_target2 275 // Since the event handler of return_target3 returns false, return_target2
254 // should be called too. 276 // should be called too.
255 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 277 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
256 EXPECT_EQ(return_target.accelerator_count(), 1); 278 EXPECT_EQ(return_target.accelerator_count(), 1);
257 EXPECT_EQ(return_target2.accelerator_count(), 2); 279 EXPECT_EQ(return_target2.accelerator_count(), 2);
258 EXPECT_EQ(return_target3.accelerator_count(), 1); 280 EXPECT_EQ(return_target3.accelerator_count(), 1);
259 281
260 // Unregister return_target2. 282 // Unregister return_target2.
261 focus_manager->UnregisterAccelerator(return_accelerator, &return_target2); 283 focus_manager->UnregisterAccelerator(return_accelerator, &return_target2);
262 EXPECT_EQ(&return_target3, 284 EXPECT_EQ(&return_target3,
263 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 285 focus_manager->GetTargetForAccelerator(return_accelerator));
264 286
265 // Hitting the return key. return_target3 and return_target should be called. 287 // Hitting the return key. return_target3 and return_target should be called.
266 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 288 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
267 EXPECT_EQ(return_target.accelerator_count(), 2); 289 EXPECT_EQ(return_target.accelerator_count(), 2);
268 EXPECT_EQ(return_target2.accelerator_count(), 2); 290 EXPECT_EQ(return_target2.accelerator_count(), 2);
269 EXPECT_EQ(return_target3.accelerator_count(), 2); 291 EXPECT_EQ(return_target3.accelerator_count(), 2);
270 292
271 // Unregister targets. 293 // Unregister targets.
272 focus_manager->UnregisterAccelerator(return_accelerator, &return_target); 294 focus_manager->UnregisterAccelerator(return_accelerator, &return_target);
273 focus_manager->UnregisterAccelerator(return_accelerator, &return_target3); 295 focus_manager->UnregisterAccelerator(return_accelerator, &return_target3);
274 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target); 296 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target);
275 297
276 // Now there is no target registered. 298 // Now there is no target registered.
277 EXPECT_EQ(NULL, 299 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(return_accelerator));
278 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 300 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(escape_accelerator));
279 EXPECT_EQ(NULL,
280 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
281 301
282 // Hitting the return key and the escape key. Nothing should happen. 302 // Hitting the return key and the escape key. Nothing should happen.
283 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); 303 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator));
284 EXPECT_EQ(return_target.accelerator_count(), 2); 304 EXPECT_EQ(return_target.accelerator_count(), 2);
285 EXPECT_EQ(return_target2.accelerator_count(), 2); 305 EXPECT_EQ(return_target2.accelerator_count(), 2);
286 EXPECT_EQ(return_target3.accelerator_count(), 2); 306 EXPECT_EQ(return_target3.accelerator_count(), 2);
287 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); 307 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator));
288 EXPECT_EQ(escape_target.accelerator_count(), 1); 308 EXPECT_EQ(escape_target.accelerator_count(), 1);
289 } 309 }
290 310
291 TEST_F(FocusManagerTest, HighPriorityHandlers) { 311 TEST_F(FocusManagerTest, HighPriorityHandlers) {
292 FocusManager* focus_manager = GetFocusManager(); 312 FocusManager* focus_manager = GetFocusManager();
293 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); 313 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE);
294 314
295 TestAcceleratorTarget escape_target_high(true); 315 TestAcceleratorTarget escape_target_high(true);
296 TestAcceleratorTarget escape_target_normal(true); 316 TestAcceleratorTarget escape_target_normal(true);
297 EXPECT_EQ(escape_target_high.accelerator_count(), 0); 317 EXPECT_EQ(escape_target_high.accelerator_count(), 0);
298 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); 318 EXPECT_EQ(escape_target_normal.accelerator_count(), 0);
299 EXPECT_EQ(NULL, 319 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(escape_accelerator));
300 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
301 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); 320 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator));
302 321
303 // Register high priority target. 322 // Register high priority target.
304 focus_manager->RegisterAccelerator(escape_accelerator, 323 focus_manager->RegisterAccelerator(escape_accelerator,
305 ui::AcceleratorManager::kHighPriority, 324 ui::AcceleratorManager::kHighPriority,
306 &escape_target_high); 325 &escape_target_high);
307 EXPECT_EQ(&escape_target_high, 326 EXPECT_EQ(&escape_target_high,
308 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); 327 focus_manager->GetTargetForAccelerator(escape_accelerator));
309 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); 328 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
310 329
311 // Hit the escape key. 330 // Hit the escape key.
312 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); 331 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
313 EXPECT_EQ(escape_target_high.accelerator_count(), 1); 332 EXPECT_EQ(escape_target_high.accelerator_count(), 1);
314 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); 333 EXPECT_EQ(escape_target_normal.accelerator_count(), 0);
315 334
316 // Add a normal priority target and make sure it doesn't see the key. 335 // Add a normal priority target and make sure it doesn't see the key.
317 focus_manager->RegisterAccelerator(escape_accelerator, 336 focus_manager->RegisterAccelerator(escape_accelerator,
318 ui::AcceleratorManager::kNormalPriority, 337 ui::AcceleratorManager::kNormalPriority,
319 &escape_target_normal); 338 &escape_target_normal);
320 339
321 // Checks if the correct target is registered (same as before, the high 340 // Checks if the correct target is registered (same as before, the high
322 // priority one). 341 // priority one).
323 EXPECT_EQ(&escape_target_high, 342 EXPECT_EQ(&escape_target_high,
324 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); 343 focus_manager->GetTargetForAccelerator(escape_accelerator));
325 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); 344 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
326 345
327 // Hit the escape key. 346 // Hit the escape key.
328 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); 347 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
329 EXPECT_EQ(escape_target_high.accelerator_count(), 2); 348 EXPECT_EQ(escape_target_high.accelerator_count(), 2);
330 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); 349 EXPECT_EQ(escape_target_normal.accelerator_count(), 0);
331 350
332 // Unregister the high priority accelerator. 351 // Unregister the high priority accelerator.
333 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high); 352 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high);
334 EXPECT_EQ(&escape_target_normal, 353 EXPECT_EQ(&escape_target_normal,
335 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); 354 focus_manager->GetTargetForAccelerator(escape_accelerator));
336 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); 355 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator));
337 356
338 // Hit the escape key. 357 // Hit the escape key.
339 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); 358 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
340 EXPECT_EQ(escape_target_high.accelerator_count(), 2); 359 EXPECT_EQ(escape_target_high.accelerator_count(), 2);
341 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); 360 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
342 361
343 // Add the high priority target back and make sure it starts seeing the key. 362 // Add the high priority target back and make sure it starts seeing the key.
344 focus_manager->RegisterAccelerator(escape_accelerator, 363 focus_manager->RegisterAccelerator(escape_accelerator,
345 ui::AcceleratorManager::kHighPriority, 364 ui::AcceleratorManager::kHighPriority,
346 &escape_target_high); 365 &escape_target_high);
347 EXPECT_EQ(&escape_target_high, 366 EXPECT_EQ(&escape_target_high,
348 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); 367 focus_manager->GetTargetForAccelerator(escape_accelerator));
349 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); 368 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
350 369
351 // Hit the escape key. 370 // Hit the escape key.
352 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); 371 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
353 EXPECT_EQ(escape_target_high.accelerator_count(), 3); 372 EXPECT_EQ(escape_target_high.accelerator_count(), 3);
354 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); 373 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
355 374
356 // Unregister the normal priority accelerator. 375 // Unregister the normal priority accelerator.
357 focus_manager->UnregisterAccelerator( 376 focus_manager->UnregisterAccelerator(
358 escape_accelerator, &escape_target_normal); 377 escape_accelerator, &escape_target_normal);
359 EXPECT_EQ(&escape_target_high, 378 EXPECT_EQ(&escape_target_high,
360 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); 379 focus_manager->GetTargetForAccelerator(escape_accelerator));
361 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); 380 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
362 381
363 // Hit the escape key. 382 // Hit the escape key.
364 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); 383 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
365 EXPECT_EQ(escape_target_high.accelerator_count(), 4); 384 EXPECT_EQ(escape_target_high.accelerator_count(), 4);
366 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); 385 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
367 386
368 // Unregister the high priority accelerator. 387 // Unregister the high priority accelerator.
369 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high); 388 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high);
370 EXPECT_EQ(NULL, 389 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(escape_accelerator));
371 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
372 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); 390 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator));
373 391
374 // Hit the escape key (no change, no targets registered). 392 // Hit the escape key (no change, no targets registered).
375 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); 393 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator));
376 EXPECT_EQ(escape_target_high.accelerator_count(), 4); 394 EXPECT_EQ(escape_target_high.accelerator_count(), 4);
377 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); 395 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
378 } 396 }
379 397
380 TEST_F(FocusManagerTest, CallsEnabledAcceleratorTargetsOnly) { 398 TEST_F(FocusManagerTest, CallsEnabledAcceleratorTargetsOnly) {
381 FocusManager* focus_manager = GetFocusManager(); 399 FocusManager* focus_manager = GetFocusManager();
(...skipping 26 matching lines...) Expand all
408 EXPECT_EQ(1, return_target2.accelerator_count()); 426 EXPECT_EQ(1, return_target2.accelerator_count());
409 427
410 // Enabling the target again causes the accelerators to be processed again. 428 // Enabling the target again causes the accelerators to be processed again.
411 return_target1.set_can_handle_accelerators(true); 429 return_target1.set_can_handle_accelerators(true);
412 return_target2.set_can_handle_accelerators(true); 430 return_target2.set_can_handle_accelerators(true);
413 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 431 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
414 EXPECT_EQ(1, return_target1.accelerator_count()); 432 EXPECT_EQ(1, return_target1.accelerator_count());
415 EXPECT_EQ(2, return_target2.accelerator_count()); 433 EXPECT_EQ(2, return_target2.accelerator_count());
416 } 434 }
417 435
436 TEST_F(FocusManagerTest, CallsAcceleratorPreProcessor) {
437 FocusManager* focus_manager = GetFocusManager();
438 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE);
439 TestAcceleratorTarget return_target(true);
440 focus_manager->RegisterAccelerator(return_accelerator,
441 ui::AcceleratorManager::kNormalPriority,
442 &return_target);
443
444 TestAcceleratorProcessor pre_processor;
445 focus_manager->AddAcceleratorPreProcessor(&pre_processor);
446 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
447 EXPECT_EQ(1, pre_processor.accelerator_count());
448 EXPECT_EQ(0, return_target.accelerator_count());
449
450 focus_manager->RemoveAcceleratorProcessor(&pre_processor);
451 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
452 EXPECT_EQ(1, pre_processor.accelerator_count());
453 EXPECT_EQ(1, return_target.accelerator_count());
454 }
455
456 TEST_F(FocusManagerTest, CallsAcceleratorPostProcessor) {
457 FocusManager* focus_manager = GetFocusManager();
458 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE);
459
460 TestAcceleratorProcessor post_processor;
461 focus_manager->AddAcceleratorPostProcessor(&post_processor);
462 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
463 EXPECT_EQ(1, post_processor.accelerator_count());
464
465 focus_manager->RemoveAcceleratorProcessor(&post_processor);
466 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator));
467 EXPECT_EQ(1, post_processor.accelerator_count());
468 }
469
418 // Unregisters itself when its accelerator is invoked. 470 // Unregisters itself when its accelerator is invoked.
419 class SelfUnregisteringAcceleratorTarget : public ui::AcceleratorTarget { 471 class SelfUnregisteringAcceleratorTarget : public ui::AcceleratorTarget {
420 public: 472 public:
421 SelfUnregisteringAcceleratorTarget(ui::Accelerator accelerator, 473 SelfUnregisteringAcceleratorTarget(ui::Accelerator accelerator,
422 FocusManager* focus_manager) 474 FocusManager* focus_manager)
423 : accelerator_(accelerator), 475 : accelerator_(accelerator),
424 focus_manager_(focus_manager), 476 focus_manager_(focus_manager),
425 accelerator_count_(0) { 477 accelerator_count_(0) {
426 } 478 }
427 479
(...skipping 13 matching lines...) Expand all
441 int accelerator_count_; 493 int accelerator_count_;
442 494
443 DISALLOW_COPY_AND_ASSIGN(SelfUnregisteringAcceleratorTarget); 495 DISALLOW_COPY_AND_ASSIGN(SelfUnregisteringAcceleratorTarget);
444 }; 496 };
445 497
446 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) { 498 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) {
447 FocusManager* focus_manager = GetFocusManager(); 499 FocusManager* focus_manager = GetFocusManager();
448 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); 500 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE);
449 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager); 501 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager);
450 EXPECT_EQ(target.accelerator_count(), 0); 502 EXPECT_EQ(target.accelerator_count(), 0);
451 EXPECT_EQ(NULL, 503 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(return_accelerator));
452 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
453 504
454 // Register the target. 505 // Register the target.
455 focus_manager->RegisterAccelerator(return_accelerator, 506 focus_manager->RegisterAccelerator(return_accelerator,
456 ui::AcceleratorManager::kNormalPriority, 507 ui::AcceleratorManager::kNormalPriority,
457 &target); 508 &target);
458 EXPECT_EQ(&target, 509 EXPECT_EQ(&target,
459 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 510 focus_manager->GetTargetForAccelerator(return_accelerator));
460 511
461 // Hitting the return key. The target will be unregistered. 512 // Hitting the return key. The target will be unregistered.
462 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 513 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
463 EXPECT_EQ(target.accelerator_count(), 1); 514 EXPECT_EQ(target.accelerator_count(), 1);
464 EXPECT_EQ(NULL, 515 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(return_accelerator));
465 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
466 516
467 // Hitting the return key again; nothing should happen. 517 // Hitting the return key again; nothing should happen.
468 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); 518 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator));
469 EXPECT_EQ(target.accelerator_count(), 1); 519 EXPECT_EQ(target.accelerator_count(), 1);
470 } 520 }
471 521
472 class FocusManagerDtorTest : public FocusManagerTest { 522 class FocusManagerDtorTest : public FocusManagerTest {
473 protected: 523 protected:
474 typedef std::vector<std::string> DtorTrackVector; 524 typedef std::vector<std::string> DtorTrackVector;
475 525
476 class FocusManagerDtorTracked : public FocusManager { 526 class FocusManagerDtorTracked : public FocusManager {
477 public: 527 public:
478 FocusManagerDtorTracked(Widget* widget, DtorTrackVector* dtor_tracker) 528 FocusManagerDtorTracked(Widget* widget, DtorTrackVector* dtor_tracker)
479 : FocusManager(widget, NULL /* delegate */), 529 : FocusManager(widget), dtor_tracker_(dtor_tracker) {}
480 dtor_tracker_(dtor_tracker) {
481 }
482 530
483 ~FocusManagerDtorTracked() override { 531 ~FocusManagerDtorTracked() override {
484 dtor_tracker_->push_back("FocusManagerDtorTracked"); 532 dtor_tracker_->push_back("FocusManagerDtorTracked");
485 } 533 }
486 534
487 DtorTrackVector* dtor_tracker_; 535 DtorTrackVector* dtor_tracker_;
488 536
489 private: 537 private:
490 DISALLOW_COPY_AND_ASSIGN(FocusManagerDtorTracked); 538 DISALLOW_COPY_AND_ASSIGN(FocusManagerDtorTracked);
491 }; 539 };
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 EXPECT_EQ(view1, GetFocusManager()->GetFocusedView()); 957 EXPECT_EQ(view1, GetFocusManager()->GetFocusedView());
910 958
911 // Allow focus to go to the parent, and focus backwards which should now move 959 // Allow focus to go to the parent, and focus backwards which should now move
912 // up |widget_view| (in the parent). 960 // up |widget_view| (in the parent).
913 delegate->set_should_advance_focus_to_parent(true); 961 delegate->set_should_advance_focus_to_parent(true);
914 GetFocusManager()->AdvanceFocus(true); 962 GetFocusManager()->AdvanceFocus(true);
915 EXPECT_EQ(widget_view, GetFocusManager()->GetFocusedView()); 963 EXPECT_EQ(widget_view, GetFocusManager()->GetFocusedView());
916 } 964 }
917 965
918 } // namespace views 966 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698