summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-17 07:59:45 +0000
committerkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-17 07:59:45 +0000
commitad26ef4a0c0a170f4a167eea95aed749b791cc95 (patch)
tree74be3a5fc6131021eb8870b2394250eb5b45cf00
parent2c046f04af7805b04463d8b742e55f21029b896a (diff)
downloadchromium_src-ad26ef4a0c0a170f4a167eea95aed749b791cc95.zip
chromium_src-ad26ef4a0c0a170f4a167eea95aed749b791cc95.tar.gz
chromium_src-ad26ef4a0c0a170f4a167eea95aed749b791cc95.tar.bz2
Show composition text on IME panel when Pepper plugin is focused (Linux).
BUG=83684 TEST=1. On Linux Chrome, load some PPAPI plugin (e.g., ppapi/example) 2. Focus the plugin element 3. Turn on IME and type some text 4. Verify composition text is drawn on the IME candidate panel. This is the second step for enabling off-the-spot IME on Pepper on ChromeOS/Linux, continuing from the first step r87215. This patch includes [many places] Add a boolean flag to indicate inline composition is supported or not. (WebKit should also be updated for supporting this kind of information for the final complete version of Pepper IME API, but not in this patch) [chrome/browser/renderer_host/render_widget_host_view_gtk.cc] Control IME context to show composition text on candidate window. (In this patch, only RenderWidgetHostViewGtk, i.e., Linux and ChromeOS is considered. On Windows and Mac, the behavior stays unchanged.) [content/renderer/render_view.cc] Turn the flag off when Pepper is focused. and not yet include - Enhancement of ChromeOS candidate window to have composition text area. - Proper placement of the candidate window. Review URL: http://codereview.chromium.org/7041003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@89451 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/renderer_host/gtk_im_context_wrapper.cc12
-rw-r--r--chrome/browser/renderer_host/gtk_im_context_wrapper.h7
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_gtk.cc5
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_gtk.h3
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_mac.h5
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_mac.mm19
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_views.cc12
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_views.h3
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_win.cc13
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_win.h5
-rw-r--r--content/browser/renderer_host/render_widget_host.cc5
-rw-r--r--content/browser/renderer_host/render_widget_host.h5
-rw-r--r--content/browser/renderer_host/render_widget_host_view.h5
-rw-r--r--content/browser/renderer_host/test_render_view_host.h3
-rw-r--r--content/common/view_messages.h9
-rw-r--r--content/renderer/render_view.cc18
-rw-r--r--content/renderer/render_view.h3
-rw-r--r--content/renderer/render_view_browsertest.cc7
-rw-r--r--content/renderer/render_widget.cc39
-rw-r--r--content/renderer/render_widget.h13
20 files changed, 130 insertions, 61 deletions
diff --git a/chrome/browser/renderer_host/gtk_im_context_wrapper.cc b/chrome/browser/renderer_host/gtk_im_context_wrapper.cc
index fc46a98..4df6eb8 100644
--- a/chrome/browser/renderer_host/gtk_im_context_wrapper.cc
+++ b/chrome/browser/renderer_host/gtk_im_context_wrapper.cc
@@ -225,8 +225,10 @@ void GtkIMContextWrapper::ProcessKeyEvent(GdkEventKey* event) {
last_key_filtered_no_result_ = (filtered && !has_result);
}
-void GtkIMContextWrapper::UpdateInputMethodState(WebKit::WebTextInputType type,
- const gfx::Rect& caret_rect) {
+void GtkIMContextWrapper::UpdateInputMethodState(
+ ui::TextInputType type,
+ bool can_compose_inline,
+ const gfx::Rect& caret_rect) {
suppress_next_commit_ = false;
// The renderer has updated its IME status.
@@ -236,7 +238,7 @@ void GtkIMContextWrapper::UpdateInputMethodState(WebKit::WebTextInputType type,
DCHECK(!is_in_key_event_handler_);
- bool is_enabled = (type == WebKit::WebTextInputTypeText);
+ bool is_enabled = (type == ui::TEXT_INPUT_TYPE_TEXT);
if (is_enabled_ != is_enabled) {
is_enabled_ = is_enabled;
if (is_enabled)
@@ -246,6 +248,10 @@ void GtkIMContextWrapper::UpdateInputMethodState(WebKit::WebTextInputType type,
}
if (is_enabled) {
+ // If the focused element supports inline rendering of composition text,
+ // we receive and send related events to it. Otherwise, the events related
+ // to the updates of composition text are directed to the candidate window.
+ gtk_im_context_set_use_preedit(context_, can_compose_inline);
// Updates the position of the IME candidate window.
// The position sent from the renderer is a relative one, so we need to
// attach the GtkIMContext object to this window before changing the
diff --git a/chrome/browser/renderer_host/gtk_im_context_wrapper.h b/chrome/browser/renderer_host/gtk_im_context_wrapper.h
index f41b7c1..5cafa95 100644
--- a/chrome/browser/renderer_host/gtk_im_context_wrapper.h
+++ b/chrome/browser/renderer_host/gtk_im_context_wrapper.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -14,8 +14,8 @@
#include "base/gtest_prod_util.h"
#include "base/string16.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebTextInputType.h"
#include "ui/base/ime/composition_text.h"
+#include "ui/base/ime/text_input_type.h"
namespace gfx {
class Rect;
@@ -48,7 +48,8 @@ class GtkIMContextWrapper {
// Processes a gdk key event received by |host_view|.
void ProcessKeyEvent(GdkEventKey* event);
- void UpdateInputMethodState(WebKit::WebTextInputType type,
+ void UpdateInputMethodState(ui::TextInputType type,
+ bool can_compose_inline,
const gfx::Rect& caret_rect);
void OnFocusIn();
void OnFocusOut();
diff --git a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc
index 2970a7f..2295ea3 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc
+++ b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc
@@ -726,9 +726,10 @@ void RenderWidgetHostViewGtk::SetIsLoading(bool is_loading) {
}
void RenderWidgetHostViewGtk::ImeUpdateTextInputState(
- WebKit::WebTextInputType type,
+ ui::TextInputType type,
+ bool can_compose_inline,
const gfx::Rect& caret_rect) {
- im_context_->UpdateInputMethodState(type, caret_rect);
+ im_context_->UpdateInputMethodState(type, can_compose_inline, caret_rect);
}
void RenderWidgetHostViewGtk::ImeCancelComposition() {
diff --git a/chrome/browser/renderer_host/render_widget_host_view_gtk.h b/chrome/browser/renderer_host/render_widget_host_view_gtk.h
index 6ea6fc7..b26fc52 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_gtk.h
+++ b/chrome/browser/renderer_host/render_widget_host_view_gtk.h
@@ -73,7 +73,8 @@ class RenderWidgetHostViewGtk : public RenderWidgetHostView,
virtual gfx::Rect GetViewBounds() const OVERRIDE;
virtual void UpdateCursor(const WebCursor& cursor) OVERRIDE;
virtual void SetIsLoading(bool is_loading) OVERRIDE;
- virtual void ImeUpdateTextInputState(WebKit::WebTextInputType type,
+ virtual void ImeUpdateTextInputState(ui::TextInputType type,
+ bool can_compose_inline,
const gfx::Rect& caret_rect) OVERRIDE;
virtual void ImeCancelComposition() OVERRIDE;
virtual void DidUpdateBackingStore(
diff --git a/chrome/browser/renderer_host/render_widget_host_view_mac.h b/chrome/browser/renderer_host/render_widget_host_view_mac.h
index 6658396b..923e401 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_mac.h
+++ b/chrome/browser/renderer_host/render_widget_host_view_mac.h
@@ -192,7 +192,8 @@ class RenderWidgetHostViewMac : public RenderWidgetHostView {
virtual gfx::Rect GetViewBounds() const OVERRIDE;
virtual void UpdateCursor(const WebCursor& cursor) OVERRIDE;
virtual void SetIsLoading(bool is_loading) OVERRIDE;
- virtual void ImeUpdateTextInputState(WebKit::WebTextInputType state,
+ virtual void ImeUpdateTextInputState(ui::TextInputType state,
+ bool can_compose_inline,
const gfx::Rect& caret_rect) OVERRIDE;
virtual void ImeCancelComposition() OVERRIDE;
virtual void ImeCompositionRangeChanged(const ui::Range& range) OVERRIDE;
@@ -331,7 +332,7 @@ class RenderWidgetHostViewMac : public RenderWidgetHostView {
base::TimeTicks tab_switch_paint_time_;
// Current text input type.
- WebKit::WebTextInputType text_input_type_;
+ ui::TextInputType text_input_type_;
typedef std::map<gfx::PluginWindowHandle, AcceleratedPluginView*>
PluginViewMap;
diff --git a/chrome/browser/renderer_host/render_widget_host_view_mac.mm b/chrome/browser/renderer_host/render_widget_host_view_mac.mm
index 498a8e3..83aec9e 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/chrome/browser/renderer_host/render_widget_host_view_mac.mm
@@ -233,7 +233,7 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget)
: render_widget_host_(widget),
about_to_validate_and_paint_(false),
call_set_needs_display_in_rect_pending_(false),
- text_input_type_(WebKit::WebTextInputTypeNone),
+ text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
spellcheck_enabled_(false),
spellcheck_checked_(false),
is_loading_(false),
@@ -498,8 +498,13 @@ void RenderWidgetHostViewMac::SetIsLoading(bool is_loading) {
}
void RenderWidgetHostViewMac::ImeUpdateTextInputState(
- WebKit::WebTextInputType type,
+ ui::TextInputType type,
+ bool can_compose_inline,
const gfx::Rect& caret_rect) {
+ // TODO(kinaba): currently, can_compose_inline is ignored and always treated
+ // as true. We need to support "can_compose_inline=false" for PPAPI plugins
+ // that may want to avoid drawing composition-text by themselves and pass
+ // the responsibility to the browser.
if (text_input_type_ != type) {
text_input_type_ = type;
if (HasFocus()) {
@@ -1037,12 +1042,12 @@ void RenderWidgetHostViewMac::OnAccessibilityNotifications(
void RenderWidgetHostViewMac::SetTextInputActive(bool active) {
if (active) {
- if (text_input_type_ == WebKit::WebTextInputTypePassword)
+ if (text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD)
EnablePasswordInput();
else
DisablePasswordInput();
} else {
- if (text_input_type_ == WebKit::WebTextInputTypePassword)
+ if (text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD)
DisablePasswordInput();
}
}
@@ -2246,8 +2251,8 @@ extern NSString *NSTextInputReplacementRangeAttributeName;
return [[ComplexTextInputPanel sharedComplexTextInputPanel] inputContext];
switch(renderWidgetHostView_->text_input_type_) {
- case WebKit::WebTextInputTypeNone:
- case WebKit::WebTextInputTypePassword:
+ case ui::TEXT_INPUT_TYPE_NONE:
+ case ui::TEXT_INPUT_TYPE_PASSWORD:
return nil;
default:
return [super inputContext];
@@ -2538,7 +2543,7 @@ extern NSString *NSTextInputReplacementRangeAttributeName;
BOOL returnTypeIsString = [returnType isEqual:NSStringPboardType];
BOOL hasText = !renderWidgetHostView_->selected_text().empty();
BOOL takesText =
- renderWidgetHostView_->text_input_type_ != WebKit::WebTextInputTypeNone;
+ renderWidgetHostView_->text_input_type_ != ui::TEXT_INPUT_TYPE_NONE;
if (sendTypeIsString && hasText && !returnType) {
requestor = self;
diff --git a/chrome/browser/renderer_host/render_widget_host_view_views.cc b/chrome/browser/renderer_host/render_widget_host_view_views.cc
index 5271c69..5e3adb6 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_views.cc
+++ b/chrome/browser/renderer_host/render_widget_host_view_views.cc
@@ -296,12 +296,16 @@ void RenderWidgetHostViewViews::SetIsLoading(bool is_loading) {
}
void RenderWidgetHostViewViews::ImeUpdateTextInputState(
- WebKit::WebTextInputType type,
+ ui::TextInputType type,
+ bool can_compose_inline,
const gfx::Rect& caret_rect) {
+ // TODO(kinaba): currently, can_compose_inline is ignored and always treated
+ // as true. We need to support "can_compose_inline=false" for PPAPI plugins
+ // that may want to avoid drawing composition-text by themselves and pass
+ // the responsibility to the browser.
DCHECK(GetInputMethod());
- ui::TextInputType new_type = static_cast<ui::TextInputType>(type);
- if (text_input_type_ != new_type) {
- text_input_type_ = new_type;
+ if (text_input_type_ != type) {
+ text_input_type_ = type;
GetInputMethod()->OnTextInputTypeChanged(this);
}
if (caret_bounds_ != caret_rect) {
diff --git a/chrome/browser/renderer_host/render_widget_host_view_views.h b/chrome/browser/renderer_host/render_widget_host_view_views.h
index 1811d6d..78957ec 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_views.h
+++ b/chrome/browser/renderer_host/render_widget_host_view_views.h
@@ -63,7 +63,8 @@ class RenderWidgetHostViewViews : public RenderWidgetHostView,
virtual gfx::Rect GetViewBounds() const OVERRIDE;
virtual void UpdateCursor(const WebCursor& cursor) OVERRIDE;
virtual void SetIsLoading(bool is_loading) OVERRIDE;
- virtual void ImeUpdateTextInputState(WebKit::WebTextInputType type,
+ virtual void ImeUpdateTextInputState(ui::TextInputType type,
+ bool can_compose_inline,
const gfx::Rect& caret_rect) OVERRIDE;
virtual void ImeCancelComposition() OVERRIDE;
virtual void DidUpdateBackingStore(
diff --git a/chrome/browser/renderer_host/render_widget_host_view_win.cc b/chrome/browser/renderer_host/render_widget_host_view_win.cc
index 03e2b9e..1ff06f4 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_win.cc
+++ b/chrome/browser/renderer_host/render_widget_host_view_win.cc
@@ -237,7 +237,7 @@ RenderWidgetHostViewWin::RenderWidgetHostViewWin(RenderWidgetHost* widget)
parent_hwnd_(NULL),
is_loading_(false),
overlay_color_(0),
- text_input_type_(WebKit::WebTextInputTypeNone) {
+ text_input_type_(ui::TEXT_INPUT_TYPE_NONE) {
render_widget_host_->set_view(this);
registrar_.Add(this,
NotificationType::RENDERER_PROCESS_TERMINATED,
@@ -578,18 +578,23 @@ void RenderWidgetHostViewWin::SetIsLoading(bool is_loading) {
}
void RenderWidgetHostViewWin::ImeUpdateTextInputState(
- WebKit::WebTextInputType type,
+ ui::TextInputType type,
+ bool can_compose_inline,
const gfx::Rect& caret_rect) {
+ // TODO(kinaba): currently, can_compose_inline is ignored and always treated
+ // as true. We need to support "can_compose_inline=false" for PPAPI plugins
+ // that may want to avoid drawing composition-text by themselves and pass
+ // the responsibility to the browser.
if (text_input_type_ != type) {
text_input_type_ = type;
- if (type == WebKit::WebTextInputTypeText)
+ if (type == ui::TEXT_INPUT_TYPE_TEXT)
ime_input_.EnableIME(m_hWnd);
else
ime_input_.DisableIME(m_hWnd);
}
// Only update caret position if the input method is enabled.
- if (type == WebKit::WebTextInputTypeText)
+ if (type == ui::TEXT_INPUT_TYPE_TEXT)
ime_input_.UpdateCaretRect(m_hWnd, caret_rect);
}
diff --git a/chrome/browser/renderer_host/render_widget_host_view_win.h b/chrome/browser/renderer_host/render_widget_host_view_win.h
index 42b76d7..b72d853 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_win.h
+++ b/chrome/browser/renderer_host/render_widget_host_view_win.h
@@ -148,7 +148,8 @@ class RenderWidgetHostViewWin
virtual gfx::Rect GetViewBounds() const OVERRIDE;
virtual void UpdateCursor(const WebCursor& cursor) OVERRIDE;
virtual void SetIsLoading(bool is_loading) OVERRIDE;
- virtual void ImeUpdateTextInputState(WebKit::WebTextInputType type,
+ virtual void ImeUpdateTextInputState(ui::TextInputType type,
+ bool can_compose_inline,
const gfx::Rect& caret_rect) OVERRIDE;
virtual void ImeCancelComposition() OVERRIDE;
virtual void DidUpdateBackingStore(
@@ -362,7 +363,7 @@ class RenderWidgetHostViewWin
// Stores the current text input type received by ImeUpdateTextInputState()
// method.
- WebKit::WebTextInputType text_input_type_;
+ ui::TextInputType text_input_type_;
ScopedVector<ui::ViewProp> props_;
diff --git a/content/browser/renderer_host/render_widget_host.cc b/content/browser/renderer_host/render_widget_host.cc
index f916ba1..1f98484 100644
--- a/content/browser/renderer_host/render_widget_host.cc
+++ b/content/browser/renderer_host/render_widget_host.cc
@@ -1048,10 +1048,11 @@ void RenderWidgetHost::OnMsgSetCursor(const WebCursor& cursor) {
}
void RenderWidgetHost::OnMsgImeUpdateTextInputState(
- WebKit::WebTextInputType type,
+ ui::TextInputType type,
+ bool can_compose_inline,
const gfx::Rect& caret_rect) {
if (view_)
- view_->ImeUpdateTextInputState(type, caret_rect);
+ view_->ImeUpdateTextInputState(type, can_compose_inline, caret_rect);
}
void RenderWidgetHost::OnMsgImeCompositionRangeChanged(const ui::Range& range) {
diff --git a/content/browser/renderer_host/render_widget_host.h b/content/browser/renderer_host/render_widget_host.h
index 70e67f24..80f1bc4b 100644
--- a/content/browser/renderer_host/render_widget_host.h
+++ b/content/browser/renderer_host/render_widget_host.h
@@ -20,7 +20,7 @@
#include "ipc/ipc_channel.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebTextDirection.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebTextInputType.h"
+#include "ui/base/ime/text_input_type.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/size.h"
@@ -453,7 +453,8 @@ class RenderWidgetHost : public IPC::Channel::Listener,
virtual void OnMsgBlur();
void OnMsgSetCursor(const WebCursor& cursor);
- void OnMsgImeUpdateTextInputState(WebKit::WebTextInputType type,
+ void OnMsgImeUpdateTextInputState(ui::TextInputType type,
+ bool can_compose_inline,
const gfx::Rect& caret_rect);
void OnMsgImeCompositionRangeChanged(const ui::Range& range);
void OnMsgImeCancelComposition();
diff --git a/content/browser/renderer_host/render_widget_host_view.h b/content/browser/renderer_host/render_widget_host_view.h
index f443d1c..9f6191a 100644
--- a/content/browser/renderer_host/render_widget_host_view.h
+++ b/content/browser/renderer_host/render_widget_host_view.h
@@ -17,7 +17,7 @@
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPopupType.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebTextInputType.h"
+#include "ui/base/ime/text_input_type.h"
#include "ui/base/range/range.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/rect.h"
@@ -134,7 +134,8 @@ class RenderWidgetHostView {
virtual void SetIsLoading(bool is_loading) = 0;
// Updates the state of the input method attached to the view.
- virtual void ImeUpdateTextInputState(WebKit::WebTextInputType type,
+ virtual void ImeUpdateTextInputState(ui::TextInputType type,
+ bool can_compose_inline,
const gfx::Rect& caret_rect) = 0;
// Cancel the ongoing composition of the input method attached to the view.
diff --git a/content/browser/renderer_host/test_render_view_host.h b/content/browser/renderer_host/test_render_view_host.h
index 4bcde5c..dddd005 100644
--- a/content/browser/renderer_host/test_render_view_host.h
+++ b/content/browser/renderer_host/test_render_view_host.h
@@ -78,7 +78,8 @@ class TestRenderWidgetHostView : public RenderWidgetHostView {
virtual void SetIsLoading(bool is_loading) {}
virtual void UpdateCursor(const WebCursor& cursor) {}
virtual void UpdateCursorIfOverSelf() {}
- virtual void ImeUpdateTextInputState(WebKit::WebTextInputType state,
+ virtual void ImeUpdateTextInputState(ui::TextInputType state,
+ bool can_compose_inline,
const gfx::Rect& caret_rect) {}
virtual void ImeCancelComposition() {}
virtual void DidUpdateBackingStore(
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 6582c89..57d7bd2 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -24,7 +24,7 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerAction.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPopupType.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebTextInputType.h"
+#include "ui/base/ime/text_input_type.h"
#include "ui/base/range/range.h"
#include "ui/gfx/rect.h"
#include "webkit/glue/context_menu.h"
@@ -164,7 +164,7 @@ IPC_ENUM_TRAITS(ViewMsg_StopFinding_Params::Action)
IPC_ENUM_TRAITS(WebKit::WebContextMenuData::MediaType)
IPC_ENUM_TRAITS(WebKit::WebMediaPlayerAction::Type)
IPC_ENUM_TRAITS(WebKit::WebPopupType)
-IPC_ENUM_TRAITS(WebKit::WebTextInputType)
+IPC_ENUM_TRAITS(ui::TextInputType)
IPC_ENUM_TRAITS(WebMenuItem::Type)
IPC_ENUM_TRAITS(WindowContainerType)
IPC_ENUM_TRAITS(webkit_glue::WebAccessibility::Role)
@@ -1696,8 +1696,9 @@ IPC_SYNC_MESSAGE_ROUTED1_1(ViewHostMsg_GetRootWindowRect,
gfx::Rect /* Out: Window location */)
// Required for updating text input state.
-IPC_MESSAGE_ROUTED2(ViewHostMsg_ImeUpdateTextInputState,
- WebKit::WebTextInputType, /* text_input_type */
+IPC_MESSAGE_ROUTED3(ViewHostMsg_ImeUpdateTextInputState,
+ ui::TextInputType, /* text_input_type */
+ bool, /* can_compose_inline */
gfx::Rect /* caret_rect */)
diff --git a/content/renderer/render_view.cc b/content/renderer/render_view.cc
index fc83a1d..f164c06 100644
--- a/content/renderer/render_view.cc
+++ b/content/renderer/render_view.cc
@@ -3980,14 +3980,24 @@ void RenderView::OnImeConfirmComposition(const string16& text) {
}
}
-WebKit::WebTextInputType RenderView::GetTextInputType() {
+ui::TextInputType RenderView::GetTextInputType() {
if (pepper_delegate_.IsPluginFocused()) {
// TODO(kinaba) Until PPAPI has an interface for handling IME events, we
// consider all the parts of PPAPI plugins are accepting text inputs.
- return WebKit::WebTextInputTypeText;
- } else {
- return RenderWidget::GetTextInputType();
+ return ui::TEXT_INPUT_TYPE_TEXT;
}
+ return RenderWidget::GetTextInputType();
+}
+
+bool RenderView::CanComposeInline() {
+ if (pepper_delegate_.IsPluginFocused()) {
+ // TODO(kinaba) Until PPAPI has an interface for handling IME events, there
+ // is no way for the browser to know whether the plugin is capable of
+ // drawing composition text. We assume plugins are incapable and let the
+ // browser handle composition display for now.
+ return false;
+ }
+ return true;
}
#if defined(OS_MACOSX)
diff --git a/content/renderer/render_view.h b/content/renderer/render_view.h
index a5cee65..8d3d9c6 100644
--- a/content/renderer/render_view.h
+++ b/content/renderer/render_view.h
@@ -617,7 +617,8 @@ class RenderView : public RenderWidget,
int selection_start,
int selection_end) OVERRIDE;
virtual void OnImeConfirmComposition(const string16& text) OVERRIDE;
- virtual WebKit::WebTextInputType GetTextInputType() OVERRIDE;
+ virtual ui::TextInputType GetTextInputType() OVERRIDE;
+ virtual bool CanComposeInline() OVERRIDE;
private:
// For unit tests.
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc
index d06251e..6e0d5b0 100644
--- a/content/renderer/render_view_browsertest.cc
+++ b/content/renderer/render_view_browsertest.cc
@@ -169,8 +169,9 @@ TEST_F(RenderViewTest, OnImeStateChanged) {
EXPECT_EQ(ViewHostMsg_ImeUpdateTextInputState::ID, msg->type());
ViewHostMsg_ImeUpdateTextInputState::Param params;
ViewHostMsg_ImeUpdateTextInputState::Read(msg, &params);
- EXPECT_EQ(params.a, WebKit::WebTextInputTypeText);
- EXPECT_TRUE(params.b.x() > 0 && params.b.y() > 0);
+ EXPECT_EQ(params.a, ui::TEXT_INPUT_TYPE_TEXT);
+ EXPECT_EQ(params.b, true);
+ EXPECT_TRUE(params.c.x() > 0 && params.c.y() > 0);
// Move the input focus to the second <input> element, where we should
// de-activate IMEs.
@@ -185,7 +186,7 @@ TEST_F(RenderViewTest, OnImeStateChanged) {
EXPECT_TRUE(msg != NULL);
EXPECT_EQ(ViewHostMsg_ImeUpdateTextInputState::ID, msg->type());
ViewHostMsg_ImeUpdateTextInputState::Read(msg, &params);
- EXPECT_EQ(params.a, WebKit::WebTextInputTypePassword);
+ EXPECT_EQ(params.a, ui::TEXT_INPUT_TYPE_PASSWORD);
}
}
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index c2d36f2..c2102dc 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -58,7 +58,6 @@ using WebKit::WebRect;
using WebKit::WebScreenInfo;
using WebKit::WebSize;
using WebKit::WebTextDirection;
-using WebKit::WebTextInputType;
using WebKit::WebVector;
using WebKit::WebWidget;
@@ -83,7 +82,8 @@ RenderWidget::RenderWidget(RenderThreadBase* render_thread,
closing_(false),
is_swapped_out_(false),
input_method_is_active_(false),
- text_input_type_(WebKit::WebTextInputTypeNone),
+ text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
+ can_compose_inline_(true),
popup_type_(popup_type),
pending_window_rect_count_(0),
suppress_next_char_events_(false),
@@ -1283,7 +1283,8 @@ void RenderWidget::UpdateInputMethod() {
if (!input_method_is_active_)
return;
- WebTextInputType new_type = GetTextInputType();
+ ui::TextInputType new_type = GetTextInputType();
+ bool new_can_compose_inline = CanComposeInline();
WebRect new_caret_bounds;
if (webwidget_)
@@ -1291,18 +1292,36 @@ void RenderWidget::UpdateInputMethod() {
// Only sends text input type and caret bounds to the browser process if they
// are changed.
- if (text_input_type_ != new_type || caret_bounds_ != new_caret_bounds) {
+ if (text_input_type_ != new_type || caret_bounds_ != new_caret_bounds ||
+ can_compose_inline_ != new_can_compose_inline) {
text_input_type_ = new_type;
+ can_compose_inline_ = new_can_compose_inline;
caret_bounds_ = new_caret_bounds;
Send(new ViewHostMsg_ImeUpdateTextInputState(
- routing_id(), new_type, new_caret_bounds));
+ routing_id(), new_type, new_can_compose_inline, new_caret_bounds));
}
}
-WebKit::WebTextInputType RenderWidget::GetTextInputType() {
- if (webwidget_)
- return webwidget_->textInputType();
- return WebKit::WebTextInputTypeNone;
+COMPILE_ASSERT(int(WebKit::WebTextInputTypeNone) == \
+ int(ui::TEXT_INPUT_TYPE_NONE), mismatching_enums);
+COMPILE_ASSERT(int(WebKit::WebTextInputTypeText) == \
+ int(ui::TEXT_INPUT_TYPE_TEXT), mismatching_enums);
+COMPILE_ASSERT(int(WebKit::WebTextInputTypePassword) == \
+ int(ui::TEXT_INPUT_TYPE_PASSWORD), mismatching_enums);
+
+ui::TextInputType RenderWidget::GetTextInputType() {
+ if (webwidget_) {
+ int type = webwidget_->textInputType();
+ // Check the type is in the range representable by ui::TextInputType.
+ DCHECK(type <= ui::TEXT_INPUT_TYPE_PASSWORD) <<
+ "WebKit::WebTextInputType and ui::TextInputType not synchronized";
+ return static_cast<ui::TextInputType>(type);
+ }
+ return ui::TEXT_INPUT_TYPE_NONE;
+}
+
+bool RenderWidget::CanComposeInline() {
+ return true;
}
WebScreenInfo RenderWidget::screenInfo() {
@@ -1317,7 +1336,7 @@ void RenderWidget::resetInputMethod() {
// If the last text input type is not None, then we should finish any
// ongoing composition regardless of the new text input type.
- if (text_input_type_ != WebKit::WebTextInputTypeNone) {
+ if (text_input_type_ != ui::TEXT_INPUT_TYPE_NONE) {
// If a composition text exists, then we need to let the browser process
// to cancel the input method's ongoing composition session.
if (webwidget_->confirmComposition())
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h
index d48c336..fde8220 100644
--- a/content/renderer/render_widget.h
+++ b/content/renderer/render_widget.h
@@ -18,9 +18,9 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPopupType.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebTextDirection.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebTextInputType.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebWidgetClient.h"
#include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/base/ime/text_input_type.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/size.h"
@@ -278,7 +278,11 @@ class RenderWidget : public IPC::Channel::Listener,
// Override point to obtain that the current input method state and caret
// position.
- virtual WebKit::WebTextInputType GetTextInputType();
+ virtual ui::TextInputType GetTextInputType();
+
+ // Override point to obtain that the current input method state about
+ // composition text.
+ virtual bool CanComposeInline();
// Tells the renderer it does not have focus. Used to prevent us from getting
// the focus on our own when the browser did not focus us.
@@ -397,7 +401,10 @@ class RenderWidget : public IPC::Channel::Listener,
bool input_method_is_active_;
// Stores the current text input type of |webwidget_|.
- WebKit::WebTextInputType text_input_type_;
+ ui::TextInputType text_input_type_;
+
+ // Stores the current type of composition text rendering of |webwidget_|.
+ bool can_compose_inline_;
// Stores the current caret bounds of input focus.
WebKit::WebRect caret_bounds_;