Home | History | Annotate | Download | only in test
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "content/test/mock_keyboard.h"
      6 
      7 #include "base/logging.h"
      8 
      9 namespace content {
     10 
     11 MockKeyboard::MockKeyboard()
     12     : keyboard_layout_(LAYOUT_NULL),
     13       keyboard_modifiers_(INVALID) {
     14 }
     15 
     16 MockKeyboard::~MockKeyboard() {
     17 }
     18 
     19 int MockKeyboard::GetCharacters(Layout layout,
     20                                 int key_code,
     21                                 Modifiers modifiers,
     22                                 std::wstring* output) {
     23 #if defined(OS_WIN)
     24   CHECK(output);
     25   // Change the keyboard layout only when we have to because it takes a lot of
     26   // time to load a keyboard-layout driver.
     27   // When we change the layout, we reset the modifier status to force updating
     28   // the keyboard status.
     29   if (layout != keyboard_layout_) {
     30     if (!driver_.SetLayout(layout))
     31       return -1;
     32     keyboard_layout_ = layout;
     33     keyboard_modifiers_ = INVALID;
     34   }
     35 
     36   // Update the keyboard states.
     37   if (modifiers != keyboard_modifiers_) {
     38     if (!driver_.SetModifiers(modifiers))
     39       return -1;
     40     keyboard_modifiers_ = modifiers;
     41   }
     42 
     43   // Retrieve Unicode characters associate with the key code.
     44   return driver_.GetCharacters(key_code, output);
     45 #else
     46   NOTIMPLEMENTED();
     47   return -1;
     48 #endif
     49 }
     50 
     51 }  // namespace content
     52