Chromium Code Reviews| Index: content/renderer/render_widget.cc |
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
| index 4c0fda13bb72976e3dd52db55248cf0bf05495d2..c1bfdf40db9bbcda884934e860d1f0ee5c94f568 100644 |
| --- a/content/renderer/render_widget.cc |
| +++ b/content/renderer/render_widget.cc |
| @@ -661,6 +661,10 @@ void RenderWidget::SendOrCrash(IPC::Message* message) { |
| CHECK(closing_ || result) << "Failed to send message"; |
| } |
| +bool RenderWidget::ShouldHandleImeEvents() const { |
| + return GetWebWidget()->isWebFrameWidget() && has_focus_; |
| +} |
| + |
| void RenderWidget::SetWindowRectSynchronously( |
| const gfx::Rect& new_window_rect) { |
| ResizeParams params; |
| @@ -1034,8 +1038,8 @@ void RenderWidget::UpdateTextInputState(ShowIme show_ime, |
| return; // Not considered as a text input field in WebKit/Chromium. |
| blink::WebTextInputInfo new_info; |
| - if (GetWebWidget()) |
| - new_info = GetWebWidget()->textInputInfo(); |
| + if (auto* controller = GetInputMethodController()) |
| + new_info = controller->textInputInfo(); |
| const ui::TextInputMode new_mode = |
| ConvertWebTextInputMode(new_info.inputMode); |
| @@ -1504,6 +1508,9 @@ void RenderWidget::OnImeSetComposition( |
| const std::vector<WebCompositionUnderline>& underlines, |
| const gfx::Range& replacement_range, |
| int selection_start, int selection_end) { |
| + if (!ShouldHandleImeEvents()) |
| + return; |
| + |
| #if BUILDFLAG(ENABLE_PLUGINS) |
| if (focused_pepper_plugin_) { |
| focused_pepper_plugin_->render_frame()->OnImeSetComposition( |
| @@ -1535,6 +1542,9 @@ void RenderWidget::OnImeSetComposition( |
| void RenderWidget::OnImeCommitText(const base::string16& text, |
| const gfx::Range& replacement_range, |
| int relative_cursor_pos) { |
| + if (!ShouldHandleImeEvents()) |
| + return; |
| + |
| #if BUILDFLAG(ENABLE_PLUGINS) |
| if (focused_pepper_plugin_) { |
| focused_pepper_plugin_->render_frame()->OnImeCommitText( |
| @@ -1558,6 +1568,9 @@ void RenderWidget::OnImeCommitText(const base::string16& text, |
| } |
| void RenderWidget::OnImeFinishComposingText(bool keep_selection) { |
| + if (!ShouldHandleImeEvents()) |
| + return; |
| + |
| #if BUILDFLAG(ENABLE_PLUGINS) |
| if (focused_pepper_plugin_) { |
| focused_pepper_plugin_->render_frame()->OnImeFinishComposingText( |
| @@ -1729,8 +1742,8 @@ ui::TextInputType RenderWidget::GetTextInputType() { |
| if (focused_pepper_plugin_) |
| return focused_pepper_plugin_->text_input_type(); |
| #endif |
| - if (GetWebWidget()) |
| - return ConvertWebTextInputType(GetWebWidget()->textInputType()); |
| + if (auto* controller = GetInputMethodController()) |
| + return ConvertWebTextInputType(controller->textInputType()); |
| return ui::TEXT_INPUT_TYPE_NONE; |
| } |
| @@ -2111,7 +2124,8 @@ void RenderWidget::didHandleGestureEvent( |
| UpdateTextInputState(ShowIme::IF_NEEDED, ChangeSource::FROM_NON_IME); |
| } else if (event.type == WebInputEvent::GestureLongPress) { |
| DCHECK(GetWebWidget()); |
| - if (GetWebWidget()->textInputInfo().value.isEmpty()) |
| + blink::WebInputMethodController* controller = GetInputMethodController(); |
|
wjmaclean
2017/01/05 21:24:57
Why do you explicitly declare the type here, but u
EhsanK
2017/01/05 21:46:43
This format goes back to this CL:
https://coderevi
Charlie Reis
2017/01/05 22:25:03
Yeah, auto wasn't buying much here in terms of spa
|
| + if (!controller || controller->textInputInfo().value.isEmpty()) |
| UpdateTextInputState(ShowIme::HIDE_IME, ChangeSource::FROM_NON_IME); |
| else |
| UpdateTextInputState(ShowIme::IF_NEEDED, ChangeSource::FROM_NON_IME); |
| @@ -2124,7 +2138,9 @@ void RenderWidget::didHandleGestureEvent( |
| // TODO(estade): hit test the event against focused node to make sure |
| // the tap actually hit the focused node. |
| - blink::WebTextInputType text_input_type = GetWebWidget()->textInputType(); |
| + blink::WebInputMethodController* controller = GetInputMethodController(); |
| + blink::WebTextInputType text_input_type = |
| + controller ? controller->textInputType() : blink::WebTextInputTypeNone; |
| Send(new ViewHostMsg_FocusedNodeTouched( |
| routing_id_, text_input_type != blink::WebTextInputTypeNone)); |