summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos
diff options
context:
space:
mode:
authornona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-04 11:17:34 +0000
committernona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-04 11:17:34 +0000
commit1a3e9f47e2c6dc7557eb2970dc014ad9bbb7603c (patch)
tree5b02459489133ddc7542a6ed10cd1f68863d28ed /chrome/browser/chromeos
parent303d24abd2e1af5d35370c71916477454c070552 (diff)
downloadchromium_src-1a3e9f47e2c6dc7557eb2970dc014ad9bbb7603c.zip
chromium_src-1a3e9f47e2c6dc7557eb2970dc014ad9bbb7603c.tar.gz
chromium_src-1a3e9f47e2c6dc7557eb2970dc014ad9bbb7603c.tar.bz2
Support Component Extension IME
Component Extension IME is basically treated as system input method. BUG=164377 TEST=None Review URL: https://chromiumcodereview.appspot.com/13527002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@192293 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos')
-rw-r--r--chrome/browser/chromeos/input_method/ibus_controller_impl.cc4
-rw-r--r--chrome/browser/chromeos/input_method/input_method_manager_impl.cc26
-rw-r--r--chrome/browser/chromeos/input_method/input_method_manager_impl.h4
3 files changed, 30 insertions, 4 deletions
diff --git a/chrome/browser/chromeos/input_method/ibus_controller_impl.cc b/chrome/browser/chromeos/input_method/ibus_controller_impl.cc
index 5d98bf5..558eb28 100644
--- a/chrome/browser/chromeos/input_method/ibus_controller_impl.cc
+++ b/chrome/browser/chromeos/input_method/ibus_controller_impl.cc
@@ -29,6 +29,7 @@
#include "chromeos/dbus/ibus/ibus_input_context_client.h"
#include "chromeos/dbus/ibus/ibus_panel_service.h"
#include "chromeos/dbus/ibus/ibus_property.h"
+#include "chromeos/ime/component_extension_ime_manager.h"
#include "chromeos/ime/extension_ime_util.h"
#include "chromeos/ime/input_method_config.h"
#include "chromeos/ime/input_method_property.h"
@@ -201,7 +202,8 @@ bool IBusControllerImpl::ChangeInputMethod(const std::string& id) {
// Sanity checks.
DCHECK(!InputMethodUtil::IsKeyboardLayout(id));
if (!whitelist_.InputMethodIdIsWhitelisted(id) &&
- !extension_ime_util::IsExtensionIME(id))
+ !extension_ime_util::IsExtensionIME(id) &&
+ !ComponentExtensionIMEManager::IsComponentExtensionIMEId(id))
return false;
// Clear input method properties unconditionally if |id| is not equal to
diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
index bc5de30..0aab684 100644
--- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
+++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
@@ -208,6 +208,9 @@ bool InputMethodManagerImpl::EnableInputMethods(
}
active_input_method_ids_.swap(new_active_input_method_ids_filtered);
+ if (component_extension_ime_manager_->IsInitialized())
+ LoadNecessaryComponentExtensions();
+
if (ContainOnlyKeyboardLayout(active_input_method_ids_)) {
// Do NOT call ibus_controller_->Stop(); here to work around a crash issue
// at crosbug.com/27051.
@@ -333,6 +336,8 @@ void InputMethodManagerImpl::OnComponentExtensionInitialized(
util_.SetComponentExtensions(
component_extension_ime_manager_->GetAllIMEAsInputMethodDescriptor());
+ LoadNecessaryComponentExtensions();
+
if (!pending_input_method_.empty()) {
ChangeInputMethod(pending_input_method_);
pending_input_method_.clear();
@@ -340,6 +345,18 @@ void InputMethodManagerImpl::OnComponentExtensionInitialized(
}
+void InputMethodManagerImpl::LoadNecessaryComponentExtensions() {
+ if (!component_extension_ime_manager_->IsInitialized())
+ return;
+ for (size_t i = 0; i < active_input_method_ids_.size(); ++i) {
+ if (component_extension_ime_manager_->IsWhitelisted(
+ active_input_method_ids_[i])) {
+ component_extension_ime_manager_->LoadComponentExtensionIME(
+ active_input_method_ids_[i]);
+ }
+ }
+}
+
void InputMethodManagerImpl::ActivateInputMethodProperty(
const std::string& key) {
DCHECK(!key.empty());
@@ -355,7 +372,8 @@ void InputMethodManagerImpl::AddInputMethodExtension(
if (state_ == STATE_TERMINATING)
return;
- if (!extension_ime_util::IsExtensionIME(id)) {
+ if (!extension_ime_util::IsExtensionIME(id) &&
+ !ComponentExtensionIMEManager::IsComponentExtensionIMEId(id)) {
DVLOG(1) << id << " is not a valid extension input method ID.";
return;
}
@@ -363,7 +381,8 @@ void InputMethodManagerImpl::AddInputMethodExtension(
const std::string layout = layouts.empty() ? "" : layouts[0];
extra_input_methods_[id] =
InputMethodDescriptor(id, name, layout, language, true);
- if (!Contains(filtered_extension_imes_, id)) {
+ if (!Contains(filtered_extension_imes_, id) &&
+ !ComponentExtensionIMEManager::IsComponentExtensionIMEId(id)) {
if (!Contains(active_input_method_ids_, id)) {
active_input_method_ids_.push_back(id);
} else {
@@ -420,7 +439,8 @@ void InputMethodManagerImpl::GetInputMethodExtensions(
std::map<std::string, InputMethodDescriptor>::iterator iter;
for (iter = extra_input_methods_.begin(); iter != extra_input_methods_.end();
++iter) {
- result->push_back(iter->second);
+ if (extension_ime_util::IsExtensionIME(iter->first))
+ result->push_back(iter->second);
}
}
diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.h b/chrome/browser/chromeos/input_method/input_method_manager_impl.h
index c061c87..eba250e 100644
--- a/chrome/browser/chromeos/input_method/input_method_manager_impl.h
+++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.h
@@ -152,6 +152,10 @@ class InputMethodManagerImpl : public InputMethodManager,
void InitializeComponentExtension(
const scoped_refptr<base::SequencedTaskRunner>& file_task_runner);
+ // Loads necessary component extensions.
+ // TODO(nona): Support dynamical unloading.
+ void LoadNecessaryComponentExtensions();
+
scoped_ptr<InputMethodDelegate> delegate_;
// The current browser status.