Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index 73ab00862d967b0b3e2574d512c08cb8397fe76c..15d382529e8106a0d76e9eb66de3dc94a432d75e 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -912,6 +912,23 @@ void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event, |
return; |
base::AutoReset<WebInputEvent::Type> handling_event_type_resetter( |
&handling_event_type_, input_event->type); |
+#if defined(OS_ANDROID) |
+ // On Android, when the delete key or forward delete key is pressed using IME, |
+ // |AdapterInputConnection| generates input key events to make sure all JS |
+ // listeners that monitor KeyUp and KeyDown events receive the proper key |
+ // code. Since this input key event comes from IME, we need to set the |
+ // IME event guard here to make sure it does not interfere with other IME |
+ // events. |
+ scoped_ptr<ImeEventGuard> ime_event_guard_maybe; |
+ if (WebInputEvent::isKeyboardEventType(input_event->type)) { |
+ const WebKeyboardEvent& key_event = |
+ *static_cast<const WebKeyboardEvent*>(input_event); |
+ if (key_event.nativeKeyCode == AKEYCODE_FORWARD_DEL || |
+ key_event.nativeKeyCode == AKEYCODE_DEL) { |
+ ime_event_guard_maybe.reset(new ImeEventGuard(this)); |
+ } |
+ } |
+#endif |
base::AutoReset<const ui::LatencyInfo*> resetter(¤t_event_latency_info_, |
&latency_info); |