Index: content/browser/web_contents/web_contents_impl.cc |
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc |
index 2d463287de60180ff5c1c2e3e3f41c96ae7d9f7b..ea0734659973814703b869d22c3a9c879d984f19 100644 |
--- a/content/browser/web_contents/web_contents_impl.cc |
+++ b/content/browser/web_contents/web_contents_impl.cc |
@@ -2240,6 +2240,44 @@ void WebContentsImpl::SendScreenRects() { |
browser_plugin_embedder_->DidSendScreenRects(); |
} |
+TextInputState WebContentsImpl::GetTextInputState() { |
+ if (GetOuterWebContents()) |
+ return GetOuterWebContents()->GetTextInputState(); |
+ // A RWHV should update WebContentsImpl in its destruction path so that state |
+ // type is reset to none. |
+ DCHECK(view_with_active_text_input_ || |
+ text_input_state_.type == ui::TEXT_INPUT_TYPE_NONE); |
+ return text_input_state_; |
+} |
+ |
+void WebContentsImpl::UpdateTextInputState(RenderWidgetHostViewBase* rwhv, |
+ bool text_input_state_changed) { |
+ // If there is an outer WebContents, let it process this update. |
+ if (GetOuterWebContents()) { |
+ return GetOuterWebContents()->UpdateTextInputState( |
+ rwhv, text_input_state_changed); |
+ } |
+ |
+ // If this RWHV has a text input type of NONE, then there is nothing to |
+ // report to the tab RWHV. |
+ if (view_with_active_text_input_.get() != rwhv && |
+ rwhv->text_input_state()->type == ui::TEXT_INPUT_TYPE_NONE) |
+ return; |
+ |
+ if (rwhv->text_input_state()->type != ui::TEXT_INPUT_TYPE_NONE) |
+ view_with_active_text_input_ = rwhv->GetWeakPtr(); |
+ else |
+ view_with_active_text_input_.reset(); |
+ |
+ text_input_state_ = *rwhv->text_input_state(); |
+ |
+ // The top level RWHV should know about the change. |
+ RenderWidgetHostViewBase* tab_rwhv = |
+ static_cast<RenderWidgetHostViewBase*>(GetRenderWidgetHostView()); |
+ if (tab_rwhv) |
+ tab_rwhv->UpdateInputMethodIfNecessary(text_input_state_changed); |
+} |
+ |
BrowserAccessibilityManager* |
WebContentsImpl::GetRootBrowserAccessibilityManager() { |
RenderFrameHostImpl* rfh = GetMainFrame(); |