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 feed3fe4ed60cc5bfe6dcfe401fa38162970f1cb..30c027d771e80144460b507c866bf1b198261b56 100644 |
--- a/content/browser/web_contents/web_contents_impl.cc |
+++ b/content/browser/web_contents/web_contents_impl.cc |
@@ -363,6 +363,7 @@ WebContentsImpl::WebContentsImpl(BrowserContext* browser_context) |
audio_stream_monitor_(this), |
virtual_keyboard_requested_(false), |
page_scale_factor_is_one_(true), |
+ view_with_active_text_input_(nullptr), |
loading_weak_factory_(this), |
weak_factory_(this) { |
frame_tree_.SetFrameRemoveListener( |
@@ -2240,6 +2241,38 @@ void WebContentsImpl::SendScreenRects() { |
browser_plugin_embedder_->DidSendScreenRects(); |
} |
+TextInputState WebContentsImpl::GetTextInputState() { |
+ if (GetOuterWebContents()) |
+ return GetOuterWebContents()->GetTextInputState(); |
+ 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_ != rwhv && |
+ rwhv->text_input_state()->type == ui::TEXT_INPUT_TYPE_NONE) |
+ return; |
+ |
+ view_with_active_text_input_ = |
+ (rwhv->text_input_state()->type != ui::TEXT_INPUT_TYPE_NONE) ? rwhv |
+ : nullptr; |
+ 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(); |