| Index: ui/aura/test/event_generator.cc
 | 
| diff --git a/ui/aura/test/event_generator.cc b/ui/aura/test/event_generator.cc
 | 
| index ebad4f31158fca402ddc706f398c6c7e1fbbaab1..a2eb897daad5d2853beaaa66c9ad3e9699591ca8 100644
 | 
| --- a/ui/aura/test/event_generator.cc
 | 
| +++ b/ui/aura/test/event_generator.cc
 | 
| @@ -13,12 +13,16 @@
 | 
|  #include "ui/base/x/x11_util.h"
 | 
|  #endif
 | 
|  
 | 
| +#if defined(OS_WIN)
 | 
| +#include "ui/base/keycodes/keyboard_code_conversion.h"
 | 
| +#endif
 | 
| +
 | 
|  namespace {
 | 
|  
 | 
|  class TestKeyEvent : public ui::KeyEvent {
 | 
|   public:
 | 
| -  TestKeyEvent(const base::NativeEvent& native_event, int flags)
 | 
| -      : KeyEvent(native_event, false /* is_char */) {
 | 
| +  TestKeyEvent(const base::NativeEvent& native_event, int flags, bool is_char)
 | 
| +      : KeyEvent(native_event, is_char) {
 | 
|      set_flags(flags);
 | 
|    }
 | 
|  };
 | 
| @@ -309,17 +313,28 @@ void EventGenerator::DispatchKeyEvent(bool is_press,
 | 
|                                        ui::KeyboardCode key_code,
 | 
|                                        int flags) {
 | 
|  #if defined(OS_WIN)
 | 
| +  UINT key_press = WM_KEYDOWN;
 | 
| +  uint16 character = ui::GetCharacterFromKeyCode(key_code, flags);
 | 
| +  if (is_press && character) {
 | 
| +    MSG native_event = { NULL, WM_KEYDOWN, key_code, 0 };
 | 
| +    TestKeyEvent keyev(native_event, flags, false);
 | 
| +    Dispatch(keyev);
 | 
| +    // On Windows, WM_KEYDOWN event is followed by WM_CHAR with a character
 | 
| +    // if the key event cooresponds to a real character.
 | 
| +    key_press = WM_CHAR;
 | 
| +    key_code = static_cast<ui::KeyboardCode>(character);
 | 
| +  }
 | 
|    MSG native_event =
 | 
| -      { NULL, (is_press ? WM_KEYDOWN : WM_KEYUP), key_code, 0 };
 | 
| -  TestKeyEvent keyev(native_event, flags);
 | 
| +      { NULL, (is_press ? key_press : WM_KEYUP), key_code, 0 };
 | 
| +  TestKeyEvent keyev(native_event, flags, key_press == WM_CHAR);
 | 
|  #else
 | 
|    ui::EventType type = is_press ? ui::ET_KEY_PRESSED : ui::ET_KEY_RELEASED;
 | 
|  #if defined(USE_X11)
 | 
|    scoped_ptr<XEvent> native_event(new XEvent);
 | 
|    ui::InitXKeyEventForTesting(type, key_code, flags, native_event.get());
 | 
| -  TestKeyEvent keyev(native_event.get(), flags);
 | 
| +  TestKeyEvent keyev(native_event.get(), flags, false);
 | 
|  #else
 | 
| -  ui::KeyEvent keyev(type, key_code, flags);
 | 
| +  ui::KeyEvent keyev(type, key_code, flags, false);
 | 
|  #endif  // USE_X11
 | 
|  #endif  // OS_WIN
 | 
|    Dispatch(keyev);
 | 
| 
 |