diff options
author | Shu Chen <shuchen@google.com> | 2014-10-21 01:18:45 +0800 |
---|---|---|
committer | Shu Chen <shuchen@google.com> | 2014-10-20 17:20:56 +0000 |
commit | 274aa5b7f0f4e3095a98d64b9ee2e8ed78621c38 (patch) | |
tree | 7bfb0e2a075a006a847dc8fe85a5f9f5c4a17a87 /content/renderer | |
parent | eab0388f8dc375b88827814915abfd008481bc83 (diff) | |
download | chromium_src-274aa5b7f0f4e3095a98d64b9ee2e8ed78621c38.zip chromium_src-274aa5b7f0f4e3095a98d64b9ee2e8ed78621c38.tar.gz chromium_src-274aa5b7f0f4e3095a98d64b9ee2e8ed78621c38.tar.bz2 |
Revert "Merge ViewHostMsg_TextInputTypeChanged and ViewHostMsg_TextInputStateChanged into one."
This reverts commit 2dd467c5edc6a802877f9a582a4278b5c5332dbd.
https://codereview.chromium.org/326403002/
Conflicts:
content/browser/browser_plugin/browser_plugin_guest.cc
content/browser/browser_plugin/browser_plugin_guest.h
content/browser/frame_host/render_widget_host_view_child_frame.cc
content/browser/frame_host/render_widget_host_view_child_frame.h
content/browser/frame_host/render_widget_host_view_guest.h
content/browser/renderer_host/render_widget_host_impl.cc
content/browser/renderer_host/render_widget_host_impl.h
content/browser/renderer_host/render_widget_host_view_android.h
content/browser/renderer_host/render_widget_host_view_aura.h
content/browser/renderer_host/render_widget_host_view_base.h
content/browser/renderer_host/render_widget_host_view_mac.h
content/common/view_messages.h
content/renderer/render_frame_impl.cc
content/renderer/render_widget.cc
content/test/test_render_view_host.h
BUG=417152
TEST=None
Review URL: https://codereview.chromium.org/634313007
Cr-Commit-Position: refs/heads/master@{#299646}
(cherry picked from commit 3517bb6c601efad861dddcf01a16e2c68bf927c7)
Conflicts:
content/browser/frame_host/render_widget_host_view_child_frame.h
content/browser/frame_host/render_widget_host_view_guest.h
content/browser/renderer_host/render_widget_host_view_android.h
content/browser/renderer_host/render_widget_host_view_aura.h
content/browser/renderer_host/render_widget_host_view_mac.h
content/test/test_render_view_host.h
Review URL: https://codereview.chromium.org/663803003
Cr-Commit-Position: refs/branch-heads/2171@{#189}
Cr-Branched-From: 267aeeb8d85c8503a7fd12bd14654b8ea78d3974-refs/heads/master@{#297060}
Diffstat (limited to 'content/renderer')
-rw-r--r-- | content/renderer/npapi/webplugin_delegate_proxy.cc | 12 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.cc | 14 | ||||
-rw-r--r-- | content/renderer/render_view_browsertest.cc | 54 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 2 | ||||
-rw-r--r-- | content/renderer/render_widget.cc | 51 | ||||
-rw-r--r-- | content/renderer/render_widget.h | 6 |
6 files changed, 95 insertions, 44 deletions
diff --git a/content/renderer/npapi/webplugin_delegate_proxy.cc b/content/renderer/npapi/webplugin_delegate_proxy.cc index 0262e39..d04429b 100644 --- a/content/renderer/npapi/webplugin_delegate_proxy.cc +++ b/content/renderer/npapi/webplugin_delegate_proxy.cc @@ -923,13 +923,11 @@ void WebPluginDelegateProxy::OnNotifyIMEStatus(int input_type, if (!render_view_) return; - ViewHostMsg_TextInputState_Params p; - p.type = static_cast<ui::TextInputType>(input_type); - p.mode = ui::TEXT_INPUT_MODE_DEFAULT; - p.can_compose_inline = true; - - render_view_->Send(new ViewHostMsg_TextInputStateChanged( - render_view_->routing_id(), p)); + render_view_->Send(new ViewHostMsg_TextInputTypeChanged( + render_view_->routing_id(), + static_cast<ui::TextInputType>(input_type), + ui::TEXT_INPUT_MODE_DEFAULT, + true)); ViewHostMsg_SelectionBounds_Params bounds_params; bounds_params.anchor_rect = bounds_params.focus_rect = caret_rect; diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 80f5113..674ae7d 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -549,8 +549,7 @@ void RenderFrameImpl::PepperTextInputTypeChanged( if (instance != render_view_->focused_pepper_plugin()) return; - GetRenderWidget()->UpdateTextInputState( - RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME); + GetRenderWidget()->UpdateTextInputType(); if (renderer_accessibility()) renderer_accessibility()->FocusedNodeChanged(WebNode()); } @@ -2471,14 +2470,17 @@ void RenderFrameImpl::didChangeSelection(bool is_empty_selection) { if (is_empty_selection) selection_text_.clear(); - // UpdateTextInputState should be called before SyncSelectionIfRequired. - // UpdateTextInputState may send TextInputStateChanged to notify the focus + // UpdateTextInputType should be called before SyncSelectionIfRequired. + // UpdateTextInputType may send TextInputTypeChanged to notify the focus // was changed, and SyncSelectionIfRequired may send SelectionChanged // to notify the selection was changed. Focus change should be notified // before selection change. - GetRenderWidget()->UpdateTextInputState( - RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME); + GetRenderWidget()->UpdateTextInputType(); SyncSelectionIfRequired(); +#if defined(OS_ANDROID) + GetRenderWidget()->UpdateTextInputState(RenderWidget::NO_SHOW_IME, + RenderWidget::FROM_NON_IME); +#endif } blink::WebColorChooser* RenderFrameImpl::createColorChooser( diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index 5752e37..e0441fa 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc @@ -963,16 +963,17 @@ TEST_F(RenderViewImplTest, OnImeTypeChanged) { // Update the IME status and verify if our IME backend sends an IPC message // to activate IMEs. - view()->UpdateTextInputState( - RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME); + view()->UpdateTextInputType(); const IPC::Message* msg = render_thread_->sink().GetMessageAt(0); EXPECT_TRUE(msg != NULL); - EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); - ViewHostMsg_TextInputStateChanged::Param params; - ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); - ViewHostMsg_TextInputState_Params p = params.a; - EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, p.type); - EXPECT_EQ(true, p.can_compose_inline); + EXPECT_EQ(ViewHostMsg_TextInputTypeChanged::ID, msg->type()); + ViewHostMsg_TextInputTypeChanged::Param params; + ViewHostMsg_TextInputTypeChanged::Read(msg, ¶ms); + ui::TextInputType type = params.a; + ui::TextInputMode input_mode = params.b; + bool can_compose_inline = params.c; + EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, type); + EXPECT_EQ(true, can_compose_inline); // Move the input focus to the second <input> element, where we should // de-activate IMEs. @@ -982,34 +983,36 @@ TEST_F(RenderViewImplTest, OnImeTypeChanged) { // Update the IME status and verify if our IME backend sends an IPC message // to de-activate IMEs. - view()->UpdateTextInputState( - RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME); + view()->UpdateTextInputType(); msg = render_thread_->sink().GetMessageAt(0); EXPECT_TRUE(msg != NULL); - EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); - ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); - EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, params.a.type); - - for (size_t j = 0; j < ARRAYSIZE_UNSAFE(kInputModeTestCases); j++) { - const InputModeTestCase* test_case = &kInputModeTestCases[j]; + EXPECT_EQ(ViewHostMsg_TextInputTypeChanged::ID, msg->type()); + ViewHostMsg_TextInputTypeChanged::Read(msg, & params); + type = params.a; + input_mode = params.b; + EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, type); + + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kInputModeTestCases); i++) { + const InputModeTestCase* test_case = &kInputModeTestCases[i]; std::string javascript = base::StringPrintf("document.getElementById('%s').focus();", test_case->input_id); // Move the input focus to the target <input> element, where we should // activate IMEs. - ExecuteJavaScript(javascript.c_str()); + ExecuteJavaScriptAndReturnIntValue(base::ASCIIToUTF16(javascript), NULL); ProcessPendingMessages(); render_thread_->sink().ClearMessages(); // Update the IME status and verify if our IME backend sends an IPC // message to activate IMEs. - view()->UpdateTextInputState( - RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME); - msg = render_thread_->sink().GetMessageAt(0); + view()->UpdateTextInputType(); + const IPC::Message* msg = render_thread_->sink().GetMessageAt(0); EXPECT_TRUE(msg != NULL); - EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); - ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); - EXPECT_EQ(test_case->expected_mode, params.a.mode); + EXPECT_EQ(ViewHostMsg_TextInputTypeChanged::ID, msg->type()); + ViewHostMsg_TextInputTypeChanged::Read(msg, & params); + type = params.a; + input_mode = params.b; + EXPECT_EQ(test_case->expected_mode, input_mode); } } } @@ -1138,8 +1141,7 @@ TEST_F(RenderViewImplTest, ImeComposition) { // Update the status of our IME back-end. // TODO(hbono): we should verify messages to be sent from the back-end. - view()->UpdateTextInputState( - RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME); + view()->UpdateTextInputType(); ProcessPendingMessages(); render_thread_->sink().ClearMessages(); @@ -2136,7 +2138,7 @@ TEST_F(RenderViewImplTest, MessageOrderInDidChangeSelection) { for (size_t i = 0; i < render_thread_->sink().message_count(); ++i) { const uint32 type = render_thread_->sink().GetMessageAt(i)->type(); - if (type == ViewHostMsg_TextInputStateChanged::ID) { + if (type == ViewHostMsg_TextInputTypeChanged::ID) { is_input_type_called = true; last_input_type = i; } else if (type == ViewHostMsg_SelectionChanged::ID) { diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index a214947..3a1eb45 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -1214,7 +1214,7 @@ void RenderViewImpl::PepperFocusChanged(PepperPluginInstanceImpl* instance, else if (focused_pepper_plugin_ == instance) focused_pepper_plugin_ = NULL; - UpdateTextInputState(NO_SHOW_IME, FROM_NON_IME); + UpdateTextInputType(); UpdateSelectionBounds(); } diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index 1034e08..43bac58 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc @@ -1237,7 +1237,10 @@ void RenderWidget::willBeginCompositorFrame() { // The following two can result in further layout and possibly // enable GPU acceleration so they need to be called before any painting // is done. + UpdateTextInputType(); +#if defined(OS_ANDROID) UpdateTextInputState(NO_SHOW_IME, FROM_NON_IME); +#endif UpdateSelectionBounds(); } @@ -1747,6 +1750,43 @@ void RenderWidget::FinishHandlingImeEvent() { #endif } +void RenderWidget::UpdateTextInputType() { + // On Windows, not only an IME but also an on-screen keyboard relies on the + // latest TextInputType to optimize its layout and functionality. Thus + // |input_method_is_active_| is no longer an appropriate condition to suppress + // TextInputTypeChanged IPC on Windows. + // TODO(yukawa, yoichio): Consider to stop checking |input_method_is_active_| + // on other platforms as well as Windows if the overhead is acceptable. +#if !defined(OS_WIN) + if (!input_method_is_active_) + return; +#endif + + ui::TextInputType new_type = GetTextInputType(); + if (IsDateTimeInput(new_type)) + return; // Not considered as a text input field in WebKit/Chromium. + + bool new_can_compose_inline = CanComposeInline(); + + blink::WebTextInputInfo new_info; + if (webwidget_) + new_info = webwidget_->textInputInfo(); + const ui::TextInputMode new_mode = ConvertInputMode(new_info.inputMode); + + if (text_input_type_ != new_type + || can_compose_inline_ != new_can_compose_inline + || text_input_mode_ != new_mode) { + Send(new ViewHostMsg_TextInputTypeChanged(routing_id(), + new_type, + new_mode, + new_can_compose_inline)); + text_input_type_ = new_type; + can_compose_inline_ = new_can_compose_inline; + text_input_mode_ = new_mode; + } +} + +#if defined(OS_ANDROID) || defined(USE_AURA) void RenderWidget::UpdateTextInputState(ShowIme show_ime, ChangeSource change_source) { if (handling_ime_event_) @@ -1760,7 +1800,6 @@ void RenderWidget::UpdateTextInputState(ShowIme show_ime, blink::WebTextInputInfo new_info; if (webwidget_) new_info = webwidget_->textInputInfo(); - const ui::TextInputMode new_mode = ConvertInputMode(new_info.inputMode); bool new_can_compose_inline = CanComposeInline(); @@ -1768,7 +1807,6 @@ void RenderWidget::UpdateTextInputState(ShowIme show_ime, // shown. if (show_ime == SHOW_IME_IF_NEEDED || (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) @@ -1778,7 +1816,6 @@ void RenderWidget::UpdateTextInputState(ShowIme show_ime, ViewHostMsg_TextInputState_Params p; p.type = new_type; p.flags = new_info.flags; - p.mode = new_mode; p.value = new_info.value.utf8(); p.selection_start = new_info.selectionStart; p.selection_end = new_info.selectionEnd; @@ -1796,14 +1833,20 @@ void RenderWidget::UpdateTextInputState(ShowIme show_ime, IncrementOutstandingImeEventAcks(); text_field_is_dirty_ = false; #endif +#if defined(USE_AURA) + Send(new ViewHostMsg_TextInputTypeChanged(routing_id(), + new_type, + text_input_mode_, + new_can_compose_inline)); +#endif Send(new ViewHostMsg_TextInputStateChanged(routing_id(), p)); text_input_info_ = new_info; text_input_type_ = new_type; - text_input_mode_ = new_mode; can_compose_inline_ = new_can_compose_inline; } } +#endif void RenderWidget::GetSelectionBounds(gfx::Rect* focus, gfx::Rect* anchor) { WebRect focus_webrect; diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h index cdb166a..824b245 100644 --- a/content/renderer/render_widget.h +++ b/content/renderer/render_widget.h @@ -261,6 +261,10 @@ class CONTENT_EXPORT RenderWidget void OnSwapBuffersComplete(); void OnSwapBuffersAborted(); + // Checks if the text input state and compose inline mode have been changed. + // If they are changed, the new value will be sent to the browser process. + void UpdateTextInputType(); + // Checks if the selection bounds have been changed. If they are changed, // the new value will be sent to the browser process. void UpdateSelectionBounds(); @@ -269,6 +273,7 @@ class CONTENT_EXPORT RenderWidget void OnShowHostContextMenu(ContextMenuParams* params); +#if defined(OS_ANDROID) || defined(USE_AURA) enum ShowIme { SHOW_IME_IF_NEEDED, NO_SHOW_IME, @@ -286,6 +291,7 @@ class CONTENT_EXPORT RenderWidget // IME events. This is when the text change did not originate from the IME in // the browser side, such as changes by JavaScript or autofill. void UpdateTextInputState(ShowIme show_ime, ChangeSource change_source); +#endif #if defined(OS_MACOSX) || defined(USE_AURA) // Checks if the composition range or composition character bounds have been |