|  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef CONTENT_TEST_MOCK_KEYBOARD_H_ | 
|  | #define CONTENT_TEST_MOCK_KEYBOARD_H_ | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | #include "base/basictypes.h" | 
|  |  | 
|  | #if defined(OS_WIN) | 
|  | #include "content/test/mock_keyboard_driver_win.h" | 
|  | #endif | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | // A mock keyboard interface. | 
|  | // This class defines a pseudo keyboard device, which implements mappings from | 
|  | // a tuple (layout, key code, modifiers) to Unicode characters so that | 
|  | // engineers can write RenderViewTest cases without taking care of such | 
|  | // mappings. (This mapping is not trivial when using non-US keyboards.) | 
|  | // A pseudo keyboard device consists of two parts: a platform-independent part | 
|  | // and a platform-dependent part. This class implements the platform-independent | 
|  | // part. The platform-dependet part is implemented in the MockKeyboardWin class. | 
|  | // This class is usually called from RenderViewTest::SendKeyEvent(). | 
|  | class MockKeyboard { | 
|  | public: | 
|  | // Represents keyboard-layouts. | 
|  | enum Layout { | 
|  | LAYOUT_NULL, | 
|  | LAYOUT_ARABIC, | 
|  | LAYOUT_BULGARIAN, | 
|  | LAYOUT_CHINESE_TRADITIONAL, | 
|  | LAYOUT_CZECH, | 
|  | LAYOUT_DANISH, | 
|  | LAYOUT_GERMAN, | 
|  | LAYOUT_GREEK, | 
|  | LAYOUT_UNITED_STATES, | 
|  | LAYOUT_SPANISH, | 
|  | LAYOUT_FINNISH, | 
|  | LAYOUT_FRENCH, | 
|  | LAYOUT_HEBREW, | 
|  | LAYOUT_HUNGARIAN, | 
|  | LAYOUT_ICELANDIC, | 
|  | LAYOUT_ITALIAN, | 
|  | LAYOUT_JAPANESE, | 
|  | LAYOUT_KOREAN, | 
|  | LAYOUT_POLISH, | 
|  | LAYOUT_PORTUGUESE_BRAZILIAN, | 
|  | LAYOUT_ROMANIAN, | 
|  | LAYOUT_RUSSIAN, | 
|  | LAYOUT_CROATIAN, | 
|  | LAYOUT_SLOVAK, | 
|  | LAYOUT_THAI, | 
|  | LAYOUT_SWEDISH, | 
|  | LAYOUT_TURKISH_Q, | 
|  | LAYOUT_VIETNAMESE, | 
|  | LAYOUT_DEVANAGARI_INSCRIPT, | 
|  | LAYOUT_PORTUGUESE, | 
|  | LAYOUT_UNITED_STATES_DVORAK, | 
|  | LAYOUT_CANADIAN_FRENCH, | 
|  | }; | 
|  |  | 
|  | // Enumerates keyboard modifiers. | 
|  | // These modifiers explicitly distinguish left-keys and right-keys because we | 
|  | // should emulate AltGr (right-alt) key, used by many European keyboards to | 
|  | // input alternate graph characters. | 
|  | enum Modifiers { | 
|  | INVALID = -1, | 
|  | NONE = 0, | 
|  | LEFT_SHIFT = 1 << 0, | 
|  | LEFT_CONTROL = 1 << 1, | 
|  | LEFT_ALT = 1 << 2, | 
|  | LEFT_META = 1 << 3, | 
|  | RIGHT_SHIFT = 1 << 4, | 
|  | RIGHT_CONTROL = 1 << 5, | 
|  | RIGHT_ALT = 1 << 6, | 
|  | RIGHT_META = 1 << 7, | 
|  | KEYPAD = 1 << 8, | 
|  | AUTOREPEAAT = 1 << 9, | 
|  | }; | 
|  |  | 
|  | MockKeyboard(); | 
|  | ~MockKeyboard(); | 
|  |  | 
|  | // Retrieves Unicode characters composed from the the specified keyboard | 
|  | // layout, key code, and modifiers, i.e. characters returned when we type | 
|  | // specified keys on a specified layout. | 
|  | // This function returns the length of Unicode characters filled in the | 
|  | // |output| parameter. | 
|  | int GetCharacters(Layout layout, | 
|  | int key_code, | 
|  | Modifiers modifiers, | 
|  | std::wstring* output); | 
|  |  | 
|  | private: | 
|  | Layout keyboard_layout_; | 
|  | Modifiers keyboard_modifiers_; | 
|  |  | 
|  | #if defined(OS_WIN) | 
|  | MockKeyboardDriverWin driver_; | 
|  | #endif | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(MockKeyboard); | 
|  | }; | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_TEST_MOCK_KEYBOARD_H_ |