summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryoichio@chromium.org <yoichio@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-27 06:00:44 +0000
committeryoichio@chromium.org <yoichio@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-27 06:00:44 +0000
commit11a5eceb9bc0ac7b7615244db0c25939f5c63f51 (patch)
treea4a9f3033eaca2e0b84d3421fa8927074ca5df27
parentb48db42e1909c1229017c7e4141f0c839e2d8d0d (diff)
downloadchromium_src-11a5eceb9bc0ac7b7615244db0c25939f5c63f51.zip
chromium_src-11a5eceb9bc0ac7b7615244db0c25939f5c63f51.tar.gz
chromium_src-11a5eceb9bc0ac7b7615244db0c25939f5c63f51.tar.bz2
Set focused TextInputMode to InputMethodEndingeIBus.
This doesn't change actual behavior. BUG=244688 Review URL: https://codereview.chromium.org/73673002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@237527 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/input_method/input_method_engine_ibus.cc11
-rw-r--r--chrome/browser/chromeos/input_method/input_method_engine_ibus.h3
-rw-r--r--chrome/browser/chromeos/input_method/input_method_engine_ibus_browserttests.cc34
-rw-r--r--ui/base/ime/chromeos/ibus_bridge.h20
-rw-r--r--ui/base/ime/chromeos/mock_ime_engine_handler.cc7
-rw-r--r--ui/base/ime/chromeos/mock_ime_engine_handler.h8
-rw-r--r--ui/base/ime/input_method_ibus.cc17
-rw-r--r--ui/base/ime/input_method_ibus_unittest.cc25
8 files changed, 89 insertions, 36 deletions
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc b/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc
index 1c7d121..dd7cc43 100644
--- a/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc
+++ b/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc
@@ -393,16 +393,17 @@ bool InputMethodEngineIBus::DeleteSurroundingText(int context_id,
return true;
}
-void InputMethodEngineIBus::FocusIn(ui::TextInputType text_input_type) {
+void InputMethodEngineIBus::FocusIn(
+ const IBusEngineHandlerInterface::InputContext& input_context) {
focused_ = true;
if (!active_)
return;
context_id_ = next_context_id_;
++next_context_id_;
- InputContext context;
+ InputMethodEngine ::InputContext context;
context.id = context_id_;
- switch (text_input_type) {
+ switch (input_context.type) {
case ui::TEXT_INPUT_TYPE_SEARCH:
context.type = "search";
break;
@@ -438,7 +439,9 @@ void InputMethodEngineIBus::FocusOut() {
void InputMethodEngineIBus::Enable() {
active_ = true;
observer_->OnActivate(engine_id_);
- FocusIn(ui::TEXT_INPUT_TYPE_TEXT);
+ IBusEngineHandlerInterface::InputContext context(ui::TEXT_INPUT_TYPE_TEXT,
+ ui::TEXT_INPUT_MODE_DEFAULT);
+ FocusIn(context);
}
void InputMethodEngineIBus::Disable() {
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_ibus.h b/chrome/browser/chromeos/input_method/input_method_engine_ibus.h
index 8b3cc41..0871c54 100644
--- a/chrome/browser/chromeos/input_method/input_method_engine_ibus.h
+++ b/chrome/browser/chromeos/input_method/input_method_engine_ibus.h
@@ -77,7 +77,8 @@ class InputMethodEngineIBus : public InputMethodEngine,
std::string* error) OVERRIDE;
// IBusEngineHandlerInterface overrides.
- virtual void FocusIn(ui::TextInputType text_input_type) OVERRIDE;
+ virtual void FocusIn(
+ const IBusEngineHandlerInterface::InputContext& input_context) OVERRIDE;
virtual void FocusOut() OVERRIDE;
virtual void Enable() OVERRIDE;
virtual void Disable() OVERRIDE;
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_ibus_browserttests.cc b/chrome/browser/chromeos/input_method/input_method_engine_ibus_browserttests.cc
index 94d1082..c8e5c29 100644
--- a/chrome/browser/chromeos/input_method/input_method_engine_ibus_browserttests.cc
+++ b/chrome/browser/chromeos/input_method/input_method_engine_ibus_browserttests.cc
@@ -176,8 +176,10 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineIBusBrowserTest,
ASSERT_TRUE(activated_listener.was_satisfied());
// onFocus event should be fired if FocusIn function is called.
- ExtensionTestMessageListener focus_listener("onFocus:text", false);;
- engine_handler->FocusIn(ui::TEXT_INPUT_TYPE_TEXT);
+ ExtensionTestMessageListener focus_listener("onFocus:text", false);
+ IBusEngineHandlerInterface::InputContext context(ui::TEXT_INPUT_TYPE_TEXT,
+ ui::TEXT_INPUT_MODE_DEFAULT);
+ engine_handler->FocusIn(context);
ASSERT_TRUE(focus_listener.WaitUntilSatisfied());
ASSERT_TRUE(focus_listener.was_satisfied());
@@ -254,7 +256,9 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineIBusBrowserTest,
1);
engine_handler->Enable();
- engine_handler->FocusIn(ui::TEXT_INPUT_TYPE_TEXT);
+ IBusEngineHandlerInterface::InputContext context(ui::TEXT_INPUT_TYPE_TEXT,
+ ui::TEXT_INPUT_MODE_DEFAULT);
+ engine_handler->FocusIn(context);
{
SCOPED_TRACE("KeyDown, Ctrl:No, alt:No, Shift:No, Caps:No");
@@ -778,37 +782,49 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineIBusBrowserTest,
{
ExtensionTestMessageListener focus_listener("onFocus:text", false);
- engine_handler->FocusIn(ui::TEXT_INPUT_TYPE_TEXT);
+ IBusEngineHandlerInterface::InputContext context(
+ ui::TEXT_INPUT_TYPE_TEXT, ui::TEXT_INPUT_MODE_DEFAULT);
+ engine_handler->FocusIn(context);
ASSERT_TRUE(focus_listener.WaitUntilSatisfied());
ASSERT_TRUE(focus_listener.was_satisfied());
}
{
ExtensionTestMessageListener focus_listener("onFocus:search", false);
- engine_handler->FocusIn(ui::TEXT_INPUT_TYPE_SEARCH);
+ IBusEngineHandlerInterface::InputContext context(
+ ui::TEXT_INPUT_TYPE_SEARCH, ui::TEXT_INPUT_MODE_DEFAULT);
+ engine_handler->FocusIn(context);
ASSERT_TRUE(focus_listener.WaitUntilSatisfied());
ASSERT_TRUE(focus_listener.was_satisfied());
}
{
ExtensionTestMessageListener focus_listener("onFocus:tel", false);
- engine_handler->FocusIn(ui::TEXT_INPUT_TYPE_TELEPHONE);
+ IBusEngineHandlerInterface::InputContext context(
+ ui::TEXT_INPUT_TYPE_TELEPHONE, ui::TEXT_INPUT_MODE_DEFAULT);
+ engine_handler->FocusIn(context);
ASSERT_TRUE(focus_listener.WaitUntilSatisfied());
ASSERT_TRUE(focus_listener.was_satisfied());
}
{
ExtensionTestMessageListener focus_listener("onFocus:url", false);
- engine_handler->FocusIn(ui::TEXT_INPUT_TYPE_URL);
+ IBusEngineHandlerInterface::InputContext context(
+ ui::TEXT_INPUT_TYPE_URL, ui::TEXT_INPUT_MODE_DEFAULT);
+ engine_handler->FocusIn(context);
ASSERT_TRUE(focus_listener.WaitUntilSatisfied());
ASSERT_TRUE(focus_listener.was_satisfied());
}
{
ExtensionTestMessageListener focus_listener("onFocus:email", false);
- engine_handler->FocusIn(ui::TEXT_INPUT_TYPE_EMAIL);
+ IBusEngineHandlerInterface::InputContext context(
+ ui::TEXT_INPUT_TYPE_EMAIL, ui::TEXT_INPUT_MODE_DEFAULT);
+ engine_handler->FocusIn(context);
ASSERT_TRUE(focus_listener.WaitUntilSatisfied());
ASSERT_TRUE(focus_listener.was_satisfied());
}
{
ExtensionTestMessageListener focus_listener("onFocus:number", false);
- engine_handler->FocusIn(ui::TEXT_INPUT_TYPE_NUMBER);
+ IBusEngineHandlerInterface::InputContext context(
+ ui::TEXT_INPUT_TYPE_NUMBER, ui::TEXT_INPUT_MODE_DEFAULT);
+ engine_handler->FocusIn(context);
ASSERT_TRUE(focus_listener.WaitUntilSatisfied());
ASSERT_TRUE(focus_listener.was_satisfied());
}
diff --git a/ui/base/ime/chromeos/ibus_bridge.h b/ui/base/ime/chromeos/ibus_bridge.h
index be0ed80..5af7ea4 100644
--- a/ui/base/ime/chromeos/ibus_bridge.h
+++ b/ui/base/ime/chromeos/ibus_bridge.h
@@ -9,6 +9,7 @@
#include <string>
#include "base/basictypes.h"
#include "base/callback.h"
+#include "ui/base/ime/text_input_mode.h"
#include "ui/base/ime/text_input_type.h"
#include "ui/base/ui_export.h"
@@ -53,10 +54,27 @@ class UI_EXPORT IBusEngineHandlerInterface {
public:
typedef base::Callback<void (bool consumed)> KeyEventDoneCallback;
+ // A information about a focused text input field.
+ // A type of each member is based on the html spec, but InputContext can be
+ // used to specify about a non html text field like Omnibox.
+ struct InputContext {
+ InputContext(ui::TextInputType type_, ui::TextInputMode mode_) :
+ type(type_), mode(mode_) {}
+
+ // An attribute of the field defined at
+ // http://www.w3.org/TR/html401/interact/forms.html#input-control-types.
+ ui::TextInputType type;
+ // An attribute of the field defined at
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/
+ // association-of-controls-and-forms.html#input-modalities
+ // :-the-inputmode-attribute.
+ ui::TextInputMode mode;
+ };
+
virtual ~IBusEngineHandlerInterface() {}
// Called when the Chrome input field get the focus.
- virtual void FocusIn(ui::TextInputType text_input_type) = 0;
+ virtual void FocusIn(const InputContext& input_context) = 0;
// Called when the Chrome input field lose the focus.
virtual void FocusOut() = 0;
diff --git a/ui/base/ime/chromeos/mock_ime_engine_handler.cc b/ui/base/ime/chromeos/mock_ime_engine_handler.cc
index 430f750..d7e664f 100644
--- a/ui/base/ime/chromeos/mock_ime_engine_handler.cc
+++ b/ui/base/ime/chromeos/mock_ime_engine_handler.cc
@@ -12,7 +12,8 @@ MockIMEEngineHandler::MockIMEEngineHandler()
set_surrounding_text_call_count_(0),
process_key_event_call_count_(0),
reset_call_count_(0),
- last_text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
+ last_text_input_context_(ui::TEXT_INPUT_TYPE_NONE,
+ ui::TEXT_INPUT_MODE_DEFAULT),
last_set_surrounding_cursor_pos_(0),
last_set_surrounding_anchor_pos_(0),
last_processed_keysym_(0),
@@ -23,9 +24,9 @@ MockIMEEngineHandler::MockIMEEngineHandler()
MockIMEEngineHandler::~MockIMEEngineHandler() {
}
-void MockIMEEngineHandler::FocusIn(ui::TextInputType text_input_type) {
+void MockIMEEngineHandler::FocusIn(const InputContext& input_context) {
++focus_in_call_count_;
- last_text_input_type_ = text_input_type;
+ last_text_input_context_ = input_context;
}
void MockIMEEngineHandler::FocusOut() {
diff --git a/ui/base/ime/chromeos/mock_ime_engine_handler.h b/ui/base/ime/chromeos/mock_ime_engine_handler.h
index ddff40c..56fc259 100644
--- a/ui/base/ime/chromeos/mock_ime_engine_handler.h
+++ b/ui/base/ime/chromeos/mock_ime_engine_handler.h
@@ -15,7 +15,7 @@ class UI_EXPORT MockIMEEngineHandler : public IBusEngineHandlerInterface {
MockIMEEngineHandler();
virtual ~MockIMEEngineHandler();
- virtual void FocusIn(ui::TextInputType text_input_type) OVERRIDE;
+ virtual void FocusIn(const InputContext& input_context) OVERRIDE;
virtual void FocusOut() OVERRIDE;
virtual void Enable() OVERRIDE;
virtual void Disable() OVERRIDE;
@@ -38,8 +38,8 @@ class UI_EXPORT MockIMEEngineHandler : public IBusEngineHandlerInterface {
return process_key_event_call_count_;
}
- ui::TextInputType last_text_input_type() const {
- return last_text_input_type_;
+ const InputContext& last_text_input_context() const {
+ return last_text_input_context_;
}
std::string last_activated_property() const {
@@ -80,7 +80,7 @@ class UI_EXPORT MockIMEEngineHandler : public IBusEngineHandlerInterface {
int set_surrounding_text_call_count_;
int process_key_event_call_count_;
int reset_call_count_;
- ui::TextInputType last_text_input_type_;
+ InputContext last_text_input_context_;
std::string last_activated_property_;
std::string last_set_surrounding_text_;
uint32 last_set_surrounding_cursor_pos_;
diff --git a/ui/base/ime/input_method_ibus.cc b/ui/base/ime/input_method_ibus.cc
index d7c4b62..ac503a9 100644
--- a/ui/base/ime/input_method_ibus.cc
+++ b/ui/base/ime/input_method_ibus.cc
@@ -406,16 +406,17 @@ void InputMethodIBus::UpdateContextFocusState() {
return;
// We only focus in |context_| when the focus is in a normal textfield.
+ // Even if focus is not changed, a text input type change causes a focus
+ // blink.
// ibus_input_context_focus_{in|out}() run asynchronously.
- if (old_context_focused && !context_focused_) {
+ bool input_type_change =
+ (current_text_input_type != previous_textinput_type_);
+ if (old_context_focused && (!context_focused_ || input_type_change))
GetEngine()->FocusOut();
- } else if (!old_context_focused && context_focused_) {
- GetEngine()->FocusIn(current_text_input_type);
- OnCaretBoundsChanged(GetTextInputClient());
- } else if (context_focused_ &&
- current_text_input_type != previous_textinput_type_) {
- GetEngine()->FocusOut();
- GetEngine()->FocusIn(current_text_input_type);
+ if (context_focused_ && (!old_context_focused || input_type_change)) {
+ chromeos::IBusEngineHandlerInterface::InputContext context(
+ current_text_input_type, GetTextInputMode());
+ GetEngine()->FocusIn(context);
OnCaretBoundsChanged(GetTextInputClient());
}
}
diff --git a/ui/base/ime/input_method_ibus_unittest.cc b/ui/base/ime/input_method_ibus_unittest.cc
index 9750e66..44c0594 100644
--- a/ui/base/ime/input_method_ibus_unittest.cc
+++ b/ui/base/ime/input_method_ibus_unittest.cc
@@ -279,7 +279,7 @@ class InputMethodIBusTest : public internal::InputMethodDelegate,
return input_type_;
}
virtual TextInputMode GetTextInputMode() const OVERRIDE {
- return TEXT_INPUT_MODE_DEFAULT;
+ return input_mode_;
}
virtual bool CanComposeInline() const OVERRIDE {
return can_compose_inline_;
@@ -349,6 +349,7 @@ class InputMethodIBusTest : public internal::InputMethodDelegate,
on_input_method_changed_call_count_ = 0;
input_type_ = TEXT_INPUT_TYPE_NONE;
+ input_mode_ = TEXT_INPUT_MODE_DEFAULT;
can_compose_inline_ = true;
caret_bounds_ = gfx::Rect();
}
@@ -373,6 +374,7 @@ class InputMethodIBusTest : public internal::InputMethodDelegate,
// Variables that will be returned from the ui::TextInputClient functions.
TextInputType input_type_;
+ TextInputMode input_mode_;
bool can_compose_inline_;
gfx::Rect caret_bounds_;
gfx::Range text_range_;
@@ -537,22 +539,31 @@ TEST_F(InputMethodIBusTest, Focus_Scenario) {
EXPECT_EQ(0, mock_ime_engine_handler_->focus_in_call_count());
EXPECT_EQ(0, mock_ime_engine_handler_->focus_out_call_count());
EXPECT_EQ(TEXT_INPUT_TYPE_NONE,
- mock_ime_engine_handler_->last_text_input_type());
+ mock_ime_engine_handler_->last_text_input_context().type);
+ EXPECT_EQ(TEXT_INPUT_MODE_DEFAULT,
+ mock_ime_engine_handler_->last_text_input_context().mode);
input_type_ = TEXT_INPUT_TYPE_TEXT;
+ input_mode_ = TEXT_INPUT_MODE_LATIN;
ime_->OnTextInputTypeChanged(this);
- // Confirm that only FocusIn is called and the TextInputType is TEXT.
+ // Confirm that only FocusIn is called, the TextInputType is TEXT and the
+ // TextInputMode is LATIN..
EXPECT_EQ(1, mock_ime_engine_handler_->focus_in_call_count());
EXPECT_EQ(0, mock_ime_engine_handler_->focus_out_call_count());
EXPECT_EQ(TEXT_INPUT_TYPE_TEXT,
- mock_ime_engine_handler_->last_text_input_type());
+ mock_ime_engine_handler_->last_text_input_context().type);
+ EXPECT_EQ(TEXT_INPUT_MODE_LATIN,
+ mock_ime_engine_handler_->last_text_input_context().mode);
+ input_mode_ = TEXT_INPUT_MODE_KANA;
ime_->OnTextInputTypeChanged(this);
// Confirm that both FocusIn and FocusOut are NOT called.
EXPECT_EQ(1, mock_ime_engine_handler_->focus_in_call_count());
EXPECT_EQ(0, mock_ime_engine_handler_->focus_out_call_count());
EXPECT_EQ(TEXT_INPUT_TYPE_TEXT,
- mock_ime_engine_handler_->last_text_input_type());
+ mock_ime_engine_handler_->last_text_input_context().type);
+ EXPECT_EQ(TEXT_INPUT_MODE_LATIN,
+ mock_ime_engine_handler_->last_text_input_context().mode);
input_type_ = TEXT_INPUT_TYPE_URL;
ime_->OnTextInputTypeChanged(this);
@@ -561,7 +572,9 @@ TEST_F(InputMethodIBusTest, Focus_Scenario) {
EXPECT_EQ(2, mock_ime_engine_handler_->focus_in_call_count());
EXPECT_EQ(1, mock_ime_engine_handler_->focus_out_call_count());
EXPECT_EQ(TEXT_INPUT_TYPE_URL,
- mock_ime_engine_handler_->last_text_input_type());
+ mock_ime_engine_handler_->last_text_input_context().type);
+ EXPECT_EQ(TEXT_INPUT_MODE_KANA,
+ mock_ime_engine_handler_->last_text_input_context().mode);
}
// Test if the new |caret_bounds_| is correctly sent to ibus-daemon.