1 // Copyright (c) 2012 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/public/browser/native_web_keyboard_event.h" 6 7 #include "base/android/jni_android.h" 8 #include "content/browser/renderer_host/input/web_input_event_builders_android.h" 9 #include "ui/gfx/native_widget_types.h" 10 11 namespace { 12 13 jobject NewGlobalRefForKeyEvent(jobject key_event) { 14 if (key_event == NULL) return NULL; 15 return base::android::AttachCurrentThread()->NewGlobalRef(key_event); 16 } 17 18 void DeleteGlobalRefForKeyEvent(jobject key_event) { 19 if (key_event != NULL) 20 base::android::AttachCurrentThread()->DeleteGlobalRef(key_event); 21 } 22 23 } 24 25 namespace content { 26 27 NativeWebKeyboardEvent::NativeWebKeyboardEvent() 28 : os_event(NULL), 29 skip_in_browser(false) { 30 } 31 32 NativeWebKeyboardEvent::NativeWebKeyboardEvent( 33 WebKit::WebInputEvent::Type type, 34 int modifiers, double time_secs, int keycode, int unicode_character, 35 bool is_system_key) 36 : WebKeyboardEvent(WebKeyboardEventBuilder::Build( 37 type, modifiers, time_secs, keycode, unicode_character, 38 is_system_key)) { 39 os_event = NULL; 40 skip_in_browser = false; 41 } 42 43 NativeWebKeyboardEvent::NativeWebKeyboardEvent( 44 jobject android_key_event, WebKit::WebInputEvent::Type type, 45 int modifiers, double time_secs, int keycode, int unicode_character, 46 bool is_system_key) 47 : WebKeyboardEvent(WebKeyboardEventBuilder::Build( 48 type, modifiers, time_secs, keycode, unicode_character, 49 is_system_key)) { 50 os_event = NewGlobalRefForKeyEvent(android_key_event); 51 skip_in_browser = false; 52 } 53 54 NativeWebKeyboardEvent::NativeWebKeyboardEvent( 55 const NativeWebKeyboardEvent& other) 56 : WebKeyboardEvent(other), 57 os_event(NewGlobalRefForKeyEvent(other.os_event)), 58 skip_in_browser(other.skip_in_browser) { 59 } 60 61 NativeWebKeyboardEvent& NativeWebKeyboardEvent::operator=( 62 const NativeWebKeyboardEvent& other) { 63 WebKeyboardEvent::operator=(other); 64 65 os_event = NewGlobalRefForKeyEvent(other.os_event); 66 skip_in_browser = other.skip_in_browser; 67 68 return *this; 69 } 70 71 NativeWebKeyboardEvent::~NativeWebKeyboardEvent() { 72 DeleteGlobalRefForKeyEvent(os_event); 73 } 74 75 } // namespace content 76