| 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/chrome_notification_types.h" | 9 #include "chrome/browser/chrome_notification_types.h" |
| 10 #include "chrome/browser/chromeos/input_method/input_method_engine.h" | |
| 11 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 10 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
| 12 #include "chrome/browser/profiles/profile.h" | 11 #include "chrome/browser/profiles/profile.h" |
| 13 #include "chrome/browser/profiles/profile_manager.h" | 12 #include "chrome/browser/profiles/profile_manager.h" |
| 14 #include "chrome/common/extensions/api/input_ime.h" | 13 #include "chrome/common/extensions/api/input_ime.h" |
| 15 #include "chrome/common/extensions/api/input_ime/input_components_handler.h" | 14 #include "chrome/common/extensions/api/input_ime/input_components_handler.h" |
| 16 #include "content/public/browser/notification_details.h" | 15 #include "content/public/browser/notification_details.h" |
| 17 #include "content/public/browser/notification_source.h" | 16 #include "content/public/browser/notification_source.h" |
| 18 #include "extensions/browser/event_router.h" | 17 #include "extensions/browser/event_router.h" |
| 19 #include "extensions/browser/extension_function_registry.h" | 18 #include "extensions/browser/extension_function_registry.h" |
| 20 #include "extensions/browser/extension_system.h" | 19 #include "extensions/browser/extension_system.h" |
| 21 | 20 |
| 21 #if defined(USE_X11) |
| 22 #include "chrome/browser/chromeos/input_method/input_method_engine.h" |
| 23 #endif |
| 24 |
| 22 namespace input_ime = extensions::api::input_ime; | 25 namespace input_ime = extensions::api::input_ime; |
| 23 namespace KeyEventHandled = extensions::api::input_ime::KeyEventHandled; | 26 namespace KeyEventHandled = extensions::api::input_ime::KeyEventHandled; |
| 24 namespace DeleteSurroundingText = | 27 namespace DeleteSurroundingText = |
| 25 extensions::api::input_ime::DeleteSurroundingText; | 28 extensions::api::input_ime::DeleteSurroundingText; |
| 26 namespace UpdateMenuItems = extensions::api::input_ime::UpdateMenuItems; | 29 namespace UpdateMenuItems = extensions::api::input_ime::UpdateMenuItems; |
| 27 namespace SendKeyEvents = extensions::api::input_ime::SendKeyEvents; | 30 namespace SendKeyEvents = extensions::api::input_ime::SendKeyEvents; |
| 28 namespace HideInputView = extensions::api::input_ime::HideInputView; | 31 namespace HideInputView = extensions::api::input_ime::HideInputView; |
| 29 namespace SetMenuItems = extensions::api::input_ime::SetMenuItems; | 32 namespace SetMenuItems = extensions::api::input_ime::SetMenuItems; |
| 30 namespace SetCursorPosition = extensions::api::input_ime::SetCursorPosition; | 33 namespace SetCursorPosition = extensions::api::input_ime::SetCursorPosition; |
| 31 namespace SetCandidates = extensions::api::input_ime::SetCandidates; | 34 namespace SetCandidates = extensions::api::input_ime::SetCandidates; |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 | 304 |
| 302 } // namespace chromeos | 305 } // namespace chromeos |
| 303 | 306 |
| 304 namespace extensions { | 307 namespace extensions { |
| 305 | 308 |
| 306 InputImeEventRouter* | 309 InputImeEventRouter* |
| 307 InputImeEventRouter::GetInstance() { | 310 InputImeEventRouter::GetInstance() { |
| 308 return Singleton<InputImeEventRouter>::get(); | 311 return Singleton<InputImeEventRouter>::get(); |
| 309 } | 312 } |
| 310 | 313 |
| 311 #if defined(OS_CHROMEOS) | |
| 312 bool InputImeEventRouter::RegisterIme( | 314 bool InputImeEventRouter::RegisterIme( |
| 313 Profile* profile, | 315 Profile* profile, |
| 314 const std::string& extension_id, | 316 const std::string& extension_id, |
| 315 const extensions::InputComponentInfo& component) { | 317 const extensions::InputComponentInfo& component) { |
| 318 #if defined(USE_X11) |
| 316 VLOG(1) << "RegisterIme: " << extension_id << " id: " << component.id; | 319 VLOG(1) << "RegisterIme: " << extension_id << " id: " << component.id; |
| 317 | 320 |
| 318 // If the engine exists already, it may be registered with an old profile. | 321 // If the engine exists already, it may be registered with an old profile. |
| 319 // So overwrite it with the new engine instance. | 322 // So overwrite it with the new engine instance. |
| 320 EngineMap& engine_map = engines_[extension_id]; | 323 EngineMap& engine_map = engines_[extension_id]; |
| 321 EngineMap::iterator engine_ix = engine_map.find(component.id); | 324 EngineMap::iterator engine_ix = engine_map.find(component.id); |
| 322 if (engine_ix != engine_map.end()) { | 325 if (engine_ix != engine_map.end()) { |
| 323 delete engine_ix->second; | 326 delete engine_ix->second; |
| 324 engine_map.erase(engine_ix); | 327 engine_map.erase(engine_ix); |
| 325 } | 328 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 342 component.name.c_str(), | 345 component.name.c_str(), |
| 343 extension_id.c_str(), | 346 extension_id.c_str(), |
| 344 component.id.c_str(), | 347 component.id.c_str(), |
| 345 languages, | 348 languages, |
| 346 layouts, | 349 layouts, |
| 347 component.options_page_url, | 350 component.options_page_url, |
| 348 component.input_view_url); | 351 component.input_view_url); |
| 349 engine_map[component.id] = engine; | 352 engine_map[component.id] = engine; |
| 350 | 353 |
| 351 return true; | 354 return true; |
| 355 #else |
| 356 // TODO(spang): IME support under ozone. |
| 357 NOTIMPLEMENTED(); |
| 358 return false; |
| 359 #endif |
| 352 } | 360 } |
| 353 | 361 |
| 354 void InputImeEventRouter::UnregisterAllImes( | 362 void InputImeEventRouter::UnregisterAllImes( |
| 355 Profile* profile, const std::string& extension_id) { | 363 Profile* profile, const std::string& extension_id) { |
| 356 std::map<std::string, EngineMap>::iterator engine_map = | 364 std::map<std::string, EngineMap>::iterator engine_map = |
| 357 engines_.find(extension_id); | 365 engines_.find(extension_id); |
| 358 if (engine_map != engines_.end()) { | 366 if (engine_map != engines_.end()) { |
| 359 STLDeleteContainerPairSecondPointers(engine_map->second.begin(), | 367 STLDeleteContainerPairSecondPointers(engine_map->second.begin(), |
| 360 engine_map->second.end()); | 368 engine_map->second.end()); |
| 361 engines_.erase(engine_map); | 369 engines_.erase(engine_map); |
| 362 } | 370 } |
| 363 } | 371 } |
| 364 #endif | |
| 365 | 372 |
| 366 InputMethodEngineInterface* InputImeEventRouter::GetEngine( | 373 InputMethodEngineInterface* InputImeEventRouter::GetEngine( |
| 367 const std::string& extension_id, const std::string& engine_id) { | 374 const std::string& extension_id, const std::string& engine_id) { |
| 368 std::map<std::string, | 375 std::map<std::string, |
| 369 std::map<std::string, InputMethodEngineInterface*> >::const_iterator | 376 std::map<std::string, InputMethodEngineInterface*> >::const_iterator |
| 370 engine_list = engines_.find(extension_id); | 377 engine_list = engines_.find(extension_id); |
| 371 if (engine_list != engines_.end()) { | 378 if (engine_list != engines_.end()) { |
| 372 std::map<std::string, InputMethodEngineInterface*>::const_iterator | 379 std::map<std::string, InputMethodEngineInterface*>::const_iterator |
| 373 engine_ix = engine_list->second.find(engine_id); | 380 engine_ix = engine_list->second.find(engine_id); |
| 374 if (engine_ix != engine_list->second.end()) | 381 if (engine_ix != engine_list->second.end()) |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 parent_params->parameters; | 542 parent_params->parameters; |
| 536 chromeos::InputMethodEngineInterface* engine = | 543 chromeos::InputMethodEngineInterface* engine = |
| 537 InputImeEventRouter::GetInstance()->GetActiveEngine(extension_id()); | 544 InputImeEventRouter::GetInstance()->GetActiveEngine(extension_id()); |
| 538 if (!engine) { | 545 if (!engine) { |
| 539 error_ = kErrorEngineNotAvailable; | 546 error_ = kErrorEngineNotAvailable; |
| 540 return false; | 547 return false; |
| 541 } | 548 } |
| 542 | 549 |
| 543 const std::vector<linked_ptr<input_ime::KeyboardEvent> >& key_data = | 550 const std::vector<linked_ptr<input_ime::KeyboardEvent> >& key_data = |
| 544 params.key_data; | 551 params.key_data; |
| 545 std::vector<chromeos::InputMethodEngine::KeyboardEvent> key_data_out; | 552 std::vector<chromeos::InputMethodEngineInterface::KeyboardEvent> key_data_out; |
| 546 | 553 |
| 547 for (size_t i = 0; i < key_data.size(); ++i) { | 554 for (size_t i = 0; i < key_data.size(); ++i) { |
| 548 chromeos::InputMethodEngine::KeyboardEvent event; | 555 chromeos::InputMethodEngineInterface::KeyboardEvent event; |
| 549 event.type = input_ime::KeyboardEvent::ToString(key_data[i]->type); | 556 event.type = input_ime::KeyboardEvent::ToString(key_data[i]->type); |
| 550 event.key = key_data[i]->key; | 557 event.key = key_data[i]->key; |
| 551 event.code = key_data[i]->code; | 558 event.code = key_data[i]->code; |
| 552 if (key_data[i]->alt_key) | 559 if (key_data[i]->alt_key) |
| 553 event.alt_key = *(key_data[i]->alt_key); | 560 event.alt_key = *(key_data[i]->alt_key); |
| 554 if (key_data[i]->ctrl_key) | 561 if (key_data[i]->ctrl_key) |
| 555 event.ctrl_key = *(key_data[i]->ctrl_key); | 562 event.ctrl_key = *(key_data[i]->ctrl_key); |
| 556 if (key_data[i]->shift_key) | 563 if (key_data[i]->shift_key) |
| 557 event.shift_key = *(key_data[i]->shift_key); | 564 event.shift_key = *(key_data[i]->shift_key); |
| 558 if (key_data[i]->caps_lock) | 565 if (key_data[i]->caps_lock) |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 632 | 639 |
| 633 if (modified) { | 640 if (modified) { |
| 634 engine->SetCandidateWindowProperty(properties_out); | 641 engine->SetCandidateWindowProperty(properties_out); |
| 635 } | 642 } |
| 636 | 643 |
| 637 SetResult(new base::FundamentalValue(true)); | 644 SetResult(new base::FundamentalValue(true)); |
| 638 | 645 |
| 639 return true; | 646 return true; |
| 640 } | 647 } |
| 641 | 648 |
| 642 #if defined(OS_CHROMEOS) | |
| 643 bool InputImeSetCandidatesFunction::RunImpl() { | 649 bool InputImeSetCandidatesFunction::RunImpl() { |
| 644 InputMethodEngineInterface* engine = | 650 InputMethodEngineInterface* engine = |
| 645 InputImeEventRouter::GetInstance()->GetActiveEngine(extension_id()); | 651 InputImeEventRouter::GetInstance()->GetActiveEngine(extension_id()); |
| 646 if (!engine) { | 652 if (!engine) { |
| 647 SetResult(new base::FundamentalValue(false)); | 653 SetResult(new base::FundamentalValue(false)); |
| 648 return true; | 654 return true; |
| 649 } | 655 } |
| 650 | 656 |
| 651 scoped_ptr<SetCandidates::Params> parent_params( | 657 scoped_ptr<SetCandidates::Params> parent_params( |
| 652 SetCandidates::Params::Create(*args_)); | 658 SetCandidates::Params::Create(*args_)); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 768 return true; | 774 return true; |
| 769 } | 775 } |
| 770 | 776 |
| 771 bool InputImeKeyEventHandledFunction::RunImpl() { | 777 bool InputImeKeyEventHandledFunction::RunImpl() { |
| 772 scoped_ptr<KeyEventHandled::Params> params( | 778 scoped_ptr<KeyEventHandled::Params> params( |
| 773 KeyEventHandled::Params::Create(*args_)); | 779 KeyEventHandled::Params::Create(*args_)); |
| 774 InputImeEventRouter::GetInstance()->OnKeyEventHandled( | 780 InputImeEventRouter::GetInstance()->OnKeyEventHandled( |
| 775 extension_id(), params->request_id, params->response); | 781 extension_id(), params->request_id, params->response); |
| 776 return true; | 782 return true; |
| 777 } | 783 } |
| 778 #endif | |
| 779 | 784 |
| 780 InputImeAPI::InputImeAPI(content::BrowserContext* context) | 785 InputImeAPI::InputImeAPI(content::BrowserContext* context) |
| 781 : profile_(Profile::FromBrowserContext(context)) { | 786 : profile_(Profile::FromBrowserContext(context)) { |
| 782 registrar_.Add(this, | 787 registrar_.Add(this, |
| 783 chrome::NOTIFICATION_EXTENSION_LOADED, | 788 chrome::NOTIFICATION_EXTENSION_LOADED, |
| 784 content::Source<Profile>(profile_)); | 789 content::Source<Profile>(profile_)); |
| 785 registrar_.Add(this, | 790 registrar_.Add(this, |
| 786 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, | 791 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, |
| 787 content::Source<Profile>(profile_)); | 792 content::Source<Profile>(profile_)); |
| 788 | 793 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 838 input_ime_event_router()->GetActiveEngine(details.extension_id); | 843 input_ime_event_router()->GetActiveEngine(details.extension_id); |
| 839 if (engine) | 844 if (engine) |
| 840 engine->NotifyImeReady(); | 845 engine->NotifyImeReady(); |
| 841 } | 846 } |
| 842 | 847 |
| 843 InputImeEventRouter* InputImeAPI::input_ime_event_router() { | 848 InputImeEventRouter* InputImeAPI::input_ime_event_router() { |
| 844 return InputImeEventRouter::GetInstance(); | 849 return InputImeEventRouter::GetInstance(); |
| 845 } | 850 } |
| 846 | 851 |
| 847 } // namespace extensions | 852 } // namespace extensions |
| OLD | NEW |