15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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/public/browser/native_web_keyboard_event.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_android.h" 8bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/browser/renderer_host/input/web_input_event_builders_android.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jobject NewGlobalRefForKeyEvent(jobject key_event) { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (key_event == NULL) return NULL; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::android::AttachCurrentThread()->NewGlobalRef(key_event); 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DeleteGlobalRefForKeyEvent(jobject key_event) { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (key_event != NULL) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::android::AttachCurrentThread()->DeleteGlobalRef(key_event); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NativeWebKeyboardEvent::NativeWebKeyboardEvent() 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : os_event(NULL), 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) skip_in_browser(false) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NativeWebKeyboardEvent::NativeWebKeyboardEvent( 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebInputEvent::Type type, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers, double time_secs, int keycode, int unicode_character, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_system_key) 36bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch : WebKeyboardEvent(WebKeyboardEventBuilder::Build( 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, modifiers, time_secs, keycode, unicode_character, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_system_key)) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os_event = NULL; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) skip_in_browser = false; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NativeWebKeyboardEvent::NativeWebKeyboardEvent( 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jobject android_key_event, blink::WebInputEvent::Type type, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int modifiers, double time_secs, int keycode, int unicode_character, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_system_key) 47bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch : WebKeyboardEvent(WebKeyboardEventBuilder::Build( 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, modifiers, time_secs, keycode, unicode_character, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_system_key)) { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os_event = NewGlobalRefForKeyEvent(android_key_event); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) skip_in_browser = false; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NativeWebKeyboardEvent::NativeWebKeyboardEvent( 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NativeWebKeyboardEvent& other) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : WebKeyboardEvent(other), 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os_event(NewGlobalRefForKeyEvent(other.os_event)), 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) skip_in_browser(other.skip_in_browser) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NativeWebKeyboardEvent& NativeWebKeyboardEvent::operator=( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NativeWebKeyboardEvent& other) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKeyboardEvent::operator=(other); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os_event = NewGlobalRefForKeyEvent(other.os_event); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) skip_in_browser = other.skip_in_browser; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *this; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NativeWebKeyboardEvent::~NativeWebKeyboardEvent() { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteGlobalRefForKeyEvent(os_event); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 76