| OLD | NEW | 
|    1 // Copyright 2015 The Chromium Authors. All rights reserved. |    1 // Copyright 2015 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 "content/browser/renderer_host/input/web_input_event_builders_mac.h" |    5 #include "content/browser/renderer_host/input/web_input_event_builders_mac.h" | 
|    6  |    6  | 
|    7 #include <Carbon/Carbon.h> |    7 #include <Carbon/Carbon.h> | 
|    8 #import <Cocoa/Cocoa.h> |    8 #import <Cocoa/Cocoa.h> | 
|    9 #include <stddef.h> |    9 #include <stddef.h> | 
|   10  |   10  | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   67 } |   67 } | 
|   68  |   68  | 
|   69 }  // namespace |   69 }  // namespace | 
|   70  |   70  | 
|   71 // Test that arrow keys don't have numpad modifier set. |   71 // Test that arrow keys don't have numpad modifier set. | 
|   72 TEST(WebInputEventBuilderMacTest, ArrowKeyNumPad) { |   72 TEST(WebInputEventBuilderMacTest, ArrowKeyNumPad) { | 
|   73   // Left |   73   // Left | 
|   74   NSEvent* mac_event = BuildFakeKeyEvent(0x7B, NSLeftArrowFunctionKey, |   74   NSEvent* mac_event = BuildFakeKeyEvent(0x7B, NSLeftArrowFunctionKey, | 
|   75                                          NSNumericPadKeyMask, NSKeyDown); |   75                                          NSNumericPadKeyMask, NSKeyDown); | 
|   76   WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event); |   76   WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event); | 
|   77   EXPECT_EQ(0, web_event.modifiers); |   77   EXPECT_EQ(0, web_event.modifiers()); | 
|   78   EXPECT_EQ(ui::DomCode::ARROW_LEFT, |   78   EXPECT_EQ(ui::DomCode::ARROW_LEFT, | 
|   79             static_cast<ui::DomCode>(web_event.domCode)); |   79             static_cast<ui::DomCode>(web_event.domCode)); | 
|   80   EXPECT_EQ(ui::DomKey::ARROW_LEFT, web_event.domKey); |   80   EXPECT_EQ(ui::DomKey::ARROW_LEFT, web_event.domKey); | 
|   81  |   81  | 
|   82   // Right |   82   // Right | 
|   83   mac_event = BuildFakeKeyEvent(0x7C, NSRightArrowFunctionKey, |   83   mac_event = BuildFakeKeyEvent(0x7C, NSRightArrowFunctionKey, | 
|   84                                 NSNumericPadKeyMask, NSKeyDown); |   84                                 NSNumericPadKeyMask, NSKeyDown); | 
|   85   web_event = WebKeyboardEventBuilder::Build(mac_event); |   85   web_event = WebKeyboardEventBuilder::Build(mac_event); | 
|   86   EXPECT_EQ(0, web_event.modifiers); |   86   EXPECT_EQ(0, web_event.modifiers()); | 
|   87   EXPECT_EQ(ui::DomCode::ARROW_RIGHT, |   87   EXPECT_EQ(ui::DomCode::ARROW_RIGHT, | 
|   88             static_cast<ui::DomCode>(web_event.domCode)); |   88             static_cast<ui::DomCode>(web_event.domCode)); | 
|   89   EXPECT_EQ(ui::DomKey::ARROW_RIGHT, web_event.domKey); |   89   EXPECT_EQ(ui::DomKey::ARROW_RIGHT, web_event.domKey); | 
|   90  |   90  | 
|   91   // Down |   91   // Down | 
|   92   mac_event = BuildFakeKeyEvent(0x7D, NSDownArrowFunctionKey, |   92   mac_event = BuildFakeKeyEvent(0x7D, NSDownArrowFunctionKey, | 
|   93                                 NSNumericPadKeyMask, NSKeyDown); |   93                                 NSNumericPadKeyMask, NSKeyDown); | 
|   94   web_event = WebKeyboardEventBuilder::Build(mac_event); |   94   web_event = WebKeyboardEventBuilder::Build(mac_event); | 
|   95   EXPECT_EQ(0, web_event.modifiers); |   95   EXPECT_EQ(0, web_event.modifiers()); | 
|   96   EXPECT_EQ(ui::DomCode::ARROW_DOWN, |   96   EXPECT_EQ(ui::DomCode::ARROW_DOWN, | 
|   97             static_cast<ui::DomCode>(web_event.domCode)); |   97             static_cast<ui::DomCode>(web_event.domCode)); | 
|   98   EXPECT_EQ(ui::DomKey::ARROW_DOWN, web_event.domKey); |   98   EXPECT_EQ(ui::DomKey::ARROW_DOWN, web_event.domKey); | 
|   99  |   99  | 
|  100   // Up |  100   // Up | 
|  101   mac_event = BuildFakeKeyEvent(0x7E, NSUpArrowFunctionKey, NSNumericPadKeyMask, |  101   mac_event = BuildFakeKeyEvent(0x7E, NSUpArrowFunctionKey, NSNumericPadKeyMask, | 
|  102                                 NSKeyDown); |  102                                 NSKeyDown); | 
|  103   web_event = WebKeyboardEventBuilder::Build(mac_event); |  103   web_event = WebKeyboardEventBuilder::Build(mac_event); | 
|  104   EXPECT_EQ(0, web_event.modifiers); |  104   EXPECT_EQ(0, web_event.modifiers()); | 
|  105   EXPECT_EQ(ui::DomCode::ARROW_UP, static_cast<ui::DomCode>(web_event.domCode)); |  105   EXPECT_EQ(ui::DomCode::ARROW_UP, static_cast<ui::DomCode>(web_event.domCode)); | 
|  106   EXPECT_EQ(ui::DomKey::ARROW_UP, web_event.domKey); |  106   EXPECT_EQ(ui::DomKey::ARROW_UP, web_event.domKey); | 
|  107 } |  107 } | 
|  108  |  108  | 
|  109 // Test that control sequence generate the correct vkey code. |  109 // Test that control sequence generate the correct vkey code. | 
|  110 TEST(WebInputEventBuilderMacTest, ControlSequence) { |  110 TEST(WebInputEventBuilderMacTest, ControlSequence) { | 
|  111   // Ctrl-[ generates escape. |  111   // Ctrl-[ generates escape. | 
|  112   NSEvent* mac_event = |  112   NSEvent* mac_event = | 
|  113       BuildFakeKeyEvent(0x21, 0x1b, NSControlKeyMask, NSKeyDown); |  113       BuildFakeKeyEvent(0x21, 0x1b, NSControlKeyMask, NSKeyDown); | 
|  114   WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event); |  114   WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event); | 
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  173 // pressed simultaneously. |  173 // pressed simultaneously. | 
|  174 TEST(WebInputEventFactoryTestMac, SimultaneousModifierKeys) { |  174 TEST(WebInputEventFactoryTestMac, SimultaneousModifierKeys) { | 
|  175   for (size_t i = 0; i < arraysize(kModifierKeys) / 2; ++i) { |  175   for (size_t i = 0; i < arraysize(kModifierKeys) / 2; ++i) { | 
|  176     const ModifierKey& left = kModifierKeys[2 * i]; |  176     const ModifierKey& left = kModifierKeys[2 * i]; | 
|  177     const ModifierKey& right = kModifierKeys[2 * i + 1]; |  177     const ModifierKey& right = kModifierKeys[2 * i + 1]; | 
|  178     // Press the left key. |  178     // Press the left key. | 
|  179     NSEvent* mac_event = BuildFakeKeyEvent( |  179     NSEvent* mac_event = BuildFakeKeyEvent( | 
|  180         left.mac_key_code, 0, left.left_or_right_mask | left.non_specific_mask, |  180         left.mac_key_code, 0, left.left_or_right_mask | left.non_specific_mask, | 
|  181         NSFlagsChanged); |  181         NSFlagsChanged); | 
|  182     WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event); |  182     WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event); | 
|  183     EXPECT_EQ(WebInputEvent::RawKeyDown, web_event.type); |  183     EXPECT_EQ(WebInputEvent::RawKeyDown, web_event.type()); | 
|  184     // Press the right key |  184     // Press the right key | 
|  185     mac_event = |  185     mac_event = | 
|  186         BuildFakeKeyEvent(right.mac_key_code, 0, |  186         BuildFakeKeyEvent(right.mac_key_code, 0, | 
|  187                           left.left_or_right_mask | right.left_or_right_mask | |  187                           left.left_or_right_mask | right.left_or_right_mask | | 
|  188                               left.non_specific_mask, |  188                               left.non_specific_mask, | 
|  189                           NSFlagsChanged); |  189                           NSFlagsChanged); | 
|  190     web_event = WebKeyboardEventBuilder::Build(mac_event); |  190     web_event = WebKeyboardEventBuilder::Build(mac_event); | 
|  191     EXPECT_EQ(WebInputEvent::RawKeyDown, web_event.type); |  191     EXPECT_EQ(WebInputEvent::RawKeyDown, web_event.type()); | 
|  192     // Release the right key |  192     // Release the right key | 
|  193     mac_event = BuildFakeKeyEvent( |  193     mac_event = BuildFakeKeyEvent( | 
|  194         right.mac_key_code, 0, left.left_or_right_mask | left.non_specific_mask, |  194         right.mac_key_code, 0, left.left_or_right_mask | left.non_specific_mask, | 
|  195         NSFlagsChanged); |  195         NSFlagsChanged); | 
|  196     // Release the left key |  196     // Release the left key | 
|  197     mac_event = BuildFakeKeyEvent(left.mac_key_code, 0, 0, NSFlagsChanged); |  197     mac_event = BuildFakeKeyEvent(left.mac_key_code, 0, 0, NSFlagsChanged); | 
|  198     web_event = WebKeyboardEventBuilder::Build(mac_event); |  198     web_event = WebKeyboardEventBuilder::Build(mac_event); | 
|  199     EXPECT_EQ(WebInputEvent::KeyUp, web_event.type); |  199     EXPECT_EQ(WebInputEvent::KeyUp, web_event.type()); | 
|  200   } |  200   } | 
|  201 } |  201 } | 
|  202  |  202  | 
|  203 // Test that individual modifier keys are still reported correctly, even if the |  203 // Test that individual modifier keys are still reported correctly, even if the | 
|  204 // undocumented left- or right-hand flags are not set. |  204 // undocumented left- or right-hand flags are not set. | 
|  205 TEST(WebInputEventBuilderMacTest, MissingUndocumentedModifierFlags) { |  205 TEST(WebInputEventBuilderMacTest, MissingUndocumentedModifierFlags) { | 
|  206   for (size_t i = 0; i < arraysize(kModifierKeys); ++i) { |  206   for (size_t i = 0; i < arraysize(kModifierKeys); ++i) { | 
|  207     const ModifierKey& key = kModifierKeys[i]; |  207     const ModifierKey& key = kModifierKeys[i]; | 
|  208     NSEvent* mac_event = BuildFakeKeyEvent( |  208     NSEvent* mac_event = BuildFakeKeyEvent( | 
|  209         key.mac_key_code, 0, key.non_specific_mask, NSFlagsChanged); |  209         key.mac_key_code, 0, key.non_specific_mask, NSFlagsChanged); | 
|  210     WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event); |  210     WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event); | 
|  211     EXPECT_EQ(WebInputEvent::RawKeyDown, web_event.type); |  211     EXPECT_EQ(WebInputEvent::RawKeyDown, web_event.type()); | 
|  212     mac_event = BuildFakeKeyEvent(key.mac_key_code, 0, 0, NSFlagsChanged); |  212     mac_event = BuildFakeKeyEvent(key.mac_key_code, 0, 0, NSFlagsChanged); | 
|  213     web_event = WebKeyboardEventBuilder::Build(mac_event); |  213     web_event = WebKeyboardEventBuilder::Build(mac_event); | 
|  214     EXPECT_EQ(WebInputEvent::KeyUp, web_event.type); |  214     EXPECT_EQ(WebInputEvent::KeyUp, web_event.type()); | 
|  215   } |  215   } | 
|  216 } |  216 } | 
|  217  |  217  | 
|  218 // Test system key events recognition. |  218 // Test system key events recognition. | 
|  219 TEST(WebInputEventBuilderMacTest, SystemKeyEvents) { |  219 TEST(WebInputEventBuilderMacTest, SystemKeyEvents) { | 
|  220   // Cmd + B should not be treated as system event. |  220   // Cmd + B should not be treated as system event. | 
|  221   NSEvent* macEvent = |  221   NSEvent* macEvent = | 
|  222       BuildFakeKeyEvent(kVK_ANSI_B, 'B', NSCommandKeyMask, NSKeyDown); |  222       BuildFakeKeyEvent(kVK_ANSI_B, 'B', NSCommandKeyMask, NSKeyDown); | 
|  223   WebKeyboardEvent webEvent = WebKeyboardEventBuilder::Build(macEvent); |  223   WebKeyboardEvent webEvent = WebKeyboardEventBuilder::Build(macEvent); | 
|  224   EXPECT_FALSE(webEvent.isSystemKey); |  224   EXPECT_FALSE(webEvent.isSystemKey); | 
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  610   EXPECT_EQ(web_event.deltaY, ui_event.y_offset()); |  610   EXPECT_EQ(web_event.deltaY, ui_event.y_offset()); | 
|  611  |  611  | 
|  612   EXPECT_EQ(11, web_event.x); |  612   EXPECT_EQ(11, web_event.x); | 
|  613   EXPECT_EQ(web_event.x, ui_event.x()); |  613   EXPECT_EQ(web_event.x, ui_event.x()); | 
|  614  |  614  | 
|  615   // Both ui:: and blink:: events use an origin at the top-left. |  615   // Both ui:: and blink:: events use an origin at the top-left. | 
|  616   EXPECT_EQ(100 - 22, web_event.y); |  616   EXPECT_EQ(100 - 22, web_event.y); | 
|  617   EXPECT_EQ(web_event.y, ui_event.y()); |  617   EXPECT_EQ(web_event.y, ui_event.y()); | 
|  618   [window close]; |  618   [window close]; | 
|  619 } |  619 } | 
| OLD | NEW |