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/extensions/api/input_ime/input_ime_api.h" | 5 #include "chrome/browser/extensions/api/input_ime/input_ime_api.h" |
6 | 6 |
7 #include "base/strings/string_number_conversions.h" | 7 #include "base/strings/string_number_conversions.h" |
8 #include "base/values.h" | 8 #include "base/values.h" |
9 #include "chrome/browser/chromeos/input_method/input_method_engine.h" | 9 #include "chrome/browser/chromeos/input_method/input_method_engine.h" |
10 #include "chrome/browser/chromeos/login/lock/screen_locker.h" | 10 #include "chrome/browser/chromeos/login/lock/screen_locker.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 | 52 |
53 void SetMenuItemToMenu(const input_ime::MenuItem& input, | 53 void SetMenuItemToMenu(const input_ime::MenuItem& input, |
54 InputMethodEngineInterface::MenuItem* out) { | 54 InputMethodEngineInterface::MenuItem* out) { |
55 out->modified = 0; | 55 out->modified = 0; |
56 out->id = input.id; | 56 out->id = input.id; |
57 if (input.label) { | 57 if (input.label) { |
58 out->modified |= InputMethodEngineInterface::MENU_ITEM_MODIFIED_LABEL; | 58 out->modified |= InputMethodEngineInterface::MENU_ITEM_MODIFIED_LABEL; |
59 out->label = *input.label; | 59 out->label = *input.label; |
60 } | 60 } |
61 | 61 |
62 if (input.style != input_ime::MenuItem::STYLE_NONE) { | 62 if (input.style != input_ime::MENU_ITEM_STYLE_NONE) { |
63 out->modified |= InputMethodEngineInterface::MENU_ITEM_MODIFIED_STYLE; | 63 out->modified |= InputMethodEngineInterface::MENU_ITEM_MODIFIED_STYLE; |
64 out->style = static_cast<InputMethodEngineInterface::MenuItemStyle>( | 64 out->style = static_cast<InputMethodEngineInterface::MenuItemStyle>( |
65 input.style); | 65 input.style); |
66 } | 66 } |
67 | 67 |
68 if (input.visible) | 68 if (input.visible) |
69 out->modified |= InputMethodEngineInterface::MENU_ITEM_MODIFIED_VISIBLE; | 69 out->modified |= InputMethodEngineInterface::MENU_ITEM_MODIFIED_VISIBLE; |
70 out->visible = input.visible ? *input.visible : true; | 70 out->visible = input.visible ? *input.visible : true; |
71 | 71 |
72 if (input.checked) | 72 if (input.checked) |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 | 128 |
129 ~ImeObserver() override {} | 129 ~ImeObserver() override {} |
130 | 130 |
131 void OnActivate(const std::string& component_id) override { | 131 void OnActivate(const std::string& component_id) override { |
132 if (extension_id_.empty() || | 132 if (extension_id_.empty() || |
133 !HasListener(input_ime::OnActivate::kEventName)) | 133 !HasListener(input_ime::OnActivate::kEventName)) |
134 return; | 134 return; |
135 | 135 |
136 scoped_ptr<base::ListValue> args(input_ime::OnActivate::Create( | 136 scoped_ptr<base::ListValue> args(input_ime::OnActivate::Create( |
137 component_id, | 137 component_id, |
138 input_ime::OnActivate::ParseScreen(GetCurrentScreenType()))); | 138 input_ime::ParseScreenType(GetCurrentScreenType()))); |
139 | 139 |
140 DispatchEventToExtension( | 140 DispatchEventToExtension( |
141 extension_id_, input_ime::OnActivate::kEventName, args.Pass()); | 141 extension_id_, input_ime::OnActivate::kEventName, args.Pass()); |
142 } | 142 } |
143 | 143 |
144 void OnDeactivated(const std::string& component_id) override { | 144 void OnDeactivated(const std::string& component_id) override { |
145 if (extension_id_.empty() || | 145 if (extension_id_.empty() || |
146 !HasListener(input_ime::OnDeactivated::kEventName)) | 146 !HasListener(input_ime::OnDeactivated::kEventName)) |
147 return; | 147 return; |
148 | 148 |
149 scoped_ptr<base::ListValue> args( | 149 scoped_ptr<base::ListValue> args( |
150 input_ime::OnDeactivated::Create(component_id)); | 150 input_ime::OnDeactivated::Create(component_id)); |
151 | 151 |
152 DispatchEventToExtension( | 152 DispatchEventToExtension( |
153 extension_id_, input_ime::OnDeactivated::kEventName, args.Pass()); | 153 extension_id_, input_ime::OnDeactivated::kEventName, args.Pass()); |
154 } | 154 } |
155 | 155 |
156 void OnFocus( | 156 void OnFocus( |
157 const InputMethodEngineInterface::InputContext& context) override { | 157 const InputMethodEngineInterface::InputContext& context) override { |
158 if (extension_id_.empty() || !HasListener(input_ime::OnFocus::kEventName)) | 158 if (extension_id_.empty() || !HasListener(input_ime::OnFocus::kEventName)) |
159 return; | 159 return; |
160 | 160 |
161 input_ime::InputContext context_value; | 161 input_ime::InputContext context_value; |
162 context_value.context_id = context.id; | 162 context_value.context_id = context.id; |
163 context_value.type = input_ime::InputContext::ParseType(context.type); | 163 context_value.type = input_ime::ParseInputContextType(context.type); |
164 context_value.auto_correct = context.auto_correct; | 164 context_value.auto_correct = context.auto_correct; |
165 context_value.auto_complete = context.auto_complete; | 165 context_value.auto_complete = context.auto_complete; |
166 context_value.spell_check = context.spell_check; | 166 context_value.spell_check = context.spell_check; |
167 | 167 |
168 scoped_ptr<base::ListValue> args(input_ime::OnFocus::Create(context_value)); | 168 scoped_ptr<base::ListValue> args(input_ime::OnFocus::Create(context_value)); |
169 | 169 |
170 DispatchEventToExtension( | 170 DispatchEventToExtension( |
171 extension_id_, input_ime::OnFocus::kEventName, args.Pass()); | 171 extension_id_, input_ime::OnFocus::kEventName, args.Pass()); |
172 } | 172 } |
173 | 173 |
174 void OnBlur(int context_id) override { | 174 void OnBlur(int context_id) override { |
175 if (extension_id_.empty() || !HasListener(input_ime::OnBlur::kEventName)) | 175 if (extension_id_.empty() || !HasListener(input_ime::OnBlur::kEventName)) |
176 return; | 176 return; |
177 | 177 |
178 scoped_ptr<base::ListValue> args(input_ime::OnBlur::Create(context_id)); | 178 scoped_ptr<base::ListValue> args(input_ime::OnBlur::Create(context_id)); |
179 | 179 |
180 DispatchEventToExtension( | 180 DispatchEventToExtension( |
181 extension_id_, input_ime::OnBlur::kEventName, args.Pass()); | 181 extension_id_, input_ime::OnBlur::kEventName, args.Pass()); |
182 } | 182 } |
183 | 183 |
184 void OnInputContextUpdate( | 184 void OnInputContextUpdate( |
185 const InputMethodEngineInterface::InputContext& context) override { | 185 const InputMethodEngineInterface::InputContext& context) override { |
186 if (extension_id_.empty() || | 186 if (extension_id_.empty() || |
187 !HasListener(input_ime::OnInputContextUpdate::kEventName)) | 187 !HasListener(input_ime::OnInputContextUpdate::kEventName)) |
188 return; | 188 return; |
189 | 189 |
190 input_ime::InputContext context_value; | 190 input_ime::InputContext context_value; |
191 context_value.context_id = context.id; | 191 context_value.context_id = context.id; |
192 context_value.type = input_ime::InputContext::ParseType(context.type); | 192 context_value.type = input_ime::ParseInputContextType(context.type); |
193 | 193 |
194 scoped_ptr<base::ListValue> args( | 194 scoped_ptr<base::ListValue> args( |
195 input_ime::OnInputContextUpdate::Create(context_value)); | 195 input_ime::OnInputContextUpdate::Create(context_value)); |
196 | 196 |
197 DispatchEventToExtension(extension_id_, | 197 DispatchEventToExtension(extension_id_, |
198 input_ime::OnInputContextUpdate::kEventName, | 198 input_ime::OnInputContextUpdate::kEventName, |
199 args.Pass()); | 199 args.Pass()); |
200 } | 200 } |
201 | 201 |
202 void OnKeyEvent(const std::string& component_id, | 202 void OnKeyEvent(const std::string& component_id, |
(...skipping 11 matching lines...) Expand all Loading... |
214 return; | 214 return; |
215 } | 215 } |
216 | 216 |
217 extensions::InputImeEventRouter* ime_event_router = | 217 extensions::InputImeEventRouter* ime_event_router = |
218 extensions::InputImeEventRouter::GetInstance(); | 218 extensions::InputImeEventRouter::GetInstance(); |
219 | 219 |
220 const std::string request_id = | 220 const std::string request_id = |
221 ime_event_router->AddRequest(component_id, key_data); | 221 ime_event_router->AddRequest(component_id, key_data); |
222 | 222 |
223 input_ime::KeyboardEvent key_data_value; | 223 input_ime::KeyboardEvent key_data_value; |
224 key_data_value.type = input_ime::KeyboardEvent::ParseType(event.type); | 224 key_data_value.type = input_ime::ParseKeyboardEventType(event.type); |
225 key_data_value.request_id = request_id; | 225 key_data_value.request_id = request_id; |
226 if (!event.extension_id.empty()) | 226 if (!event.extension_id.empty()) |
227 key_data_value.extension_id.reset(new std::string(event.extension_id)); | 227 key_data_value.extension_id.reset(new std::string(event.extension_id)); |
228 key_data_value.key = event.key; | 228 key_data_value.key = event.key; |
229 key_data_value.code = event.code; | 229 key_data_value.code = event.code; |
230 key_data_value.alt_key.reset(new bool(event.alt_key)); | 230 key_data_value.alt_key.reset(new bool(event.alt_key)); |
231 key_data_value.ctrl_key.reset(new bool(event.ctrl_key)); | 231 key_data_value.ctrl_key.reset(new bool(event.ctrl_key)); |
232 key_data_value.shift_key.reset(new bool(event.shift_key)); | 232 key_data_value.shift_key.reset(new bool(event.shift_key)); |
233 key_data_value.caps_lock.reset(new bool(event.caps_lock)); | 233 key_data_value.caps_lock.reset(new bool(event.caps_lock)); |
234 | 234 |
235 scoped_ptr<base::ListValue> args( | 235 scoped_ptr<base::ListValue> args( |
236 input_ime::OnKeyEvent::Create(component_id, key_data_value)); | 236 input_ime::OnKeyEvent::Create(component_id, key_data_value)); |
237 | 237 |
238 DispatchEventToExtension( | 238 DispatchEventToExtension( |
239 extension_id_, input_ime::OnKeyEvent::kEventName, args.Pass()); | 239 extension_id_, input_ime::OnKeyEvent::kEventName, args.Pass()); |
240 } | 240 } |
241 | 241 |
242 void OnCandidateClicked( | 242 void OnCandidateClicked( |
243 const std::string& component_id, | 243 const std::string& component_id, |
244 int candidate_id, | 244 int candidate_id, |
245 InputMethodEngineInterface::MouseButtonEvent button) override { | 245 InputMethodEngineInterface::MouseButtonEvent button) override { |
246 if (extension_id_.empty() || | 246 if (extension_id_.empty() || |
247 !HasListener(input_ime::OnCandidateClicked::kEventName)) | 247 !HasListener(input_ime::OnCandidateClicked::kEventName)) |
248 return; | 248 return; |
249 | 249 |
250 input_ime::OnCandidateClicked::Button button_enum = | 250 input_ime::MouseButton button_enum = input_ime::MOUSE_BUTTON_NONE; |
251 input_ime::OnCandidateClicked::BUTTON_NONE; | |
252 switch (button) { | 251 switch (button) { |
253 case InputMethodEngineInterface::MOUSE_BUTTON_MIDDLE: | 252 case InputMethodEngineInterface::MOUSE_BUTTON_MIDDLE: |
254 button_enum = input_ime::OnCandidateClicked::BUTTON_MIDDLE; | 253 button_enum = input_ime::MOUSE_BUTTON_MIDDLE; |
255 break; | 254 break; |
256 | 255 |
257 case InputMethodEngineInterface::MOUSE_BUTTON_RIGHT: | 256 case InputMethodEngineInterface::MOUSE_BUTTON_RIGHT: |
258 button_enum = input_ime::OnCandidateClicked::BUTTON_RIGHT; | 257 button_enum = input_ime::MOUSE_BUTTON_RIGHT; |
259 break; | 258 break; |
260 | 259 |
261 case InputMethodEngineInterface::MOUSE_BUTTON_LEFT: | 260 case InputMethodEngineInterface::MOUSE_BUTTON_LEFT: |
262 // Default to left. | 261 // Default to left. |
263 default: | 262 default: |
264 button_enum = input_ime::OnCandidateClicked::BUTTON_LEFT; | 263 button_enum = input_ime::MOUSE_BUTTON_LEFT; |
265 break; | 264 break; |
266 } | 265 } |
267 | 266 |
268 scoped_ptr<base::ListValue> args(input_ime::OnCandidateClicked::Create( | 267 scoped_ptr<base::ListValue> args(input_ime::OnCandidateClicked::Create( |
269 component_id, candidate_id, button_enum)); | 268 component_id, candidate_id, button_enum)); |
270 | 269 |
271 DispatchEventToExtension( | 270 DispatchEventToExtension( |
272 extension_id_, input_ime::OnCandidateClicked::kEventName, args.Pass()); | 271 extension_id_, input_ime::OnCandidateClicked::kEventName, args.Pass()); |
273 } | 272 } |
274 | 273 |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
544 SetComposition::Params::Create(*args_)); | 543 SetComposition::Params::Create(*args_)); |
545 const SetComposition::Params::Parameters& params = parent_params->parameters; | 544 const SetComposition::Params::Parameters& params = parent_params->parameters; |
546 std::vector<InputMethodEngineInterface::SegmentInfo> segments; | 545 std::vector<InputMethodEngineInterface::SegmentInfo> segments; |
547 if (params.segments) { | 546 if (params.segments) { |
548 const std::vector<linked_ptr< | 547 const std::vector<linked_ptr< |
549 SetComposition::Params::Parameters::SegmentsType> >& | 548 SetComposition::Params::Parameters::SegmentsType> >& |
550 segments_args = *params.segments; | 549 segments_args = *params.segments; |
551 for (size_t i = 0; i < segments_args.size(); ++i) { | 550 for (size_t i = 0; i < segments_args.size(); ++i) { |
552 EXTENSION_FUNCTION_VALIDATE( | 551 EXTENSION_FUNCTION_VALIDATE( |
553 segments_args[i]->style != | 552 segments_args[i]->style != |
554 SetComposition::Params::Parameters::SegmentsType::STYLE_NONE); | 553 input_ime::UNDERLINE_STYLE_NONE); |
555 segments.push_back(InputMethodEngineInterface::SegmentInfo()); | 554 segments.push_back(InputMethodEngineInterface::SegmentInfo()); |
556 segments.back().start = segments_args[i]->start; | 555 segments.back().start = segments_args[i]->start; |
557 segments.back().end = segments_args[i]->end; | 556 segments.back().end = segments_args[i]->end; |
558 if (segments_args[i]->style == | 557 if (segments_args[i]->style == |
559 SetComposition::Params::Parameters::SegmentsType::STYLE_UNDERLINE) { | 558 input_ime::UNDERLINE_STYLE_UNDERLINE) { |
560 segments.back().style = | 559 segments.back().style = |
561 InputMethodEngineInterface::SEGMENT_STYLE_UNDERLINE; | 560 InputMethodEngineInterface::SEGMENT_STYLE_UNDERLINE; |
562 } else if (segments_args[i]->style == | 561 } else if (segments_args[i]->style == |
563 SetComposition::Params::Parameters::SegmentsType:: | 562 input_ime::UNDERLINE_STYLE_DOUBLEUNDERLINE) { |
564 STYLE_DOUBLEUNDERLINE) { | |
565 segments.back().style = | 563 segments.back().style = |
566 InputMethodEngineInterface::SEGMENT_STYLE_DOUBLE_UNDERLINE; | 564 InputMethodEngineInterface::SEGMENT_STYLE_DOUBLE_UNDERLINE; |
567 } else { | 565 } else { |
568 segments.back().style = | 566 segments.back().style = |
569 InputMethodEngineInterface::SEGMENT_STYLE_NO_UNDERLINE; | 567 InputMethodEngineInterface::SEGMENT_STYLE_NO_UNDERLINE; |
570 } | 568 } |
571 } | 569 } |
572 } | 570 } |
573 | 571 |
574 int selection_start = | 572 int selection_start = |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
641 error_ = kErrorEngineNotAvailable; | 639 error_ = kErrorEngineNotAvailable; |
642 return false; | 640 return false; |
643 } | 641 } |
644 | 642 |
645 const std::vector<linked_ptr<input_ime::KeyboardEvent> >& key_data = | 643 const std::vector<linked_ptr<input_ime::KeyboardEvent> >& key_data = |
646 params.key_data; | 644 params.key_data; |
647 std::vector<chromeos::InputMethodEngineInterface::KeyboardEvent> key_data_out; | 645 std::vector<chromeos::InputMethodEngineInterface::KeyboardEvent> key_data_out; |
648 | 646 |
649 for (size_t i = 0; i < key_data.size(); ++i) { | 647 for (size_t i = 0; i < key_data.size(); ++i) { |
650 chromeos::InputMethodEngineInterface::KeyboardEvent event; | 648 chromeos::InputMethodEngineInterface::KeyboardEvent event; |
651 event.type = input_ime::KeyboardEvent::ToString(key_data[i]->type); | 649 event.type = input_ime::ToString(key_data[i]->type); |
652 event.key = key_data[i]->key; | 650 event.key = key_data[i]->key; |
653 event.code = key_data[i]->code; | 651 event.code = key_data[i]->code; |
654 event.key_code = key_data[i]->key_code.get() ? *(key_data[i]->key_code) : 0; | 652 event.key_code = key_data[i]->key_code.get() ? *(key_data[i]->key_code) : 0; |
655 if (key_data[i]->alt_key) | 653 if (key_data[i]->alt_key) |
656 event.alt_key = *(key_data[i]->alt_key); | 654 event.alt_key = *(key_data[i]->alt_key); |
657 if (key_data[i]->ctrl_key) | 655 if (key_data[i]->ctrl_key) |
658 event.ctrl_key = *(key_data[i]->ctrl_key); | 656 event.ctrl_key = *(key_data[i]->ctrl_key); |
659 if (key_data[i]->shift_key) | 657 if (key_data[i]->shift_key) |
660 event.shift_key = *(key_data[i]->shift_key); | 658 event.shift_key = *(key_data[i]->shift_key); |
661 if (key_data[i]->caps_lock) | 659 if (key_data[i]->caps_lock) |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 if (properties.vertical) { | 701 if (properties.vertical) { |
704 properties_out.is_vertical = *properties.vertical; | 702 properties_out.is_vertical = *properties.vertical; |
705 modified = true; | 703 modified = true; |
706 } | 704 } |
707 | 705 |
708 if (properties.page_size) { | 706 if (properties.page_size) { |
709 properties_out.page_size = *properties.page_size; | 707 properties_out.page_size = *properties.page_size; |
710 modified = true; | 708 modified = true; |
711 } | 709 } |
712 | 710 |
713 if (properties.window_position == | 711 if (properties.window_position == input_ime::WINDOW_POSITION_COMPOSITION) { |
714 SetCandidateWindowProperties::Params::Parameters::Properties:: | |
715 WINDOW_POSITION_COMPOSITION) { | |
716 properties_out.show_window_at_composition = true; | 712 properties_out.show_window_at_composition = true; |
717 modified = true; | 713 modified = true; |
718 } else if (properties.window_position == | 714 } else if (properties.window_position == input_ime::WINDOW_POSITION_CURSOR) { |
719 SetCandidateWindowProperties::Params::Parameters::Properties:: | |
720 WINDOW_POSITION_CURSOR) { | |
721 properties_out.show_window_at_composition = false; | 715 properties_out.show_window_at_composition = false; |
722 modified = true; | 716 modified = true; |
723 } | 717 } |
724 | 718 |
725 if (properties.auxiliary_text) { | 719 if (properties.auxiliary_text) { |
726 properties_out.auxiliary_text = *properties.auxiliary_text; | 720 properties_out.auxiliary_text = *properties.auxiliary_text; |
727 modified = true; | 721 modified = true; |
728 } | 722 } |
729 | 723 |
730 if (properties.auxiliary_text_visible) { | 724 if (properties.auxiliary_text_visible) { |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
926 // Notifies the IME extension for IME ready with onActivate/onFocus events. | 920 // Notifies the IME extension for IME ready with onActivate/onFocus events. |
927 if (engine) | 921 if (engine) |
928 engine->Enable(engine->GetActiveComponentId()); | 922 engine->Enable(engine->GetActiveComponentId()); |
929 } | 923 } |
930 | 924 |
931 InputImeEventRouter* InputImeAPI::input_ime_event_router() { | 925 InputImeEventRouter* InputImeAPI::input_ime_event_router() { |
932 return InputImeEventRouter::GetInstance(); | 926 return InputImeEventRouter::GetInstance(); |
933 } | 927 } |
934 | 928 |
935 } // namespace extensions | 929 } // namespace extensions |
OLD | NEW |