Index: content/browser/renderer_host/render_widget_host_view_android.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc |
index 9c45d7c59a1af24c656f67fd6af09bff7eb926ae..df67f69c4df0abdf4d6ab76f64d403c0ec9f40ca 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_android.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
@@ -73,6 +73,11 @@ void InsertSyncPointAndAckForCompositor( |
route_id, renderer_host_id, ack); |
} |
+// Sends an acknowledgement to the renderer of a processed IME event. |
+void SendAcknowledgeImeEvent(RenderWidgetHostImpl* host) { |
+ host->Send(new ViewMsg_AcknowledgeImeEvent(host->GetRoutingID())); |
+} |
+ |
} // anonymous namespace |
RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
@@ -83,6 +88,7 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
are_layers_attached_(true), |
content_view_core_(NULL), |
ime_adapter_android_(this), |
+ strict_ime_processing_(false), |
cached_background_color_(SK_ColorWHITE), |
texture_id_in_layer_(0), |
weak_ptr_factory_(this), |
@@ -114,6 +120,10 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
true); |
} |
+ strict_ime_processing_ = |
+ CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableStrictImeProcessing); |
+ |
host_->SetView(this); |
SetContentViewCore(content_view_core); |
} |
@@ -390,6 +400,12 @@ int RenderWidgetHostViewAndroid::GetNativeImeAdapter() { |
void RenderWidgetHostViewAndroid::OnTextInputStateChanged( |
const ViewHostMsg_TextInputState_Params& params) { |
+ if (has_strict_ime_processing()) { |
+ // Regardless of how we exit from this method, we must acknowledge that we |
+ // processed the input state change. |
+ base::ScopedClosureRunner ackCaller( |
+ base::Bind(&SendAcknowledgeImeEvent, host_)); |
+ } |
if (!IsShowing()) |
return; |