Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index 8997a58307d4207416a25d7e8cc9e1a9b69e6467..24663e675938d5d8ea3ba993f732b6f210ee0075 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -743,6 +743,8 @@ bool RenderWidget::OnMessageReceived(const IPC::Message& message) { |
IPC_MESSAGE_HANDLER(ViewMsg_SetSurfaceIdNamespace, OnSetSurfaceIdNamespace) |
#if defined(OS_ANDROID) |
IPC_MESSAGE_HANDLER(InputMsg_ImeEventAck, OnImeEventAck) |
+ IPC_MESSAGE_HANDLER(InputMsg_RequestTextInputStateUpdate, |
+ OnRequestTextInputStateUpdate) |
IPC_MESSAGE_HANDLER(ViewMsg_ShowImeIfNeeded, OnShowImeIfNeeded) |
#endif |
IPC_MESSAGE_UNHANDLED(handled = false) |
@@ -1114,8 +1116,12 @@ void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event, |
key_event.nativeKeyCode != AKEYCODE_DPAD_LEFT && |
key_event.nativeKeyCode != AKEYCODE_DPAD_RIGHT && |
key_event.nativeKeyCode != AKEYCODE_DPAD_UP && |
- key_event.nativeKeyCode != AKEYCODE_DPAD_DOWN) |
+ key_event.nativeKeyCode != AKEYCODE_DPAD_DOWN && |
+ // We do not need to block additionally for composition key code. |
+ key_event.nativeKeyCode != 229) { |
+ LOG(ERROR) << "XXX OnHandleInputEvent: " << key_event.nativeKeyCode; |
ime_event_guard_maybe.reset(new ImeEventGuard(this)); |
+ } |
} |
#endif |
@@ -1688,6 +1694,7 @@ void RenderWidget::OnImeSetComposition( |
int selection_start, int selection_end) { |
if (!ShouldHandleImeEvent()) |
return; |
+ LOG(ERROR) << "XXX OnImeSetComposition"; |
ImeEventGuard guard(this); |
if (!webwidget_->setComposition( |
text, WebVector<WebCompositionUnderline>(underlines), |
@@ -1705,6 +1712,7 @@ void RenderWidget::OnImeConfirmComposition(const base::string16& text, |
bool keep_selection) { |
if (!ShouldHandleImeEvent()) |
return; |
+ LOG(ERROR) << "XXX OnImeConfirmComposition"; |
ImeEventGuard guard(this); |
handling_input_event_ = true; |
if (text.length()) |
@@ -1788,12 +1796,20 @@ void RenderWidget::OnImeEventAck() { |
DCHECK_GE(text_input_info_history_.size(), 1u); |
text_input_info_history_.pop_front(); |
} |
+ |
+void RenderWidget::OnRequestTextInputStateUpdate() { |
+ LOG(ERROR) << "XXX OnRequestTextInputStateUpdate"; |
+ ImeEventGuard guard(this); |
+} |
#endif |
bool RenderWidget::ShouldHandleImeEvent() { |
#if defined(OS_ANDROID) |
if (!webwidget_) |
return false; |
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kUseImeThread)) |
+ return true; |
// We cannot handle IME events if there is any chance that the event we are |
// receiving here from the browser is based on the state that is different |
@@ -1906,7 +1922,6 @@ static bool IsDateTimeInput(ui::TextInputType type) { |
type == ui::TEXT_INPUT_TYPE_WEEK; |
} |
- |
void RenderWidget::StartHandlingImeEvent() { |
DCHECK(!handling_ime_event_); |
handling_ime_event_ = true; |
@@ -1940,17 +1955,26 @@ void RenderWidget::UpdateTextInputState(ShowIme show_ime, |
bool new_can_compose_inline = CanComposeInline(); |
+ bool use_ime_thread = false; |
+#if defined(OS_ANDROID) |
+ use_ime_thread = base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kUseImeThread); |
+#endif |
+ |
// Only sends text input params if they are changed or if the ime should be |
// shown. |
if (show_ime == SHOW_IME_IF_NEEDED || |
- (text_input_type_ != new_type || |
- text_input_mode_ != new_mode || |
+ (use_ime_thread && change_source == FROM_IME) || |
+ (text_input_type_ != new_type || text_input_mode_ != new_mode || |
text_input_info_ != new_info || |
can_compose_inline_ != new_can_compose_inline) |
#if defined(OS_ANDROID) |
|| text_field_is_dirty_ |
#endif |
) { |
+ if (change_source == FROM_IME) { |
+ LOG(ERROR) << "cr.Ime UpdateTextInputState FROM_IME"; |
+ } |
ViewHostMsg_TextInputState_Params params; |
params.type = new_type; |
params.mode = new_mode; |
@@ -2140,6 +2164,7 @@ float RenderWidget::deviceScaleFactor() { |
} |
void RenderWidget::resetInputMethod() { |
+ LOG(ERROR) << "XXX resetInputMethod"; |
ImeEventGuard guard(this); |
// If the last text input type is not None, then we should finish any |
// ongoing composition regardless of the new text input type. |
@@ -2329,7 +2354,9 @@ void RenderWidget::setTouchAction( |
void RenderWidget::didUpdateTextOfFocusedElementByNonUserInput() { |
#if defined(OS_ANDROID) |
- text_field_is_dirty_ = true; |
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kUseImeThread)) |
+ text_field_is_dirty_ = true; |
#endif |
} |