Home | History | Annotate | Download | only in renderer_host
      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