| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "ash/sticky_keys/sticky_keys_controller.h" | 5 #include "ash/sticky_keys/sticky_keys_controller.h" |
| 6 | 6 |
| 7 #include <X11/Xlib.h> | 7 #include <X11/Xlib.h> |
| 8 #undef None | 8 #undef None |
| 9 #undef Bool | 9 #undef Bool |
| 10 #undef RootWindow | 10 #undef RootWindow |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 // Used to construct the various X events. | 284 // Used to construct the various X events. |
| 285 ui::ScopedXI2Event scoped_xevent_; | 285 ui::ScopedXI2Event scoped_xevent_; |
| 286 | 286 |
| 287 DISALLOW_COPY_AND_ASSIGN(StickyKeysTest); | 287 DISALLOW_COPY_AND_ASSIGN(StickyKeysTest); |
| 288 }; | 288 }; |
| 289 | 289 |
| 290 TEST_F(StickyKeysTest, BasicOneshotScenarioTest) { | 290 TEST_F(StickyKeysTest, BasicOneshotScenarioTest) { |
| 291 scoped_ptr<ui::KeyEvent> ev; | 291 scoped_ptr<ui::KeyEvent> ev; |
| 292 MockStickyKeysHandlerDelegate* mock_delegate = | 292 MockStickyKeysHandlerDelegate* mock_delegate = |
| 293 new MockStickyKeysHandlerDelegate(this); | 293 new MockStickyKeysHandlerDelegate(this); |
| 294 StickyKeysHandler sticky_key(ui::EF_SHIFT_DOWN, mock_delegate); | 294 StickyKeysHandler sticky_key(STICKY_KEY_SHIFT, mock_delegate); |
| 295 | 295 |
| 296 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 296 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 297 | 297 |
| 298 // By typing Shift key, internal state become ENABLED. | 298 // By typing Shift key, internal state become ENABLED. |
| 299 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); | 299 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); |
| 300 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 300 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 301 | 301 |
| 302 ev.reset(GenerateKey(true, ui::VKEY_A)); | 302 ev.reset(GenerateKey(true, ui::VKEY_A)); |
| 303 sticky_key.HandleKeyEvent(ev.get()); | 303 sticky_key.HandleKeyEvent(ev.get()); |
| 304 | 304 |
| 305 // Next keyboard event is shift modified. | 305 // Next keyboard event is shift modified. |
| 306 EXPECT_TRUE(ev->flags() & ui::EF_SHIFT_DOWN); | 306 EXPECT_TRUE(ev->flags() & ui::EF_SHIFT_DOWN); |
| 307 | 307 |
| 308 ev.reset(GenerateKey(false, ui::VKEY_A)); | 308 ev.reset(GenerateKey(false, ui::VKEY_A)); |
| 309 sticky_key.HandleKeyEvent(ev.get()); | 309 sticky_key.HandleKeyEvent(ev.get()); |
| 310 | 310 |
| 311 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 311 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 312 // Making sure Shift up keyboard event is dispatched. | 312 // Making sure Shift up keyboard event is dispatched. |
| 313 ASSERT_EQ(2U, mock_delegate->GetEventCount()); | 313 ASSERT_EQ(2U, mock_delegate->GetEventCount()); |
| 314 EXPECT_EQ(ui::ET_KEY_PRESSED, mock_delegate->GetEvent(0)->type()); | 314 EXPECT_EQ(ui::ET_KEY_PRESSED, mock_delegate->GetEvent(0)->type()); |
| 315 EXPECT_EQ(ui::VKEY_A, | 315 EXPECT_EQ(ui::VKEY_A, |
| 316 static_cast<const ui::KeyEvent*>(mock_delegate->GetEvent(0)) | 316 static_cast<const ui::KeyEvent*>(mock_delegate->GetEvent(0)) |
| 317 ->key_code()); | 317 ->key_code()); |
| 318 EXPECT_EQ(ui::ET_KEY_RELEASED, mock_delegate->GetEvent(1)->type()); | 318 EXPECT_EQ(ui::ET_KEY_RELEASED, mock_delegate->GetEvent(1)->type()); |
| 319 EXPECT_EQ(ui::VKEY_SHIFT, | 319 EXPECT_EQ(ui::VKEY_SHIFT, |
| 320 static_cast<const ui::KeyEvent*>(mock_delegate->GetEvent(1)) | 320 static_cast<const ui::KeyEvent*>(mock_delegate->GetEvent(1)) |
| 321 ->key_code()); | 321 ->key_code()); |
| 322 | 322 |
| 323 // Enabled state is one shot, so next key event should not be shift modified. | 323 // Enabled state is one shot, so next key event should not be shift modified. |
| 324 ev.reset(GenerateKey(true, ui::VKEY_A)); | 324 ev.reset(GenerateKey(true, ui::VKEY_A)); |
| 325 sticky_key.HandleKeyEvent(ev.get()); | 325 sticky_key.HandleKeyEvent(ev.get()); |
| 326 EXPECT_FALSE(ev->flags() & ui::EF_SHIFT_DOWN); | 326 EXPECT_FALSE(ev->flags() & ui::EF_SHIFT_DOWN); |
| 327 | 327 |
| 328 ev.reset(GenerateKey(false, ui::VKEY_A)); | 328 ev.reset(GenerateKey(false, ui::VKEY_A)); |
| 329 sticky_key.HandleKeyEvent(ev.get()); | 329 sticky_key.HandleKeyEvent(ev.get()); |
| 330 EXPECT_FALSE(ev->flags() & ui::EF_SHIFT_DOWN); | 330 EXPECT_FALSE(ev->flags() & ui::EF_SHIFT_DOWN); |
| 331 } | 331 } |
| 332 | 332 |
| 333 TEST_F(StickyKeysTest, BasicLockedScenarioTest) { | 333 TEST_F(StickyKeysTest, BasicLockedScenarioTest) { |
| 334 scoped_ptr<ui::KeyEvent> ev; | 334 scoped_ptr<ui::KeyEvent> ev; |
| 335 MockStickyKeysHandlerDelegate* mock_delegate = | 335 MockStickyKeysHandlerDelegate* mock_delegate = |
| 336 new MockStickyKeysHandlerDelegate(this); | 336 new MockStickyKeysHandlerDelegate(this); |
| 337 StickyKeysHandler sticky_key(ui::EF_SHIFT_DOWN, mock_delegate); | 337 StickyKeysHandler sticky_key(STICKY_KEY_SHIFT, mock_delegate); |
| 338 | 338 |
| 339 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 339 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 340 | 340 |
| 341 // By typing shift key, internal state become ENABLED. | 341 // By typing shift key, internal state become ENABLED. |
| 342 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); | 342 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); |
| 343 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 343 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 344 | 344 |
| 345 // By typing shift key again, internal state become LOCKED. | 345 // By typing shift key again, internal state become LOCKED. |
| 346 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); | 346 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); |
| 347 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 347 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 348 | 348 |
| 349 // All keyboard events including keyUp become shift modified. | 349 // All keyboard events including keyUp become shift modified. |
| 350 ev.reset(GenerateKey(true, ui::VKEY_A)); | 350 ev.reset(GenerateKey(true, ui::VKEY_A)); |
| 351 sticky_key.HandleKeyEvent(ev.get()); | 351 sticky_key.HandleKeyEvent(ev.get()); |
| 352 EXPECT_TRUE(ev->flags() & ui::EF_SHIFT_DOWN); | 352 EXPECT_TRUE(ev->flags() & ui::EF_SHIFT_DOWN); |
| 353 | 353 |
| 354 ev.reset(GenerateKey(false, ui::VKEY_A)); | 354 ev.reset(GenerateKey(false, ui::VKEY_A)); |
| 355 sticky_key.HandleKeyEvent(ev.get()); | 355 sticky_key.HandleKeyEvent(ev.get()); |
| 356 EXPECT_TRUE(ev->flags() & ui::EF_SHIFT_DOWN); | 356 EXPECT_TRUE(ev->flags() & ui::EF_SHIFT_DOWN); |
| 357 | 357 |
| 358 // Locked state keeps after normal keyboard event. | 358 // Locked state keeps after normal keyboard event. |
| 359 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 359 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 360 | 360 |
| 361 ev.reset(GenerateKey(true, ui::VKEY_B)); | 361 ev.reset(GenerateKey(true, ui::VKEY_B)); |
| 362 sticky_key.HandleKeyEvent(ev.get()); | 362 sticky_key.HandleKeyEvent(ev.get()); |
| 363 EXPECT_TRUE(ev->flags() & ui::EF_SHIFT_DOWN); | 363 EXPECT_TRUE(ev->flags() & ui::EF_SHIFT_DOWN); |
| 364 | 364 |
| 365 ev.reset(GenerateKey(false, ui::VKEY_B)); | 365 ev.reset(GenerateKey(false, ui::VKEY_B)); |
| 366 sticky_key.HandleKeyEvent(ev.get()); | 366 sticky_key.HandleKeyEvent(ev.get()); |
| 367 EXPECT_TRUE(ev->flags() & ui::EF_SHIFT_DOWN); | 367 EXPECT_TRUE(ev->flags() & ui::EF_SHIFT_DOWN); |
| 368 | 368 |
| 369 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 369 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 370 | 370 |
| 371 // By typing shift key again, internal state become back to DISABLED. | 371 // By typing shift key again, internal state become back to DISABLED. |
| 372 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); | 372 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); |
| 373 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 373 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 374 } | 374 } |
| 375 | 375 |
| 376 TEST_F(StickyKeysTest, NonTargetModifierTest) { | 376 TEST_F(StickyKeysTest, NonTargetModifierTest) { |
| 377 scoped_ptr<ui::KeyEvent> ev; | 377 scoped_ptr<ui::KeyEvent> ev; |
| 378 MockStickyKeysHandlerDelegate* mock_delegate = | 378 MockStickyKeysHandlerDelegate* mock_delegate = |
| 379 new MockStickyKeysHandlerDelegate(this); | 379 new MockStickyKeysHandlerDelegate(this); |
| 380 StickyKeysHandler sticky_key(ui::EF_SHIFT_DOWN, mock_delegate); | 380 StickyKeysHandler sticky_key(STICKY_KEY_SHIFT, mock_delegate); |
| 381 | 381 |
| 382 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 382 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 383 | 383 |
| 384 // Non target modifier key does not affect internal state | 384 // Non target modifier key does not affect internal state |
| 385 ev.reset(GenerateKey(true, ui::VKEY_MENU)); | 385 ev.reset(GenerateKey(true, ui::VKEY_MENU)); |
| 386 sticky_key.HandleKeyEvent(ev.get()); | 386 sticky_key.HandleKeyEvent(ev.get()); |
| 387 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 387 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 388 | 388 |
| 389 ev.reset(GenerateKey(false, ui::VKEY_MENU)); | 389 ev.reset(GenerateKey(false, ui::VKEY_MENU)); |
| 390 sticky_key.HandleKeyEvent(ev.get()); | 390 sticky_key.HandleKeyEvent(ev.get()); |
| 391 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 391 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 392 | 392 |
| 393 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); | 393 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); |
| 394 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 394 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 395 | 395 |
| 396 // Non target modifier key does not affect internal state | 396 // Non target modifier key does not affect internal state |
| 397 ev.reset(GenerateKey(true, ui::VKEY_MENU)); | 397 ev.reset(GenerateKey(true, ui::VKEY_MENU)); |
| 398 sticky_key.HandleKeyEvent(ev.get()); | 398 sticky_key.HandleKeyEvent(ev.get()); |
| 399 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 399 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 400 | 400 |
| 401 ev.reset(GenerateKey(false, ui::VKEY_MENU)); | 401 ev.reset(GenerateKey(false, ui::VKEY_MENU)); |
| 402 sticky_key.HandleKeyEvent(ev.get()); | 402 sticky_key.HandleKeyEvent(ev.get()); |
| 403 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 403 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 404 | 404 |
| 405 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); | 405 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_SHIFT); |
| 406 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 406 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 407 | 407 |
| 408 // Non target modifier key does not affect internal state | 408 // Non target modifier key does not affect internal state |
| 409 ev.reset(GenerateKey(true, ui::VKEY_MENU)); | 409 ev.reset(GenerateKey(true, ui::VKEY_MENU)); |
| 410 sticky_key.HandleKeyEvent(ev.get()); | 410 sticky_key.HandleKeyEvent(ev.get()); |
| 411 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 411 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 412 | 412 |
| 413 ev.reset(GenerateKey(false, ui::VKEY_MENU)); | 413 ev.reset(GenerateKey(false, ui::VKEY_MENU)); |
| 414 sticky_key.HandleKeyEvent(ev.get()); | 414 sticky_key.HandleKeyEvent(ev.get()); |
| 415 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 415 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 416 } | 416 } |
| 417 | 417 |
| 418 TEST_F(StickyKeysTest, NormalShortcutTest) { | 418 TEST_F(StickyKeysTest, NormalShortcutTest) { |
| 419 // Sticky keys should not be enabled if we perform a normal shortcut. | 419 // Sticky keys should not be enabled if we perform a normal shortcut. |
| 420 scoped_ptr<ui::KeyEvent> ev; | 420 scoped_ptr<ui::KeyEvent> ev; |
| 421 MockStickyKeysHandlerDelegate* mock_delegate = | 421 MockStickyKeysHandlerDelegate* mock_delegate = |
| 422 new MockStickyKeysHandlerDelegate(this); | 422 new MockStickyKeysHandlerDelegate(this); |
| 423 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN, mock_delegate); | 423 StickyKeysHandler sticky_key(STICKY_KEY_CONTROL, mock_delegate); |
| 424 | 424 |
| 425 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 425 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 426 | 426 |
| 427 // Perform ctrl+n shortcut. | 427 // Perform ctrl+n shortcut. |
| 428 ev.reset(GenerateKey(true, ui::VKEY_CONTROL)); | 428 ev.reset(GenerateKey(true, ui::VKEY_CONTROL)); |
| 429 sticky_key.HandleKeyEvent(ev.get()); | 429 sticky_key.HandleKeyEvent(ev.get()); |
| 430 ev.reset(GenerateKey(true, ui::VKEY_N)); | 430 ev.reset(GenerateKey(true, ui::VKEY_N)); |
| 431 sticky_key.HandleKeyEvent(ev.get()); | 431 sticky_key.HandleKeyEvent(ev.get()); |
| 432 ev.reset(GenerateKey(false, ui::VKEY_N)); | 432 ev.reset(GenerateKey(false, ui::VKEY_N)); |
| 433 sticky_key.HandleKeyEvent(ev.get()); | 433 sticky_key.HandleKeyEvent(ev.get()); |
| 434 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 434 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 435 | 435 |
| 436 // Sticky keys should not be enabled afterwards. | 436 // Sticky keys should not be enabled afterwards. |
| 437 ev.reset(GenerateKey(false, ui::VKEY_CONTROL)); | 437 ev.reset(GenerateKey(false, ui::VKEY_CONTROL)); |
| 438 sticky_key.HandleKeyEvent(ev.get()); | 438 sticky_key.HandleKeyEvent(ev.get()); |
| 439 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 439 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 440 } | 440 } |
| 441 | 441 |
| 442 TEST_F(StickyKeysTest, NormalModifiedClickTest) { | 442 TEST_F(StickyKeysTest, NormalModifiedClickTest) { |
| 443 scoped_ptr<ui::KeyEvent> kev; | 443 scoped_ptr<ui::KeyEvent> kev; |
| 444 scoped_ptr<ui::MouseEvent> mev; | 444 scoped_ptr<ui::MouseEvent> mev; |
| 445 MockStickyKeysHandlerDelegate* mock_delegate = | 445 MockStickyKeysHandlerDelegate* mock_delegate = |
| 446 new MockStickyKeysHandlerDelegate(this); | 446 new MockStickyKeysHandlerDelegate(this); |
| 447 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN, mock_delegate); | 447 StickyKeysHandler sticky_key(STICKY_KEY_CONTROL, mock_delegate); |
| 448 | 448 |
| 449 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 449 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 450 | 450 |
| 451 // Perform ctrl+click. | 451 // Perform ctrl+click. |
| 452 kev.reset(GenerateKey(true, ui::VKEY_CONTROL)); | 452 kev.reset(GenerateKey(true, ui::VKEY_CONTROL)); |
| 453 sticky_key.HandleKeyEvent(kev.get()); | 453 sticky_key.HandleKeyEvent(kev.get()); |
| 454 mev.reset(GenerateMouseEvent(true)); | 454 mev.reset(GenerateMouseEvent(true)); |
| 455 sticky_key.HandleMouseEvent(mev.get()); | 455 sticky_key.HandleMouseEvent(mev.get()); |
| 456 mev.reset(GenerateMouseEvent(false)); | 456 mev.reset(GenerateMouseEvent(false)); |
| 457 sticky_key.HandleMouseEvent(mev.get()); | 457 sticky_key.HandleMouseEvent(mev.get()); |
| 458 | 458 |
| 459 // Sticky keys should not be enabled afterwards. | 459 // Sticky keys should not be enabled afterwards. |
| 460 kev.reset(GenerateKey(false, ui::VKEY_CONTROL)); | 460 kev.reset(GenerateKey(false, ui::VKEY_CONTROL)); |
| 461 sticky_key.HandleKeyEvent(kev.get()); | 461 sticky_key.HandleKeyEvent(kev.get()); |
| 462 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 462 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 463 } | 463 } |
| 464 | 464 |
| 465 TEST_F(StickyKeysTest, MouseMovedModifierTest) { | 465 TEST_F(StickyKeysTest, MouseMovedModifierTest) { |
| 466 scoped_ptr<ui::KeyEvent> kev; | 466 scoped_ptr<ui::KeyEvent> kev; |
| 467 scoped_ptr<ui::MouseEvent> mev; | 467 scoped_ptr<ui::MouseEvent> mev; |
| 468 MockStickyKeysHandlerDelegate* mock_delegate = | 468 MockStickyKeysHandlerDelegate* mock_delegate = |
| 469 new MockStickyKeysHandlerDelegate(this); | 469 new MockStickyKeysHandlerDelegate(this); |
| 470 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN, mock_delegate); | 470 StickyKeysHandler sticky_key(STICKY_KEY_CONTROL, mock_delegate); |
| 471 | 471 |
| 472 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 472 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 473 | 473 |
| 474 // Press ctrl and handle mouse move events. | 474 // Press ctrl and handle mouse move events. |
| 475 kev.reset(GenerateKey(true, ui::VKEY_CONTROL)); | 475 kev.reset(GenerateKey(true, ui::VKEY_CONTROL)); |
| 476 sticky_key.HandleKeyEvent(kev.get()); | 476 sticky_key.HandleKeyEvent(kev.get()); |
| 477 mev.reset(GenerateSynthesizedMouseEvent(0, 0)); | 477 mev.reset(GenerateSynthesizedMouseEvent(0, 0)); |
| 478 sticky_key.HandleMouseEvent(mev.get()); | 478 sticky_key.HandleMouseEvent(mev.get()); |
| 479 mev.reset(GenerateSynthesizedMouseEvent(100, 100)); | 479 mev.reset(GenerateSynthesizedMouseEvent(100, 100)); |
| 480 sticky_key.HandleMouseEvent(mev.get()); | 480 sticky_key.HandleMouseEvent(mev.get()); |
| 481 | 481 |
| 482 // Sticky keys should be enabled afterwards. | 482 // Sticky keys should be enabled afterwards. |
| 483 kev.reset(GenerateKey(false, ui::VKEY_CONTROL)); | 483 kev.reset(GenerateKey(false, ui::VKEY_CONTROL)); |
| 484 sticky_key.HandleKeyEvent(kev.get()); | 484 sticky_key.HandleKeyEvent(kev.get()); |
| 485 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 485 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 486 } | 486 } |
| 487 | 487 |
| 488 TEST_F(StickyKeysTest, NormalModifiedScrollTest) { | 488 TEST_F(StickyKeysTest, NormalModifiedScrollTest) { |
| 489 ui::SetUpScrollDeviceForTest(kScrollDeviceId); | 489 ui::SetUpScrollDeviceForTest(kScrollDeviceId); |
| 490 | 490 |
| 491 scoped_ptr<ui::KeyEvent> kev; | 491 scoped_ptr<ui::KeyEvent> kev; |
| 492 scoped_ptr<ui::ScrollEvent> sev; | 492 scoped_ptr<ui::ScrollEvent> sev; |
| 493 MockStickyKeysHandlerDelegate* mock_delegate = | 493 MockStickyKeysHandlerDelegate* mock_delegate = |
| 494 new MockStickyKeysHandlerDelegate(this); | 494 new MockStickyKeysHandlerDelegate(this); |
| 495 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN, mock_delegate); | 495 StickyKeysHandler sticky_key(STICKY_KEY_CONTROL, mock_delegate); |
| 496 | 496 |
| 497 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 497 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 498 | 498 |
| 499 // Perform ctrl+scroll. | 499 // Perform ctrl+scroll. |
| 500 kev.reset(GenerateKey(true, ui::VKEY_CONTROL)); | 500 kev.reset(GenerateKey(true, ui::VKEY_CONTROL)); |
| 501 sev.reset(GenerateFlingScrollEvent(0, true)); | 501 sev.reset(GenerateFlingScrollEvent(0, true)); |
| 502 sticky_key.HandleScrollEvent(sev.get()); | 502 sticky_key.HandleScrollEvent(sev.get()); |
| 503 sev.reset(GenerateScrollEvent(10)); | 503 sev.reset(GenerateScrollEvent(10)); |
| 504 sticky_key.HandleScrollEvent(sev.get()); | 504 sticky_key.HandleScrollEvent(sev.get()); |
| 505 sev.reset(GenerateFlingScrollEvent(10, false)); | 505 sev.reset(GenerateFlingScrollEvent(10, false)); |
| 506 sticky_key.HandleScrollEvent(sev.get()); | 506 sticky_key.HandleScrollEvent(sev.get()); |
| 507 | 507 |
| 508 // Sticky keys should not be enabled afterwards. | 508 // Sticky keys should not be enabled afterwards. |
| 509 kev.reset(GenerateKey(false, ui::VKEY_CONTROL)); | 509 kev.reset(GenerateKey(false, ui::VKEY_CONTROL)); |
| 510 sticky_key.HandleKeyEvent(kev.get()); | 510 sticky_key.HandleKeyEvent(kev.get()); |
| 511 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 511 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 512 } | 512 } |
| 513 | 513 |
| 514 TEST_F(StickyKeysTest, MouseEventOneshot) { | 514 TEST_F(StickyKeysTest, MouseEventOneshot) { |
| 515 scoped_ptr<ui::MouseEvent> ev; | 515 scoped_ptr<ui::MouseEvent> ev; |
| 516 scoped_ptr<ui::KeyEvent> kev; | 516 scoped_ptr<ui::KeyEvent> kev; |
| 517 MockStickyKeysHandlerDelegate* mock_delegate = | 517 MockStickyKeysHandlerDelegate* mock_delegate = |
| 518 new MockStickyKeysHandlerDelegate(this); | 518 new MockStickyKeysHandlerDelegate(this); |
| 519 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN, mock_delegate); | 519 StickyKeysHandler sticky_key(STICKY_KEY_CONTROL, mock_delegate); |
| 520 | 520 |
| 521 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 521 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 522 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); | 522 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); |
| 523 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 523 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 524 | 524 |
| 525 // We should still be in the ENABLED state until we get the mouse | 525 // We should still be in the ENABLED state until we get the mouse |
| 526 // release event. | 526 // release event. |
| 527 ev.reset(GenerateMouseEvent(true)); | 527 ev.reset(GenerateMouseEvent(true)); |
| 528 sticky_key.HandleMouseEvent(ev.get()); | 528 sticky_key.HandleMouseEvent(ev.get()); |
| 529 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 529 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 530 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 530 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 531 | 531 |
| 532 ev.reset(GenerateMouseEvent(false)); | 532 ev.reset(GenerateMouseEvent(false)); |
| 533 sticky_key.HandleMouseEvent(ev.get()); | 533 sticky_key.HandleMouseEvent(ev.get()); |
| 534 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 534 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 535 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 535 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 536 | 536 |
| 537 // Making sure modifier key release event is dispatched in the right order. | 537 // Making sure modifier key release event is dispatched in the right order. |
| 538 ASSERT_EQ(2u, mock_delegate->GetEventCount()); | 538 ASSERT_EQ(2u, mock_delegate->GetEventCount()); |
| 539 EXPECT_EQ(ui::ET_MOUSE_RELEASED, mock_delegate->GetEvent(0)->type()); | 539 EXPECT_EQ(ui::ET_MOUSE_RELEASED, mock_delegate->GetEvent(0)->type()); |
| 540 EXPECT_EQ(ui::ET_KEY_RELEASED, mock_delegate->GetEvent(1)->type()); | 540 EXPECT_EQ(ui::ET_KEY_RELEASED, mock_delegate->GetEvent(1)->type()); |
| 541 EXPECT_EQ(ui::VKEY_CONTROL, | 541 EXPECT_EQ(ui::VKEY_CONTROL, |
| 542 static_cast<const ui::KeyEvent*>(mock_delegate->GetEvent(1)) | 542 static_cast<const ui::KeyEvent*>(mock_delegate->GetEvent(1)) |
| 543 ->key_code()); | 543 ->key_code()); |
| 544 | 544 |
| 545 // Enabled state is one shot, so next click should not be control modified. | 545 // Enabled state is one shot, so next click should not be control modified. |
| 546 ev.reset(GenerateMouseEvent(true)); | 546 ev.reset(GenerateMouseEvent(true)); |
| 547 sticky_key.HandleMouseEvent(ev.get()); | 547 sticky_key.HandleMouseEvent(ev.get()); |
| 548 EXPECT_FALSE(ev->flags() & ui::EF_CONTROL_DOWN); | 548 EXPECT_FALSE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 549 | 549 |
| 550 ev.reset(GenerateMouseEvent(false)); | 550 ev.reset(GenerateMouseEvent(false)); |
| 551 sticky_key.HandleMouseEvent(ev.get()); | 551 sticky_key.HandleMouseEvent(ev.get()); |
| 552 EXPECT_FALSE(ev->flags() & ui::EF_CONTROL_DOWN); | 552 EXPECT_FALSE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 553 } | 553 } |
| 554 | 554 |
| 555 TEST_F(StickyKeysTest, MouseEventLocked) { | 555 TEST_F(StickyKeysTest, MouseEventLocked) { |
| 556 scoped_ptr<ui::MouseEvent> ev; | 556 scoped_ptr<ui::MouseEvent> ev; |
| 557 scoped_ptr<ui::KeyEvent> kev; | 557 scoped_ptr<ui::KeyEvent> kev; |
| 558 MockStickyKeysHandlerDelegate* mock_delegate = | 558 MockStickyKeysHandlerDelegate* mock_delegate = |
| 559 new MockStickyKeysHandlerDelegate(this); | 559 new MockStickyKeysHandlerDelegate(this); |
| 560 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN, mock_delegate); | 560 StickyKeysHandler sticky_key(STICKY_KEY_CONTROL, mock_delegate); |
| 561 | 561 |
| 562 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 562 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 563 | 563 |
| 564 // Pressing modifier key twice should make us enter lock state. | 564 // Pressing modifier key twice should make us enter lock state. |
| 565 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); | 565 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); |
| 566 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 566 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 567 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); | 567 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); |
| 568 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 568 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 569 | 569 |
| 570 // Mouse events should not disable locked mode. | 570 // Mouse events should not disable locked mode. |
| 571 for (int i = 0; i < 3; ++i) { | 571 for (int i = 0; i < 3; ++i) { |
| 572 ev.reset(GenerateMouseEvent(true)); | 572 ev.reset(GenerateMouseEvent(true)); |
| 573 sticky_key.HandleMouseEvent(ev.get()); | 573 sticky_key.HandleMouseEvent(ev.get()); |
| 574 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 574 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 575 ev.reset(GenerateMouseEvent(false)); | 575 ev.reset(GenerateMouseEvent(false)); |
| 576 sticky_key.HandleMouseEvent(ev.get()); | 576 sticky_key.HandleMouseEvent(ev.get()); |
| 577 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 577 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 578 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 578 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 579 } | 579 } |
| 580 | 580 |
| 581 // Test with mouse wheel. | 581 // Test with mouse wheel. |
| 582 for (int i = 0; i < 3; ++i) { | 582 for (int i = 0; i < 3; ++i) { |
| 583 ev.reset(GenerateMouseWheelEvent(ui::MouseWheelEvent::kWheelDelta)); | 583 ev.reset(GenerateMouseWheelEvent(ui::MouseWheelEvent::kWheelDelta)); |
| 584 sticky_key.HandleMouseEvent(ev.get()); | 584 sticky_key.HandleMouseEvent(ev.get()); |
| 585 ev.reset(GenerateMouseWheelEvent(-ui::MouseWheelEvent::kWheelDelta)); | 585 ev.reset(GenerateMouseWheelEvent(-ui::MouseWheelEvent::kWheelDelta)); |
| 586 sticky_key.HandleMouseEvent(ev.get()); | 586 sticky_key.HandleMouseEvent(ev.get()); |
| 587 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 587 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 588 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 588 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 589 } | 589 } |
| 590 | 590 |
| 591 // Test mixed case with mouse events and key events. | 591 // Test mixed case with mouse events and key events. |
| 592 ev.reset(GenerateMouseWheelEvent(ui::MouseWheelEvent::kWheelDelta)); | 592 ev.reset(GenerateMouseWheelEvent(ui::MouseWheelEvent::kWheelDelta)); |
| 593 sticky_key.HandleMouseEvent(ev.get()); | 593 sticky_key.HandleMouseEvent(ev.get()); |
| 594 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 594 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 595 kev.reset(GenerateKey(true, ui::VKEY_N)); | 595 kev.reset(GenerateKey(true, ui::VKEY_N)); |
| 596 sticky_key.HandleKeyEvent(kev.get()); | 596 sticky_key.HandleKeyEvent(kev.get()); |
| 597 EXPECT_TRUE(kev->flags() & ui::EF_CONTROL_DOWN); | 597 EXPECT_TRUE(kev->flags() & ui::EF_CONTROL_DOWN); |
| 598 kev.reset(GenerateKey(false, ui::VKEY_N)); | 598 kev.reset(GenerateKey(false, ui::VKEY_N)); |
| 599 sticky_key.HandleKeyEvent(kev.get()); | 599 sticky_key.HandleKeyEvent(kev.get()); |
| 600 EXPECT_TRUE(kev->flags() & ui::EF_CONTROL_DOWN); | 600 EXPECT_TRUE(kev->flags() & ui::EF_CONTROL_DOWN); |
| 601 | 601 |
| 602 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 602 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 603 } | 603 } |
| 604 | 604 |
| 605 TEST_F(StickyKeysTest, ScrollEventOneshot) { | 605 TEST_F(StickyKeysTest, ScrollEventOneshot) { |
| 606 ui::SetUpScrollDeviceForTest(kScrollDeviceId); | 606 ui::SetUpScrollDeviceForTest(kScrollDeviceId); |
| 607 // Disable Australlian scrolling. | 607 // Disable Australlian scrolling. |
| 608 ui::DeviceDataManager::GetInstance()->set_natural_scroll_enabled(true); | 608 ui::DeviceDataManager::GetInstance()->set_natural_scroll_enabled(true); |
| 609 | 609 |
| 610 scoped_ptr<ui::ScrollEvent> ev; | 610 scoped_ptr<ui::ScrollEvent> ev; |
| 611 scoped_ptr<ui::KeyEvent> kev; | 611 scoped_ptr<ui::KeyEvent> kev; |
| 612 MockStickyKeysHandlerDelegate* mock_delegate = | 612 MockStickyKeysHandlerDelegate* mock_delegate = |
| 613 new MockStickyKeysHandlerDelegate(this); | 613 new MockStickyKeysHandlerDelegate(this); |
| 614 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN, mock_delegate); | 614 StickyKeysHandler sticky_key(STICKY_KEY_CONTROL, mock_delegate); |
| 615 | 615 |
| 616 int scroll_deltas[] = {-10, 10}; | 616 int scroll_deltas[] = {-10, 10}; |
| 617 for (int i = 0; i < 2; ++i) { | 617 for (int i = 0; i < 2; ++i) { |
| 618 mock_delegate->ClearEvents(); | 618 mock_delegate->ClearEvents(); |
| 619 | 619 |
| 620 // Enable sticky keys. | 620 // Enable sticky keys. |
| 621 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 621 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 622 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); | 622 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); |
| 623 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 623 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 624 | 624 |
| 625 // Test a scroll sequence. Sticky keys should only be disabled at the end | 625 // Test a scroll sequence. Sticky keys should only be disabled at the end |
| 626 // of the scroll sequence. Fling cancel event starts the scroll sequence. | 626 // of the scroll sequence. Fling cancel event starts the scroll sequence. |
| 627 ev.reset(GenerateFlingScrollEvent(0, true)); | 627 ev.reset(GenerateFlingScrollEvent(0, true)); |
| 628 sticky_key.HandleScrollEvent(ev.get()); | 628 sticky_key.HandleScrollEvent(ev.get()); |
| 629 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 629 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 630 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 630 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 631 | 631 |
| 632 // Scrolls should all be modified but not disable sticky keys. | 632 // Scrolls should all be modified but not disable sticky keys. |
| 633 for (int j = 0; j < 3; ++j) { | 633 for (int j = 0; j < 3; ++j) { |
| 634 ev.reset(GenerateScrollEvent(scroll_deltas[i])); | 634 ev.reset(GenerateScrollEvent(scroll_deltas[i])); |
| 635 sticky_key.HandleScrollEvent(ev.get()); | 635 sticky_key.HandleScrollEvent(ev.get()); |
| 636 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 636 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 637 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 637 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 638 } | 638 } |
| 639 | 639 |
| 640 // Fling start event ends scroll sequence. | 640 // Fling start event ends scroll sequence. |
| 641 ev.reset(GenerateFlingScrollEvent(scroll_deltas[i], false)); | 641 ev.reset(GenerateFlingScrollEvent(scroll_deltas[i], false)); |
| 642 sticky_key.HandleScrollEvent(ev.get()); | 642 sticky_key.HandleScrollEvent(ev.get()); |
| 643 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 643 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 644 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 644 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 645 | 645 |
| 646 ASSERT_EQ(2U, mock_delegate->GetEventCount()); | 646 ASSERT_EQ(2U, mock_delegate->GetEventCount()); |
| 647 EXPECT_EQ(ui::ET_SCROLL_FLING_START, mock_delegate->GetEvent(0)->type()); | 647 EXPECT_EQ(ui::ET_SCROLL_FLING_START, mock_delegate->GetEvent(0)->type()); |
| 648 EXPECT_FLOAT_EQ(scroll_deltas[i], | 648 EXPECT_FLOAT_EQ(scroll_deltas[i], |
| 649 static_cast<const ui::ScrollEvent*>( | 649 static_cast<const ui::ScrollEvent*>( |
| 650 mock_delegate->GetEvent(0))->y_offset()); | 650 mock_delegate->GetEvent(0))->y_offset()); |
| 651 EXPECT_EQ(ui::ET_KEY_RELEASED, mock_delegate->GetEvent(1)->type()); | 651 EXPECT_EQ(ui::ET_KEY_RELEASED, mock_delegate->GetEvent(1)->type()); |
| 652 EXPECT_EQ(ui::VKEY_CONTROL, | 652 EXPECT_EQ(ui::VKEY_CONTROL, |
| 653 static_cast<const ui::KeyEvent*>(mock_delegate->GetEvent(1)) | 653 static_cast<const ui::KeyEvent*>(mock_delegate->GetEvent(1)) |
| 654 ->key_code()); | 654 ->key_code()); |
| 655 } | 655 } |
| 656 } | 656 } |
| 657 | 657 |
| 658 TEST_F(StickyKeysTest, ScrollDirectionChanged) { | 658 TEST_F(StickyKeysTest, ScrollDirectionChanged) { |
| 659 ui::SetUpScrollDeviceForTest(kScrollDeviceId); | 659 ui::SetUpScrollDeviceForTest(kScrollDeviceId); |
| 660 // Disable Australlian scrolling. | 660 // Disable Australlian scrolling. |
| 661 ui::DeviceDataManager::GetInstance()->set_natural_scroll_enabled(true); | 661 ui::DeviceDataManager::GetInstance()->set_natural_scroll_enabled(true); |
| 662 | 662 |
| 663 scoped_ptr<ui::ScrollEvent> ev; | 663 scoped_ptr<ui::ScrollEvent> ev; |
| 664 scoped_ptr<ui::KeyEvent> kev; | 664 scoped_ptr<ui::KeyEvent> kev; |
| 665 MockStickyKeysHandlerDelegate* mock_delegate = | 665 MockStickyKeysHandlerDelegate* mock_delegate = |
| 666 new MockStickyKeysHandlerDelegate(this); | 666 new MockStickyKeysHandlerDelegate(this); |
| 667 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN, mock_delegate); | 667 StickyKeysHandler sticky_key(STICKY_KEY_CONTROL, mock_delegate); |
| 668 | 668 |
| 669 // Test direction change with both boundary value and negative value. | 669 // Test direction change with both boundary value and negative value. |
| 670 const int direction_change_values[2] = {0, -10}; | 670 const int direction_change_values[2] = {0, -10}; |
| 671 for (int i = 0; i < 2; ++i) { | 671 for (int i = 0; i < 2; ++i) { |
| 672 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); | 672 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); |
| 673 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 673 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 674 | 674 |
| 675 // Fling cancel starts scroll sequence. | 675 // Fling cancel starts scroll sequence. |
| 676 ev.reset(GenerateFlingScrollEvent(0, true)); | 676 ev.reset(GenerateFlingScrollEvent(0, true)); |
| 677 sticky_key.HandleScrollEvent(ev.get()); | 677 sticky_key.HandleScrollEvent(ev.get()); |
| 678 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 678 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 679 | 679 |
| 680 // Test that changing directions in a scroll sequence will | 680 // Test that changing directions in a scroll sequence will |
| 681 // return sticky keys to DISABLED state. | 681 // return sticky keys to DISABLED state. |
| 682 for (int j = 0; j < 3; ++j) { | 682 for (int j = 0; j < 3; ++j) { |
| 683 ev.reset(GenerateScrollEvent(10)); | 683 ev.reset(GenerateScrollEvent(10)); |
| 684 sticky_key.HandleScrollEvent(ev.get()); | 684 sticky_key.HandleScrollEvent(ev.get()); |
| 685 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 685 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 686 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 686 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 687 } | 687 } |
| 688 | 688 |
| 689 ev.reset(GenerateScrollEvent(direction_change_values[i])); | 689 ev.reset(GenerateScrollEvent(direction_change_values[i])); |
| 690 sticky_key.HandleScrollEvent(ev.get()); | 690 sticky_key.HandleScrollEvent(ev.get()); |
| 691 EXPECT_FALSE(ev->flags() & ui::EF_CONTROL_DOWN); | 691 EXPECT_FALSE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 692 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 692 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 693 } | 693 } |
| 694 } | 694 } |
| 695 | 695 |
| 696 TEST_F(StickyKeysTest, ScrollEventLocked) { | 696 TEST_F(StickyKeysTest, ScrollEventLocked) { |
| 697 ui::SetUpScrollDeviceForTest(kScrollDeviceId); | 697 ui::SetUpScrollDeviceForTest(kScrollDeviceId); |
| 698 // Disable Australlian scrolling. | 698 // Disable Australlian scrolling. |
| 699 ui::DeviceDataManager::GetInstance()->set_natural_scroll_enabled(true); | 699 ui::DeviceDataManager::GetInstance()->set_natural_scroll_enabled(true); |
| 700 | 700 |
| 701 scoped_ptr<ui::ScrollEvent> ev; | 701 scoped_ptr<ui::ScrollEvent> ev; |
| 702 scoped_ptr<ui::KeyEvent> kev; | 702 scoped_ptr<ui::KeyEvent> kev; |
| 703 MockStickyKeysHandlerDelegate* mock_delegate = | 703 MockStickyKeysHandlerDelegate* mock_delegate = |
| 704 new MockStickyKeysHandlerDelegate(this); | 704 new MockStickyKeysHandlerDelegate(this); |
| 705 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN, mock_delegate); | 705 StickyKeysHandler sticky_key(STICKY_KEY_CONTROL, mock_delegate); |
| 706 | 706 |
| 707 // Lock sticky keys. | 707 // Lock sticky keys. |
| 708 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); | 708 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); |
| 709 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); | 709 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); |
| 710 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 710 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 711 | 711 |
| 712 // Test scroll events are correctly modified in locked state. | 712 // Test scroll events are correctly modified in locked state. |
| 713 for (int i = 0; i < 5; ++i) { | 713 for (int i = 0; i < 5; ++i) { |
| 714 // Fling cancel starts scroll sequence. | 714 // Fling cancel starts scroll sequence. |
| 715 ev.reset(GenerateFlingScrollEvent(0, true)); | 715 ev.reset(GenerateFlingScrollEvent(0, true)); |
| 716 sticky_key.HandleScrollEvent(ev.get()); | 716 sticky_key.HandleScrollEvent(ev.get()); |
| 717 | 717 |
| 718 ev.reset(GenerateScrollEvent(10)); | 718 ev.reset(GenerateScrollEvent(10)); |
| 719 sticky_key.HandleScrollEvent(ev.get()); | 719 sticky_key.HandleScrollEvent(ev.get()); |
| 720 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 720 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 721 ev.reset(GenerateScrollEvent(-10)); | 721 ev.reset(GenerateScrollEvent(-10)); |
| 722 sticky_key.HandleScrollEvent(ev.get()); | 722 sticky_key.HandleScrollEvent(ev.get()); |
| 723 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); | 723 EXPECT_TRUE(ev->flags() & ui::EF_CONTROL_DOWN); |
| 724 | 724 |
| 725 // Fling start ends scroll sequence. | 725 // Fling start ends scroll sequence. |
| 726 ev.reset(GenerateFlingScrollEvent(-10, false)); | 726 ev.reset(GenerateFlingScrollEvent(-10, false)); |
| 727 sticky_key.HandleScrollEvent(ev.get()); | 727 sticky_key.HandleScrollEvent(ev.get()); |
| 728 } | 728 } |
| 729 | 729 |
| 730 EXPECT_EQ(StickyKeysHandler::LOCKED, sticky_key.current_state()); | 730 EXPECT_EQ(STICKY_KEY_STATE_LOCKED, sticky_key.current_state()); |
| 731 } | 731 } |
| 732 | 732 |
| 733 TEST_F(StickyKeysTest, EventTargetDestroyed) { | 733 TEST_F(StickyKeysTest, EventTargetDestroyed) { |
| 734 scoped_ptr<ui::KeyEvent> ev; | 734 scoped_ptr<ui::KeyEvent> ev; |
| 735 MockStickyKeysHandlerDelegate* mock_delegate = | 735 MockStickyKeysHandlerDelegate* mock_delegate = |
| 736 new MockStickyKeysHandlerDelegate(this); | 736 new MockStickyKeysHandlerDelegate(this); |
| 737 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN, mock_delegate); | 737 StickyKeysHandler sticky_key(STICKY_KEY_CONTROL, mock_delegate); |
| 738 | 738 |
| 739 target()->Focus(); | 739 target()->Focus(); |
| 740 | 740 |
| 741 // Go into ENABLED state. | 741 // Go into ENABLED state. |
| 742 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 742 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 743 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); | 743 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); |
| 744 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 744 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 745 | 745 |
| 746 // CTRL+J is a special shortcut that will destroy the event target. | 746 // CTRL+J is a special shortcut that will destroy the event target. |
| 747 ev.reset(GenerateKey(true, ui::VKEY_J)); | 747 ev.reset(GenerateKey(true, ui::VKEY_J)); |
| 748 sticky_key.HandleKeyEvent(ev.get()); | 748 sticky_key.HandleKeyEvent(ev.get()); |
| 749 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 749 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 750 EXPECT_FALSE(target()); | 750 EXPECT_FALSE(target()); |
| 751 } | 751 } |
| 752 | 752 |
| 753 TEST_F(StickyKeysTest, SynthesizedEvents) { | 753 TEST_F(StickyKeysTest, SynthesizedEvents) { |
| 754 // Non-native, internally generated events should be properly handled | 754 // Non-native, internally generated events should be properly handled |
| 755 // by sticky keys. | 755 // by sticky keys. |
| 756 MockStickyKeysHandlerDelegate* mock_delegate = | 756 MockStickyKeysHandlerDelegate* mock_delegate = |
| 757 new MockStickyKeysHandlerDelegate(this); | 757 new MockStickyKeysHandlerDelegate(this); |
| 758 StickyKeysHandler sticky_key(ui::EF_CONTROL_DOWN, mock_delegate); | 758 StickyKeysHandler sticky_key(STICKY_KEY_CONTROL, mock_delegate); |
| 759 | 759 |
| 760 // Test non-native key events. | 760 // Test non-native key events. |
| 761 scoped_ptr<ui::KeyEvent> kev; | 761 scoped_ptr<ui::KeyEvent> kev; |
| 762 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); | 762 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); |
| 763 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 763 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 764 | 764 |
| 765 kev.reset(GenerateSynthesizedKeyEvent(true, ui::VKEY_K)); | 765 kev.reset(GenerateSynthesizedKeyEvent(true, ui::VKEY_K)); |
| 766 sticky_key.HandleKeyEvent(kev.get()); | 766 sticky_key.HandleKeyEvent(kev.get()); |
| 767 EXPECT_TRUE(kev->flags() & ui::EF_CONTROL_DOWN); | 767 EXPECT_TRUE(kev->flags() & ui::EF_CONTROL_DOWN); |
| 768 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 768 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 769 | 769 |
| 770 kev.reset(GenerateSynthesizedKeyEvent(false, ui::VKEY_K)); | 770 kev.reset(GenerateSynthesizedKeyEvent(false, ui::VKEY_K)); |
| 771 sticky_key.HandleKeyEvent(kev.get()); | 771 sticky_key.HandleKeyEvent(kev.get()); |
| 772 EXPECT_FALSE(kev->flags() & ui::EF_CONTROL_DOWN); | 772 EXPECT_FALSE(kev->flags() & ui::EF_CONTROL_DOWN); |
| 773 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 773 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 774 | 774 |
| 775 // Test non-native mouse events. | 775 // Test non-native mouse events. |
| 776 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); | 776 SendActivateStickyKeyPattern(&sticky_key, ui::VKEY_CONTROL); |
| 777 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 777 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 778 | 778 |
| 779 scoped_ptr<ui::MouseEvent> mev; | 779 scoped_ptr<ui::MouseEvent> mev; |
| 780 mev.reset(GenerateSynthesizedMouseEvent(true)); | 780 mev.reset(GenerateSynthesizedMouseEvent(true)); |
| 781 sticky_key.HandleMouseEvent(mev.get()); | 781 sticky_key.HandleMouseEvent(mev.get()); |
| 782 EXPECT_TRUE(mev->flags() & ui::EF_CONTROL_DOWN); | 782 EXPECT_TRUE(mev->flags() & ui::EF_CONTROL_DOWN); |
| 783 EXPECT_EQ(StickyKeysHandler::ENABLED, sticky_key.current_state()); | 783 EXPECT_EQ(STICKY_KEY_STATE_ENABLED, sticky_key.current_state()); |
| 784 | 784 |
| 785 mev.reset(GenerateSynthesizedMouseEvent(false)); | 785 mev.reset(GenerateSynthesizedMouseEvent(false)); |
| 786 sticky_key.HandleMouseEvent(mev.get()); | 786 sticky_key.HandleMouseEvent(mev.get()); |
| 787 EXPECT_TRUE(mev->flags() & ui::EF_CONTROL_DOWN); | 787 EXPECT_TRUE(mev->flags() & ui::EF_CONTROL_DOWN); |
| 788 EXPECT_EQ(StickyKeysHandler::DISABLED, sticky_key.current_state()); | 788 EXPECT_EQ(STICKY_KEY_STATE_DISABLED, sticky_key.current_state()); |
| 789 } | 789 } |
| 790 | 790 |
| 791 TEST_F(StickyKeysTest, KeyEventDispatchImpl) { | 791 TEST_F(StickyKeysTest, KeyEventDispatchImpl) { |
| 792 // Test the actual key event dispatch implementation. | 792 // Test the actual key event dispatch implementation. |
| 793 EventBuffer buffer; | 793 EventBuffer buffer; |
| 794 ScopedVector<ui::Event> events; | 794 ScopedVector<ui::Event> events; |
| 795 aura::WindowTreeHostDelegate* delegate = Shell::GetPrimaryRootWindow() | 795 aura::WindowTreeHostDelegate* delegate = Shell::GetPrimaryRootWindow() |
| 796 ->GetDispatcher()->AsWindowTreeHostDelegate(); | 796 ->GetDispatcher()->AsWindowTreeHostDelegate(); |
| 797 Shell::GetInstance()->AddPreTargetHandler(&buffer); | 797 Shell::GetInstance()->AddPreTargetHandler(&buffer); |
| 798 Shell::GetInstance()->sticky_keys_controller()->Enable(true); | 798 Shell::GetInstance()->sticky_keys_controller()->Enable(true); |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 904 static_cast<ui::MouseWheelEvent*>(events[0])->y_offset()); | 904 static_cast<ui::MouseWheelEvent*>(events[0])->y_offset()); |
| 905 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 905 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
| 906 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 906 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
| 907 EXPECT_EQ(ui::VKEY_CONTROL, | 907 EXPECT_EQ(ui::VKEY_CONTROL, |
| 908 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 908 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
| 909 | 909 |
| 910 Shell::GetInstance()->RemovePreTargetHandler(&buffer); | 910 Shell::GetInstance()->RemovePreTargetHandler(&buffer); |
| 911 } | 911 } |
| 912 | 912 |
| 913 } // namespace ash | 913 } // namespace ash |
| OLD | NEW |