Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5131)

Unified Diff: chrome/browser/chromeos/input_method/input_method_manager_impl.cc

Issue 433163005: Refactoring for InputMethodEngine and InputMethodEventRouter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: error tolerance for missing background page for key events. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/input_method/input_method_manager_impl.cc
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 bc87740a236710894ac22cb1315f6fa3e4e60649..48d46b08f51cd390827b9ea97ea273018b8a6725 100644
--- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
+++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
@@ -331,26 +331,6 @@ bool InputMethodManagerImpl::ChangeInputMethodInternal(
if (candidate_window_controller_.get())
candidate_window_controller_->Hide();
- // Disable the current engine handler.
- IMEEngineHandlerInterface* engine =
- IMEBridge::Get()->GetCurrentEngineHandler();
- if (engine)
- engine->Disable();
-
- // Configure the next engine handler.
- if (InputMethodUtil::IsKeyboardLayout(input_method_id_to_switch) &&
- !extension_ime_util::IsKeyboardLayoutExtension(
- input_method_id_to_switch)) {
- IMEBridge::Get()->SetCurrentEngineHandler(NULL);
- } else {
- IMEEngineHandlerInterface* next_engine =
- profile_engine_map_[GetProfile()][input_method_id_to_switch];
- if (next_engine) {
- IMEBridge::Get()->SetCurrentEngineHandler(next_engine);
- next_engine->Enable();
- }
- }
-
// TODO(komatsu): Check if it is necessary to perform the above routine
// when the current input method is equal to |input_method_id_to_swich|.
if (current_input_method_.id() != input_method_id_to_switch) {
@@ -381,6 +361,25 @@ bool InputMethodManagerImpl::ChangeInputMethodInternal(
current_input_method_ = *descriptor;
}
+ // Disable the current engine handler.
+ IMEEngineHandlerInterface* engine =
+ IMEBridge::Get()->GetCurrentEngineHandler();
+ if (engine)
+ engine->Disable();
+
+ // Configure the next engine handler.
+ // This must be after |current_input_method_| has been set to new input
+ // method, because engine's Enable() method needs to access it.
+ const std::string& extension_id =
+ extension_ime_util::GetExtensionIDFromInputMethodID(
+ input_method_id_to_switch);
+ const std::string& component_id =
+ extension_ime_util::GetEngineIDByInputMethodID(input_method_id_to_switch);
Yuki 2014/08/06 04:42:23 s/GetEngineID/GetComponentID/
Shu Chen 2014/08/06 05:45:03 Done.
+ engine = engine_map_[extension_id];
+ IMEBridge::Get()->SetCurrentEngineHandler(engine);
+ if (engine)
+ engine->Enable(component_id);
+
// Change the keyboard layout to a preferred layout for the input method.
if (!keyboard_->SetCurrentKeyboardLayoutByName(
current_input_method_.GetPreferredKeyboardLayout())) {
@@ -433,58 +432,70 @@ void InputMethodManagerImpl::ActivateInputMethodMenuItem(
}
void InputMethodManagerImpl::AddInputMethodExtension(
- Profile* profile,
- const std::string& id,
+ const std::string& extension_id,
+ const InputMethodDescriptors& descriptors,
InputMethodEngineInterface* engine) {
if (state_ == STATE_TERMINATING)
return;
DCHECK(engine);
- profile_engine_map_[profile][id] = engine;
+ engine_map_[extension_id] = engine;
- if (id == current_input_method_.id()) {
+ if (extension_id == extension_ime_util::GetExtensionIDFromInputMethodID(
+ current_input_method_.id())) {
IMEBridge::Get()->SetCurrentEngineHandler(engine);
- engine->Enable();
- }
-
- if (extension_ime_util::IsComponentExtensionIME(id))
- return;
-
- CHECK(extension_ime_util::IsExtensionIME(id))
- << id << "is not a valid extension input method ID";
-
- const InputMethodDescriptor& descriptor = engine->GetDescriptor();
- extra_input_methods_[id] = descriptor;
-
- if (Contains(enabled_extension_imes_, id)) {
- if (!Contains(active_input_method_ids_, id)) {
- active_input_method_ids_.push_back(id);
- } else {
- DVLOG(1) << "AddInputMethodExtension: alread added: "
- << id << ", " << descriptor.name();
+ engine->Enable(extension_ime_util::GetEngineIDByInputMethodID(
+ current_input_method_.id()));
+ }
+
+ bool contain = false;
+ for (size_t i = 0; i < descriptors.size(); i++) {
+ const InputMethodDescriptor& descriptor = descriptors[i];
+ const std::string& id = descriptor.id();
+ extra_input_methods_[id] = descriptor;
+ if (Contains(enabled_extension_imes_, id)) {
+ if (!Contains(active_input_method_ids_, id)) {
+ active_input_method_ids_.push_back(id);
+ } else {
+ DVLOG(1) << "AddInputMethodExtension: already added: " << id << ", "
+ << descriptor.name();
+ }
+ contain = true;
}
+ }
- // Ensure that the input method daemon is running.
+ // Ensure that the input method daemon is running.
+ if (contain)
MaybeInitializeCandidateWindowController();
- }
}
-void InputMethodManagerImpl::RemoveInputMethodExtension(Profile* profile,
- const std::string& id) {
- if (!extension_ime_util::IsExtensionIME(id))
- DVLOG(1) << id << " is not a valid extension input method ID.";
+void InputMethodManagerImpl::RemoveInputMethodExtension(
+ const std::string& extension_id) {
+ // Removes the active input methods with |extension_id|.
Yuki 2014/08/06 04:42:23 s/Removes/Remove/ Descriptive for class/function/
Shu Chen 2014/08/06 05:45:03 Done.
+ std::vector<std::string> new_active_input_method_ids_;
Yuki 2014/08/06 04:42:23 s/ids_/ids/ This variable is a local variable, is
Shu Chen 2014/08/06 05:45:03 Done.
+ for (size_t i = 0; i < active_input_method_ids_.size(); ++i) {
+ if (extension_id != extension_ime_util::GetExtensionIDFromInputMethodID(
+ active_input_method_ids_[i]))
+ new_active_input_method_ids_.push_back(active_input_method_ids_[i]);
+ }
+ active_input_method_ids_.swap(new_active_input_method_ids_);
- std::vector<std::string>::iterator i = std::find(
- active_input_method_ids_.begin(), active_input_method_ids_.end(), id);
- if (i != active_input_method_ids_.end())
- active_input_method_ids_.erase(i);
- extra_input_methods_.erase(id);
+ // Removes the extra input methods with |extension_id|.
Yuki 2014/08/06 04:42:23 Ditto.
Shu Chen 2014/08/06 05:45:03 Done.
+ std::map<std::string, InputMethodDescriptor> new_extra_input_methods_;
Yuki 2014/08/06 04:42:24 Ditto.
Shu Chen 2014/08/06 05:45:03 Done.
+ for (std::map<std::string, InputMethodDescriptor>::iterator i =
+ extra_input_methods_.begin();
+ i != extra_input_methods_.end();
+ ++i) {
+ if (extension_id !=
+ extension_ime_util::GetExtensionIDFromInputMethodID(i->first))
+ new_extra_input_methods_[i->first] = i->second;
+ }
+ extra_input_methods_.swap(new_extra_input_methods_);
- EngineMap& engine_map = profile_engine_map_[profile];
- if (IMEBridge::Get()->GetCurrentEngineHandler() == engine_map[id])
+ if (IMEBridge::Get()->GetCurrentEngineHandler() == engine_map_[extension_id])
IMEBridge::Get()->SetCurrentEngineHandler(NULL);
- engine_map.erase(id);
+ engine_map_.erase(extension_id);
// No need to switch input method when terminating.
if (state_ != STATE_TERMINATING) {
@@ -867,9 +878,5 @@ void InputMethodManagerImpl::MaybeInitializeCandidateWindowController() {
candidate_window_controller_->AddObserver(this);
}
-Profile* InputMethodManagerImpl::GetProfile() const {
- return ProfileManager::GetActiveUserProfile();
-}
-
} // namespace input_method
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698