| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/input_method/input_method_manager_impl.h" | 5 #include "chrome/browser/chromeos/input_method/input_method_manager_impl.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 |
| 8 #include <algorithm> // std::find | 9 #include <algorithm> // std::find |
| 10 #include <memory> |
| 9 #include <sstream> | 11 #include <sstream> |
| 10 #include <utility> | 12 #include <utility> |
| 11 | 13 |
| 12 #include "base/bind.h" | 14 #include "base/bind.h" |
| 13 #include "base/hash.h" | 15 #include "base/hash.h" |
| 14 #include "base/location.h" | 16 #include "base/location.h" |
| 15 #include "base/memory/scoped_ptr.h" | |
| 16 #include "base/metrics/histogram.h" | 17 #include "base/metrics/histogram.h" |
| 17 #include "base/metrics/sparse_histogram.h" | 18 #include "base/metrics/sparse_histogram.h" |
| 18 #include "base/strings/string_split.h" | 19 #include "base/strings/string_split.h" |
| 19 #include "base/strings/string_util.h" | 20 #include "base/strings/string_util.h" |
| 20 #include "base/strings/stringprintf.h" | 21 #include "base/strings/stringprintf.h" |
| 21 #include "base/sys_info.h" | 22 #include "base/sys_info.h" |
| 22 #include "chrome/browser/browser_process.h" | 23 #include "chrome/browser/browser_process.h" |
| 23 #include "chrome/browser/chromeos/input_method/candidate_window_controller.h" | 24 #include "chrome/browser/chromeos/input_method/candidate_window_controller.h" |
| 24 #include "chrome/browser/chromeos/input_method/component_extension_ime_manager_i
mpl.h" | 25 #include "chrome/browser/chromeos/input_method/component_extension_ime_manager_i
mpl.h" |
| 25 #include "chrome/browser/chromeos/input_method/input_method_switch_recorder.h" | 26 #include "chrome/browser/chromeos/input_method/input_method_switch_recorder.h" |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 return os.str(); | 167 return os.str(); |
| 167 } | 168 } |
| 168 | 169 |
| 169 scoped_refptr<InputMethodManager::State> | 170 scoped_refptr<InputMethodManager::State> |
| 170 InputMethodManagerImpl::StateImpl::Clone() const { | 171 InputMethodManagerImpl::StateImpl::Clone() const { |
| 171 scoped_refptr<StateImpl> new_state(new StateImpl(this->manager_, profile)); | 172 scoped_refptr<StateImpl> new_state(new StateImpl(this->manager_, profile)); |
| 172 new_state->InitFrom(*this); | 173 new_state->InitFrom(*this); |
| 173 return scoped_refptr<InputMethodManager::State>(new_state.get()); | 174 return scoped_refptr<InputMethodManager::State>(new_state.get()); |
| 174 } | 175 } |
| 175 | 176 |
| 176 scoped_ptr<InputMethodDescriptors> | 177 std::unique_ptr<InputMethodDescriptors> |
| 177 InputMethodManagerImpl::StateImpl::GetActiveInputMethods() const { | 178 InputMethodManagerImpl::StateImpl::GetActiveInputMethods() const { |
| 178 scoped_ptr<InputMethodDescriptors> result(new InputMethodDescriptors); | 179 std::unique_ptr<InputMethodDescriptors> result(new InputMethodDescriptors); |
| 179 // Build the active input method descriptors from the active input | 180 // Build the active input method descriptors from the active input |
| 180 // methods cache |active_input_method_ids|. | 181 // methods cache |active_input_method_ids|. |
| 181 for (size_t i = 0; i < active_input_method_ids.size(); ++i) { | 182 for (size_t i = 0; i < active_input_method_ids.size(); ++i) { |
| 182 const std::string& input_method_id = active_input_method_ids[i]; | 183 const std::string& input_method_id = active_input_method_ids[i]; |
| 183 const InputMethodDescriptor* descriptor = | 184 const InputMethodDescriptor* descriptor = |
| 184 manager_->util_.GetInputMethodDescriptorFromId(input_method_id); | 185 manager_->util_.GetInputMethodDescriptorFromId(input_method_id); |
| 185 if (descriptor) { | 186 if (descriptor) { |
| 186 result->push_back(*descriptor); | 187 result->push_back(*descriptor); |
| 187 } else { | 188 } else { |
| 188 std::map<std::string, InputMethodDescriptor>::const_iterator ix = | 189 std::map<std::string, InputMethodDescriptor>::const_iterator ix = |
| (...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 838 false /* show_message */, true /* notify_menu */); | 839 false /* show_message */, true /* notify_menu */); |
| 839 } | 840 } |
| 840 } | 841 } |
| 841 | 842 |
| 842 scoped_refptr<InputMethodManager::State> | 843 scoped_refptr<InputMethodManager::State> |
| 843 InputMethodManagerImpl::GetActiveIMEState() { | 844 InputMethodManagerImpl::GetActiveIMEState() { |
| 844 return scoped_refptr<InputMethodManager::State>(state_.get()); | 845 return scoped_refptr<InputMethodManager::State>(state_.get()); |
| 845 } | 846 } |
| 846 | 847 |
| 847 InputMethodManagerImpl::InputMethodManagerImpl( | 848 InputMethodManagerImpl::InputMethodManagerImpl( |
| 848 scoped_ptr<InputMethodDelegate> delegate, | 849 std::unique_ptr<InputMethodDelegate> delegate, |
| 849 bool enable_extension_loading) | 850 bool enable_extension_loading) |
| 850 : delegate_(std::move(delegate)), | 851 : delegate_(std::move(delegate)), |
| 851 ui_session_(STATE_LOGIN_SCREEN), | 852 ui_session_(STATE_LOGIN_SCREEN), |
| 852 state_(NULL), | 853 state_(NULL), |
| 853 util_(delegate_.get()), | 854 util_(delegate_.get()), |
| 854 component_extension_ime_manager_(new ComponentExtensionIMEManager()), | 855 component_extension_ime_manager_(new ComponentExtensionIMEManager()), |
| 855 enable_extension_loading_(enable_extension_loading), | 856 enable_extension_loading_(enable_extension_loading), |
| 856 is_ime_menu_activated_(false) { | 857 is_ime_menu_activated_(false) { |
| 857 if (base::SysInfo::IsRunningOnChromeOS()) | 858 if (base::SysInfo::IsRunningOnChromeOS()) |
| 858 keyboard_.reset(ImeKeyboard::Create()); | 859 keyboard_.reset(ImeKeyboard::Create()); |
| 859 else | 860 else |
| 860 keyboard_.reset(new FakeImeKeyboard()); | 861 keyboard_.reset(new FakeImeKeyboard()); |
| 861 | 862 |
| 862 // Initializes the system IME list. | 863 // Initializes the system IME list. |
| 863 scoped_ptr<ComponentExtensionIMEManagerDelegate> comp_delegate( | 864 std::unique_ptr<ComponentExtensionIMEManagerDelegate> comp_delegate( |
| 864 new ComponentExtensionIMEManagerImpl()); | 865 new ComponentExtensionIMEManagerImpl()); |
| 865 component_extension_ime_manager_->Initialize(std::move(comp_delegate)); | 866 component_extension_ime_manager_->Initialize(std::move(comp_delegate)); |
| 866 const InputMethodDescriptors& descriptors = | 867 const InputMethodDescriptors& descriptors = |
| 867 component_extension_ime_manager_->GetAllIMEAsInputMethodDescriptor(); | 868 component_extension_ime_manager_->GetAllIMEAsInputMethodDescriptor(); |
| 868 util_.ResetInputMethods(descriptors); | 869 util_.ResetInputMethods(descriptors); |
| 869 chromeos::UserAddingScreen::Get()->AddObserver(this); | 870 chromeos::UserAddingScreen::Get()->AddObserver(this); |
| 870 } | 871 } |
| 871 | 872 |
| 872 InputMethodManagerImpl::~InputMethodManagerImpl() { | 873 InputMethodManagerImpl::~InputMethodManagerImpl() { |
| 873 if (candidate_window_controller_.get()) | 874 if (candidate_window_controller_.get()) |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 936 void InputMethodManagerImpl::OnUserAddingStarted() { | 937 void InputMethodManagerImpl::OnUserAddingStarted() { |
| 937 if (ui_session_ == STATE_BROWSER_SCREEN) | 938 if (ui_session_ == STATE_BROWSER_SCREEN) |
| 938 SetUISessionState(STATE_SECONDARY_LOGIN_SCREEN); | 939 SetUISessionState(STATE_SECONDARY_LOGIN_SCREEN); |
| 939 } | 940 } |
| 940 | 941 |
| 941 void InputMethodManagerImpl::OnUserAddingFinished() { | 942 void InputMethodManagerImpl::OnUserAddingFinished() { |
| 942 if (ui_session_ == STATE_SECONDARY_LOGIN_SCREEN) | 943 if (ui_session_ == STATE_SECONDARY_LOGIN_SCREEN) |
| 943 SetUISessionState(STATE_BROWSER_SCREEN); | 944 SetUISessionState(STATE_BROWSER_SCREEN); |
| 944 } | 945 } |
| 945 | 946 |
| 946 scoped_ptr<InputMethodDescriptors> | 947 std::unique_ptr<InputMethodDescriptors> |
| 947 InputMethodManagerImpl::GetSupportedInputMethods() const { | 948 InputMethodManagerImpl::GetSupportedInputMethods() const { |
| 948 return scoped_ptr<InputMethodDescriptors>(new InputMethodDescriptors); | 949 return std::unique_ptr<InputMethodDescriptors>(new InputMethodDescriptors); |
| 949 } | 950 } |
| 950 | 951 |
| 951 const InputMethodDescriptor* InputMethodManagerImpl::LookupInputMethod( | 952 const InputMethodDescriptor* InputMethodManagerImpl::LookupInputMethod( |
| 952 const std::string& input_method_id, | 953 const std::string& input_method_id, |
| 953 InputMethodManagerImpl::StateImpl* state) { | 954 InputMethodManagerImpl::StateImpl* state) { |
| 954 DCHECK(state); | 955 DCHECK(state); |
| 955 | 956 |
| 956 std::string input_method_id_to_switch = input_method_id; | 957 std::string input_method_id_to_switch = input_method_id; |
| 957 | 958 |
| 958 // Sanity check | 959 // Sanity check |
| 959 if (!state->InputMethodIsActivated(input_method_id)) { | 960 if (!state->InputMethodIsActivated(input_method_id)) { |
| 960 scoped_ptr<InputMethodDescriptors> input_methods( | 961 std::unique_ptr<InputMethodDescriptors> input_methods( |
| 961 state->GetActiveInputMethods()); | 962 state->GetActiveInputMethods()); |
| 962 DCHECK(!input_methods->empty()); | 963 DCHECK(!input_methods->empty()); |
| 963 input_method_id_to_switch = input_methods->at(0).id(); | 964 input_method_id_to_switch = input_methods->at(0).id(); |
| 964 if (!input_method_id.empty()) { | 965 if (!input_method_id.empty()) { |
| 965 DVLOG(1) << "Can't change the current input method to " | 966 DVLOG(1) << "Can't change the current input method to " |
| 966 << input_method_id << " since the engine is not enabled. " | 967 << input_method_id << " since the engine is not enabled. " |
| 967 << "Switch to " << input_method_id_to_switch << " instead."; | 968 << "Switch to " << input_method_id_to_switch << " instead."; |
| 968 } | 969 } |
| 969 } | 970 } |
| 970 | 971 |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1146 CandidateWindowController* candidate_window_controller) { | 1147 CandidateWindowController* candidate_window_controller) { |
| 1147 candidate_window_controller_.reset(candidate_window_controller); | 1148 candidate_window_controller_.reset(candidate_window_controller); |
| 1148 candidate_window_controller_->AddObserver(this); | 1149 candidate_window_controller_->AddObserver(this); |
| 1149 } | 1150 } |
| 1150 | 1151 |
| 1151 void InputMethodManagerImpl::SetImeKeyboardForTesting(ImeKeyboard* keyboard) { | 1152 void InputMethodManagerImpl::SetImeKeyboardForTesting(ImeKeyboard* keyboard) { |
| 1152 keyboard_.reset(keyboard); | 1153 keyboard_.reset(keyboard); |
| 1153 } | 1154 } |
| 1154 | 1155 |
| 1155 void InputMethodManagerImpl::InitializeComponentExtensionForTesting( | 1156 void InputMethodManagerImpl::InitializeComponentExtensionForTesting( |
| 1156 scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate) { | 1157 std::unique_ptr<ComponentExtensionIMEManagerDelegate> delegate) { |
| 1157 component_extension_ime_manager_->Initialize(std::move(delegate)); | 1158 component_extension_ime_manager_->Initialize(std::move(delegate)); |
| 1158 util_.ResetInputMethods( | 1159 util_.ResetInputMethods( |
| 1159 component_extension_ime_manager_->GetAllIMEAsInputMethodDescriptor()); | 1160 component_extension_ime_manager_->GetAllIMEAsInputMethodDescriptor()); |
| 1160 } | 1161 } |
| 1161 | 1162 |
| 1162 void InputMethodManagerImpl::CandidateClicked(int index) { | 1163 void InputMethodManagerImpl::CandidateClicked(int index) { |
| 1163 ui::IMEEngineHandlerInterface* engine = | 1164 ui::IMEEngineHandlerInterface* engine = |
| 1164 ui::IMEBridge::Get()->GetCurrentEngineHandler(); | 1165 ui::IMEBridge::Get()->GetCurrentEngineHandler(); |
| 1165 if (engine) | 1166 if (engine) |
| 1166 engine->CandidateClicked(index); | 1167 engine->CandidateClicked(index); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1202 | 1203 |
| 1203 void InputMethodManagerImpl::NotifyImeMenuItemsChanged( | 1204 void InputMethodManagerImpl::NotifyImeMenuItemsChanged( |
| 1204 const std::string& engine_id, | 1205 const std::string& engine_id, |
| 1205 const std::vector<InputMethodManager::MenuItem>& items) { | 1206 const std::vector<InputMethodManager::MenuItem>& items) { |
| 1206 FOR_EACH_OBSERVER(InputMethodManager::ImeMenuObserver, ime_menu_observers_, | 1207 FOR_EACH_OBSERVER(InputMethodManager::ImeMenuObserver, ime_menu_observers_, |
| 1207 ImeMenuItemsChanged(engine_id, items)); | 1208 ImeMenuItemsChanged(engine_id, items)); |
| 1208 } | 1209 } |
| 1209 | 1210 |
| 1210 } // namespace input_method | 1211 } // namespace input_method |
| 1211 } // namespace chromeos | 1212 } // namespace chromeos |
| OLD | NEW |