Chromium Code Reviews| Index: chrome/browser/chromeos/input_method/input_method_engine.cc |
| diff --git a/chrome/browser/chromeos/input_method/input_method_engine.cc b/chrome/browser/chromeos/input_method/input_method_engine.cc |
| index 6d5ad0cafadeb581153274112db952ab50213699..1214b5486ae083d6776795b8635efae9e3120e4e 100644 |
| --- a/chrome/browser/chromeos/input_method/input_method_engine.cc |
| +++ b/chrome/browser/chromeos/input_method/input_method_engine.cc |
| @@ -17,6 +17,7 @@ |
| #include "base/strings/string_util.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "chrome/browser/profiles/profile_manager.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_tree_host.h" |
| #include "ui/base/ime/candidate_window.h" |
| @@ -162,7 +163,8 @@ InputMethodEngine::InputMethodEngine() |
| composition_cursor_(0), |
| candidate_window_(new ui::CandidateWindow()), |
| window_visible_(false), |
| - sent_key_event_(NULL) { |
| + sent_key_event_(NULL), |
| + profile_(NULL) { |
| } |
| InputMethodEngine::~InputMethodEngine() { |
| @@ -170,12 +172,14 @@ InputMethodEngine::~InputMethodEngine() { |
| void InputMethodEngine::Initialize( |
| scoped_ptr<InputMethodEngineInterface::Observer> observer, |
| - const char* extension_id) { |
| + const char* extension_id, |
| + Profile* profile) { |
| DCHECK(observer) << "Observer must not be null."; |
| // TODO(komatsu): It is probably better to set observer out of Initialize. |
| observer_ = observer.Pass(); |
| extension_id_ = extension_id; |
| + profile_ = profile; |
| } |
| const std::string& InputMethodEngine::GetActiveComponentId() const { |
| @@ -501,6 +505,8 @@ void InputMethodEngine::HideInputView() { |
| void InputMethodEngine::SetCompositionBounds( |
| const std::vector<gfx::Rect>& bounds) { |
| + if (!CheckProfile()) |
|
Alexander Alekseev
2015/05/13 17:50:38
This might be tricky, as we've seen delayed events
Shu Chen
2015/05/14 04:53:05
Theoretically CheckProfile() here should always re
|
| + return; |
| observer_->OnCompositionBoundsChanged(bounds); |
| } |
| @@ -517,6 +523,8 @@ void InputMethodEngine::EnableInputView() { |
| void InputMethodEngine::FocusIn( |
| const IMEEngineHandlerInterface::InputContext& input_context) { |
| + if (!CheckProfile()) |
| + return; |
| current_input_type_ = input_context.type; |
| if (!IsActive() || current_input_type_ == ui::TEXT_INPUT_TYPE_NONE) |
| @@ -562,6 +570,8 @@ void InputMethodEngine::FocusIn( |
| } |
| void InputMethodEngine::FocusOut() { |
| + if (!CheckProfile()) |
| + return; |
| if (!IsActive() || current_input_type_ == ui::TEXT_INPUT_TYPE_NONE) |
| return; |
| @@ -573,6 +583,8 @@ void InputMethodEngine::FocusOut() { |
| } |
| void InputMethodEngine::Enable(const std::string& component_id) { |
| + if (!CheckProfile()) |
| + return; |
| DCHECK(!component_id.empty()); |
| active_component_id_ = component_id; |
| observer_->OnActivate(component_id); |
| @@ -584,15 +596,21 @@ void InputMethodEngine::Enable(const std::string& component_id) { |
| } |
| void InputMethodEngine::Disable() { |
| + if (!CheckProfile()) |
| + return; |
| active_component_id_.clear(); |
| observer_->OnDeactivated(active_component_id_); |
| } |
| void InputMethodEngine::PropertyActivate(const std::string& property_name) { |
| + if (!CheckProfile()) |
| + return; |
| observer_->OnMenuItemActivated(active_component_id_, property_name); |
| } |
| void InputMethodEngine::Reset() { |
| + if (!CheckProfile()) |
| + return; |
| observer_->OnReset(active_component_id_); |
| } |
| @@ -603,6 +621,8 @@ bool InputMethodEngine::IsInterestedInKeyEvent() const { |
| void InputMethodEngine::ProcessKeyEvent( |
| const ui::KeyEvent& key_event, |
| const KeyEventDoneCallback& callback) { |
| + if (!CheckProfile()) |
| + return; |
| KeyEventDoneCallback* handler = new KeyEventDoneCallback(); |
| *handler = callback; |
| @@ -624,6 +644,8 @@ void InputMethodEngine::ProcessKeyEvent( |
| } |
| void InputMethodEngine::CandidateClicked(uint32 index) { |
| + if (!CheckProfile()) |
| + return; |
| if (index > candidate_ids_.size()) { |
| return; |
| } |
| @@ -636,12 +658,19 @@ void InputMethodEngine::CandidateClicked(uint32 index) { |
| void InputMethodEngine::SetSurroundingText(const std::string& text, |
| uint32 cursor_pos, |
| uint32 anchor_pos) { |
| + if (!CheckProfile()) |
| + return; |
| observer_->OnSurroundingTextChanged(active_component_id_, |
| text, |
| static_cast<int>(cursor_pos), |
| static_cast<int>(anchor_pos)); |
| } |
| +bool InputMethodEngine::CheckProfile() const { |
| + Profile* active_profile = ProfileManager::GetActiveUserProfile(); |
| + return active_profile == profile_ || profile_->IsSameProfile(active_profile); |
| +} |
| + |
| // TODO(uekawa): rename this method to a more reasonable name. |
| void InputMethodEngine::MenuItemToProperty( |
| const MenuItem& item, |