summaryrefslogtreecommitdiffstats
path: root/content/renderer
diff options
context:
space:
mode:
authorShu Chen <shuchen@google.com>2014-10-21 01:18:45 +0800
committerShu Chen <shuchen@google.com>2014-10-20 17:20:56 +0000
commit274aa5b7f0f4e3095a98d64b9ee2e8ed78621c38 (patch)
tree7bfb0e2a075a006a847dc8fe85a5f9f5c4a17a87 /content/renderer
parenteab0388f8dc375b88827814915abfd008481bc83 (diff)
downloadchromium_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.cc12
-rw-r--r--content/renderer/render_frame_impl.cc14
-rw-r--r--content/renderer/render_view_browsertest.cc54
-rw-r--r--content/renderer/render_view_impl.cc2
-rw-r--r--content/renderer/render_widget.cc51
-rw-r--r--content/renderer/render_widget.h6
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, &params);
- 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, &params);
+ 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, &params);
- 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, &params);
- 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