15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/test/mock_keyboard.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockKeyboard::MockKeyboard()
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : keyboard_layout_(LAYOUT_NULL),
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      keyboard_modifiers_(INVALID) {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockKeyboard::~MockKeyboard() {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int MockKeyboard::GetCharacters(Layout layout,
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int key_code,
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                Modifiers modifiers,
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                std::wstring* output) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(output);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Change the keyboard layout only when we have to because it takes a lot of
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // time to load a keyboard-layout driver.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When we change the layout, we reset the modifier status to force updating
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the keyboard status.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (layout != keyboard_layout_) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!driver_.SetLayout(layout))
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return -1;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    keyboard_layout_ = layout;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    keyboard_modifiers_ = INVALID;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Update the keyboard states.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (modifiers != keyboard_modifiers_) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!driver_.SetModifiers(modifiers))
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return -1;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    keyboard_modifiers_ = modifiers;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Retrieve Unicode characters associate with the key code.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return driver_.GetCharacters(key_code, output);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return -1;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
52