| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 const IMEEngineHandlerInterface::InputContext& context) override { | 90 const IMEEngineHandlerInterface::InputContext& context) override { |
| 91 if (extension_id_.empty() || | 91 if (extension_id_.empty() || |
| 92 !HasListener(input_ime::OnInputContextUpdate::kEventName)) | 92 !HasListener(input_ime::OnInputContextUpdate::kEventName)) |
| 93 return; | 93 return; |
| 94 | 94 |
| 95 input_ime::InputContext context_value; | 95 input_ime::InputContext context_value; |
| 96 context_value.context_id = context.id; | 96 context_value.context_id = context.id; |
| 97 context_value.type = | 97 context_value.type = |
| 98 input_ime::ParseInputContextType(ConvertInputContextType(context)); | 98 input_ime::ParseInputContextType(ConvertInputContextType(context)); |
| 99 | 99 |
| 100 scoped_ptr<base::ListValue> args( | 100 std::unique_ptr<base::ListValue> args( |
| 101 input_ime::OnInputContextUpdate::Create(context_value)); | 101 input_ime::OnInputContextUpdate::Create(context_value)); |
| 102 | 102 |
| 103 DispatchEventToExtension( | 103 DispatchEventToExtension( |
| 104 extensions::events::INPUT_IME_ON_INPUT_CONTEXT_UPDATE, | 104 extensions::events::INPUT_IME_ON_INPUT_CONTEXT_UPDATE, |
| 105 input_ime::OnInputContextUpdate::kEventName, std::move(args)); | 105 input_ime::OnInputContextUpdate::kEventName, std::move(args)); |
| 106 } | 106 } |
| 107 | 107 |
| 108 void OnCandidateClicked( | 108 void OnCandidateClicked( |
| 109 const std::string& component_id, | 109 const std::string& component_id, |
| 110 int candidate_id, | 110 int candidate_id, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 123 button_enum = input_ime::MOUSE_BUTTON_RIGHT; | 123 button_enum = input_ime::MOUSE_BUTTON_RIGHT; |
| 124 break; | 124 break; |
| 125 | 125 |
| 126 case InputMethodEngineBase::MOUSE_BUTTON_LEFT: | 126 case InputMethodEngineBase::MOUSE_BUTTON_LEFT: |
| 127 // Default to left. | 127 // Default to left. |
| 128 default: | 128 default: |
| 129 button_enum = input_ime::MOUSE_BUTTON_LEFT; | 129 button_enum = input_ime::MOUSE_BUTTON_LEFT; |
| 130 break; | 130 break; |
| 131 } | 131 } |
| 132 | 132 |
| 133 scoped_ptr<base::ListValue> args(input_ime::OnCandidateClicked::Create( | 133 std::unique_ptr<base::ListValue> args(input_ime::OnCandidateClicked::Create( |
| 134 component_id, candidate_id, button_enum)); | 134 component_id, candidate_id, button_enum)); |
| 135 | 135 |
| 136 DispatchEventToExtension(extensions::events::INPUT_IME_ON_CANDIDATE_CLICKED, | 136 DispatchEventToExtension(extensions::events::INPUT_IME_ON_CANDIDATE_CLICKED, |
| 137 input_ime::OnCandidateClicked::kEventName, | 137 input_ime::OnCandidateClicked::kEventName, |
| 138 std::move(args)); | 138 std::move(args)); |
| 139 } | 139 } |
| 140 | 140 |
| 141 void OnMenuItemActivated(const std::string& component_id, | 141 void OnMenuItemActivated(const std::string& component_id, |
| 142 const std::string& menu_id) override { | 142 const std::string& menu_id) override { |
| 143 if (extension_id_.empty() || | 143 if (extension_id_.empty() || |
| 144 !HasListener(input_ime::OnMenuItemActivated::kEventName)) | 144 !HasListener(input_ime::OnMenuItemActivated::kEventName)) |
| 145 return; | 145 return; |
| 146 | 146 |
| 147 scoped_ptr<base::ListValue> args( | 147 std::unique_ptr<base::ListValue> args( |
| 148 input_ime::OnMenuItemActivated::Create(component_id, menu_id)); | 148 input_ime::OnMenuItemActivated::Create(component_id, menu_id)); |
| 149 | 149 |
| 150 DispatchEventToExtension( | 150 DispatchEventToExtension( |
| 151 extensions::events::INPUT_IME_ON_MENU_ITEM_ACTIVATED, | 151 extensions::events::INPUT_IME_ON_MENU_ITEM_ACTIVATED, |
| 152 input_ime::OnMenuItemActivated::kEventName, std::move(args)); | 152 input_ime::OnMenuItemActivated::kEventName, std::move(args)); |
| 153 } | 153 } |
| 154 | 154 |
| 155 void OnCompositionBoundsChanged( | 155 void OnCompositionBoundsChanged( |
| 156 const std::vector<gfx::Rect>& bounds) override { | 156 const std::vector<gfx::Rect>& bounds) override { |
| 157 if (extension_id_.empty() || | 157 if (extension_id_.empty() || |
| 158 !HasListener(OnCompositionBoundsChanged::kEventName)) | 158 !HasListener(OnCompositionBoundsChanged::kEventName)) |
| 159 return; | 159 return; |
| 160 | 160 |
| 161 // Note: this is a private API event. | 161 // Note: this is a private API event. |
| 162 base::ListValue* bounds_list = new base::ListValue(); | 162 base::ListValue* bounds_list = new base::ListValue(); |
| 163 for (size_t i = 0; i < bounds.size(); ++i) { | 163 for (size_t i = 0; i < bounds.size(); ++i) { |
| 164 base::DictionaryValue* bounds_value = new base::DictionaryValue(); | 164 base::DictionaryValue* bounds_value = new base::DictionaryValue(); |
| 165 bounds_value->SetInteger("x", bounds[i].x()); | 165 bounds_value->SetInteger("x", bounds[i].x()); |
| 166 bounds_value->SetInteger("y", bounds[i].y()); | 166 bounds_value->SetInteger("y", bounds[i].y()); |
| 167 bounds_value->SetInteger("w", bounds[i].width()); | 167 bounds_value->SetInteger("w", bounds[i].width()); |
| 168 bounds_value->SetInteger("h", bounds[i].height()); | 168 bounds_value->SetInteger("h", bounds[i].height()); |
| 169 bounds_list->Append(bounds_value); | 169 bounds_list->Append(bounds_value); |
| 170 } | 170 } |
| 171 | 171 |
| 172 if (bounds_list->GetSize() <= 0) | 172 if (bounds_list->GetSize() <= 0) |
| 173 return; | 173 return; |
| 174 scoped_ptr<base::ListValue> args(new base::ListValue()); | 174 std::unique_ptr<base::ListValue> args(new base::ListValue()); |
| 175 | 175 |
| 176 // The old extension code uses the first parameter to get the bounds of the | 176 // The old extension code uses the first parameter to get the bounds of the |
| 177 // first composition character, so for backward compatibility, add it here. | 177 // first composition character, so for backward compatibility, add it here. |
| 178 base::Value* first_value = NULL; | 178 base::Value* first_value = NULL; |
| 179 if (bounds_list->Get(0, &first_value)) | 179 if (bounds_list->Get(0, &first_value)) |
| 180 args->Append(first_value->DeepCopy()); | 180 args->Append(first_value->DeepCopy()); |
| 181 args->Append(bounds_list); | 181 args->Append(bounds_list); |
| 182 | 182 |
| 183 DispatchEventToExtension( | 183 DispatchEventToExtension( |
| 184 extensions::events::INPUT_METHOD_PRIVATE_ON_COMPOSITION_BOUNDS_CHANGED, | 184 extensions::events::INPUT_METHOD_PRIVATE_ON_COMPOSITION_BOUNDS_CHANGED, |
| 185 OnCompositionBoundsChanged::kEventName, std::move(args)); | 185 OnCompositionBoundsChanged::kEventName, std::move(args)); |
| 186 } | 186 } |
| 187 | 187 |
| 188 private: | 188 private: |
| 189 // ui::ImeObserver overrides. | 189 // ui::ImeObserver overrides. |
| 190 void DispatchEventToExtension( | 190 void DispatchEventToExtension( |
| 191 extensions::events::HistogramValue histogram_value, | 191 extensions::events::HistogramValue histogram_value, |
| 192 const std::string& event_name, | 192 const std::string& event_name, |
| 193 scoped_ptr<base::ListValue> args) override { | 193 std::unique_ptr<base::ListValue> args) override { |
| 194 if (event_name != input_ime::OnActivate::kEventName) { | 194 if (event_name != input_ime::OnActivate::kEventName) { |
| 195 // For suspended IME extension (e.g. XKB extension), don't awake it by IME | 195 // For suspended IME extension (e.g. XKB extension), don't awake it by IME |
| 196 // events except onActivate. The IME extension should be awake by other | 196 // events except onActivate. The IME extension should be awake by other |
| 197 // events (e.g. runtime.onMessage) from its other pages. | 197 // events (e.g. runtime.onMessage) from its other pages. |
| 198 // This is to save memory for steady state Chrome OS on which the users | 198 // This is to save memory for steady state Chrome OS on which the users |
| 199 // don't want any IME features. | 199 // don't want any IME features. |
| 200 extensions::ExtensionSystem* extension_system = | 200 extensions::ExtensionSystem* extension_system = |
| 201 extensions::ExtensionSystem::Get(profile_); | 201 extensions::ExtensionSystem::Get(profile_); |
| 202 if (extension_system) { | 202 if (extension_system) { |
| 203 const extensions::Extension* extension = | 203 const extensions::Extension* extension = |
| 204 extension_system->extension_service()->GetExtensionById( | 204 extension_system->extension_service()->GetExtensionById( |
| 205 extension_id_, false /* include_disabled */); | 205 extension_id_, false /* include_disabled */); |
| 206 if (!extension) | 206 if (!extension) |
| 207 return; | 207 return; |
| 208 extensions::ProcessManager* process_manager = | 208 extensions::ProcessManager* process_manager = |
| 209 extensions::ProcessManager::Get(profile_); | 209 extensions::ProcessManager::Get(profile_); |
| 210 if (extensions::BackgroundInfo::HasBackgroundPage(extension) && | 210 if (extensions::BackgroundInfo::HasBackgroundPage(extension) && |
| 211 !process_manager->GetBackgroundHostForExtension(extension_id_)) { | 211 !process_manager->GetBackgroundHostForExtension(extension_id_)) { |
| 212 return; | 212 return; |
| 213 } | 213 } |
| 214 } | 214 } |
| 215 } | 215 } |
| 216 | 216 |
| 217 scoped_ptr<extensions::Event> event( | 217 std::unique_ptr<extensions::Event> event( |
| 218 new extensions::Event(histogram_value, event_name, std::move(args))); | 218 new extensions::Event(histogram_value, event_name, std::move(args))); |
| 219 event->restrict_to_browser_context = profile_; | 219 event->restrict_to_browser_context = profile_; |
| 220 extensions::EventRouter::Get(profile_) | 220 extensions::EventRouter::Get(profile_) |
| 221 ->DispatchEventToExtension(extension_id_, std::move(event)); | 221 ->DispatchEventToExtension(extension_id_, std::move(event)); |
| 222 } | 222 } |
| 223 | 223 |
| 224 // The component IME extensions need to know the current screen type (e.g. | 224 // The component IME extensions need to know the current screen type (e.g. |
| 225 // lock screen, login screen, etc.) so that its on-screen keyboard page | 225 // lock screen, login screen, etc.) so that its on-screen keyboard page |
| 226 // won't open new windows/pages. See crbug.com/395621. | 226 // won't open new windows/pages. See crbug.com/395621. |
| 227 std::string GetCurrentScreenType() override { | 227 std::string GetCurrentScreenType() override { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 } | 309 } |
| 310 | 310 |
| 311 Profile* profile = GetProfile(); | 311 Profile* profile = GetProfile(); |
| 312 | 312 |
| 313 if (chromeos::input_method::InputMethodManager::Get()->GetUISessionState() == | 313 if (chromeos::input_method::InputMethodManager::Get()->GetUISessionState() == |
| 314 chromeos::input_method::InputMethodManager::STATE_LOGIN_SCREEN && | 314 chromeos::input_method::InputMethodManager::STATE_LOGIN_SCREEN && |
| 315 profile->HasOffTheRecordProfile()) { | 315 profile->HasOffTheRecordProfile()) { |
| 316 profile = profile->GetOffTheRecordProfile(); | 316 profile = profile->GetOffTheRecordProfile(); |
| 317 } | 317 } |
| 318 | 318 |
| 319 scoped_ptr<InputMethodEngineBase::Observer> observer( | 319 std::unique_ptr<InputMethodEngineBase::Observer> observer( |
| 320 new ImeObserverChromeOS(extension_id, profile)); | 320 new ImeObserverChromeOS(extension_id, profile)); |
| 321 chromeos::InputMethodEngine* engine = new chromeos::InputMethodEngine(); | 321 chromeos::InputMethodEngine* engine = new chromeos::InputMethodEngine(); |
| 322 engine->Initialize(std::move(observer), extension_id.c_str(), profile); | 322 engine->Initialize(std::move(observer), extension_id.c_str(), profile); |
| 323 engine_map_[extension_id] = engine; | 323 engine_map_[extension_id] = engine; |
| 324 chromeos::UserSessionManager::GetInstance() | 324 chromeos::UserSessionManager::GetInstance() |
| 325 ->GetDefaultIMEState(profile) | 325 ->GetDefaultIMEState(profile) |
| 326 ->AddInputMethodExtension(extension_id, descriptors, engine); | 326 ->AddInputMethodExtension(extension_id, descriptors, engine); |
| 327 | 327 |
| 328 return true; | 328 return true; |
| 329 } | 329 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 357 } | 357 } |
| 358 | 358 |
| 359 bool InputImeClearCompositionFunction::RunSync() { | 359 bool InputImeClearCompositionFunction::RunSync() { |
| 360 InputMethodEngine* engine = GetActiveEngine( | 360 InputMethodEngine* engine = GetActiveEngine( |
| 361 Profile::FromBrowserContext(browser_context()), extension_id()); | 361 Profile::FromBrowserContext(browser_context()), extension_id()); |
| 362 if (!engine) { | 362 if (!engine) { |
| 363 SetResult(new base::FundamentalValue(false)); | 363 SetResult(new base::FundamentalValue(false)); |
| 364 return true; | 364 return true; |
| 365 } | 365 } |
| 366 | 366 |
| 367 scoped_ptr<ClearComposition::Params> parent_params( | 367 std::unique_ptr<ClearComposition::Params> parent_params( |
| 368 ClearComposition::Params::Create(*args_)); | 368 ClearComposition::Params::Create(*args_)); |
| 369 const ClearComposition::Params::Parameters& params = | 369 const ClearComposition::Params::Parameters& params = |
| 370 parent_params->parameters; | 370 parent_params->parameters; |
| 371 | 371 |
| 372 SetResult(new base::FundamentalValue( | 372 SetResult(new base::FundamentalValue( |
| 373 engine->ClearComposition(params.context_id, &error_))); | 373 engine->ClearComposition(params.context_id, &error_))); |
| 374 return true; | 374 return true; |
| 375 } | 375 } |
| 376 | 376 |
| 377 bool InputImeHideInputViewFunction::RunAsync() { | 377 bool InputImeHideInputViewFunction::RunAsync() { |
| 378 InputMethodEngine* engine = GetActiveEngine( | 378 InputMethodEngine* engine = GetActiveEngine( |
| 379 Profile::FromBrowserContext(browser_context()), extension_id()); | 379 Profile::FromBrowserContext(browser_context()), extension_id()); |
| 380 if (!engine) { | 380 if (!engine) { |
| 381 return true; | 381 return true; |
| 382 } | 382 } |
| 383 engine->HideInputView(); | 383 engine->HideInputView(); |
| 384 return true; | 384 return true; |
| 385 } | 385 } |
| 386 | 386 |
| 387 bool InputImeSetCandidateWindowPropertiesFunction::RunSync() { | 387 bool InputImeSetCandidateWindowPropertiesFunction::RunSync() { |
| 388 scoped_ptr<SetCandidateWindowProperties::Params> parent_params( | 388 std::unique_ptr<SetCandidateWindowProperties::Params> parent_params( |
| 389 SetCandidateWindowProperties::Params::Create(*args_)); | 389 SetCandidateWindowProperties::Params::Create(*args_)); |
| 390 const SetCandidateWindowProperties::Params::Parameters& | 390 const SetCandidateWindowProperties::Params::Parameters& |
| 391 params = parent_params->parameters; | 391 params = parent_params->parameters; |
| 392 | 392 |
| 393 InputImeEventRouter* event_router = | 393 InputImeEventRouter* event_router = |
| 394 GetInputImeEventRouter(Profile::FromBrowserContext(browser_context())); | 394 GetInputImeEventRouter(Profile::FromBrowserContext(browser_context())); |
| 395 InputMethodEngine* engine = | 395 InputMethodEngine* engine = |
| 396 event_router ? event_router->GetEngine(extension_id(), params.engine_id) | 396 event_router ? event_router->GetEngine(extension_id(), params.engine_id) |
| 397 : nullptr; | 397 : nullptr; |
| 398 if (!engine) { | 398 if (!engine) { |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 } | 457 } |
| 458 | 458 |
| 459 bool InputImeSetCandidatesFunction::RunSync() { | 459 bool InputImeSetCandidatesFunction::RunSync() { |
| 460 InputMethodEngine* engine = GetActiveEngine( | 460 InputMethodEngine* engine = GetActiveEngine( |
| 461 Profile::FromBrowserContext(browser_context()), extension_id()); | 461 Profile::FromBrowserContext(browser_context()), extension_id()); |
| 462 if (!engine) { | 462 if (!engine) { |
| 463 SetResult(new base::FundamentalValue(false)); | 463 SetResult(new base::FundamentalValue(false)); |
| 464 return true; | 464 return true; |
| 465 } | 465 } |
| 466 | 466 |
| 467 scoped_ptr<SetCandidates::Params> parent_params( | 467 std::unique_ptr<SetCandidates::Params> parent_params( |
| 468 SetCandidates::Params::Create(*args_)); | 468 SetCandidates::Params::Create(*args_)); |
| 469 const SetCandidates::Params::Parameters& params = | 469 const SetCandidates::Params::Parameters& params = |
| 470 parent_params->parameters; | 470 parent_params->parameters; |
| 471 | 471 |
| 472 std::vector<InputMethodEngine::Candidate> candidates_out; | 472 std::vector<InputMethodEngine::Candidate> candidates_out; |
| 473 for (const auto& candidate_in : params.candidates) { | 473 for (const auto& candidate_in : params.candidates) { |
| 474 candidates_out.push_back(InputMethodEngine::Candidate()); | 474 candidates_out.push_back(InputMethodEngine::Candidate()); |
| 475 candidates_out.back().value = candidate_in.candidate; | 475 candidates_out.back().value = candidate_in.candidate; |
| 476 candidates_out.back().id = candidate_in.id; | 476 candidates_out.back().id = candidate_in.id; |
| 477 if (candidate_in.label) | 477 if (candidate_in.label) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 490 } | 490 } |
| 491 | 491 |
| 492 bool InputImeSetCursorPositionFunction::RunSync() { | 492 bool InputImeSetCursorPositionFunction::RunSync() { |
| 493 InputMethodEngine* engine = GetActiveEngine( | 493 InputMethodEngine* engine = GetActiveEngine( |
| 494 Profile::FromBrowserContext(browser_context()), extension_id()); | 494 Profile::FromBrowserContext(browser_context()), extension_id()); |
| 495 if (!engine) { | 495 if (!engine) { |
| 496 SetResult(new base::FundamentalValue(false)); | 496 SetResult(new base::FundamentalValue(false)); |
| 497 return true; | 497 return true; |
| 498 } | 498 } |
| 499 | 499 |
| 500 scoped_ptr<SetCursorPosition::Params> parent_params( | 500 std::unique_ptr<SetCursorPosition::Params> parent_params( |
| 501 SetCursorPosition::Params::Create(*args_)); | 501 SetCursorPosition::Params::Create(*args_)); |
| 502 const SetCursorPosition::Params::Parameters& params = | 502 const SetCursorPosition::Params::Parameters& params = |
| 503 parent_params->parameters; | 503 parent_params->parameters; |
| 504 | 504 |
| 505 SetResult(new base::FundamentalValue( | 505 SetResult(new base::FundamentalValue( |
| 506 engine->SetCursorPosition(params.context_id, params.candidate_id, | 506 engine->SetCursorPosition(params.context_id, params.candidate_id, |
| 507 &error_))); | 507 &error_))); |
| 508 return true; | 508 return true; |
| 509 } | 509 } |
| 510 | 510 |
| 511 bool InputImeSetMenuItemsFunction::RunSync() { | 511 bool InputImeSetMenuItemsFunction::RunSync() { |
| 512 scoped_ptr<SetMenuItems::Params> parent_params( | 512 std::unique_ptr<SetMenuItems::Params> parent_params( |
| 513 SetMenuItems::Params::Create(*args_)); | 513 SetMenuItems::Params::Create(*args_)); |
| 514 const SetMenuItems::Params::Parameters& params = | 514 const SetMenuItems::Params::Parameters& params = |
| 515 parent_params->parameters; | 515 parent_params->parameters; |
| 516 | 516 |
| 517 InputImeEventRouter* event_router = | 517 InputImeEventRouter* event_router = |
| 518 GetInputImeEventRouter(Profile::FromBrowserContext(browser_context())); | 518 GetInputImeEventRouter(Profile::FromBrowserContext(browser_context())); |
| 519 InputMethodEngine* engine = | 519 InputMethodEngine* engine = |
| 520 event_router ? event_router->GetEngine(extension_id(), params.engine_id) | 520 event_router ? event_router->GetEngine(extension_id(), params.engine_id) |
| 521 : nullptr; | 521 : nullptr; |
| 522 if (!engine) { | 522 if (!engine) { |
| 523 error_ = kErrorEngineNotAvailable; | 523 error_ = kErrorEngineNotAvailable; |
| 524 return false; | 524 return false; |
| 525 } | 525 } |
| 526 | 526 |
| 527 std::vector<chromeos::input_method::InputMethodManager::MenuItem> items_out; | 527 std::vector<chromeos::input_method::InputMethodManager::MenuItem> items_out; |
| 528 for (const input_ime::MenuItem& item_in : params.items) { | 528 for (const input_ime::MenuItem& item_in : params.items) { |
| 529 items_out.push_back(chromeos::input_method::InputMethodManager::MenuItem()); | 529 items_out.push_back(chromeos::input_method::InputMethodManager::MenuItem()); |
| 530 SetMenuItemToMenu(item_in, &items_out.back()); | 530 SetMenuItemToMenu(item_in, &items_out.back()); |
| 531 } | 531 } |
| 532 | 532 |
| 533 if (!engine->SetMenuItems(items_out)) | 533 if (!engine->SetMenuItems(items_out)) |
| 534 error_ = kErrorSetMenuItemsFail; | 534 error_ = kErrorSetMenuItemsFail; |
| 535 return true; | 535 return true; |
| 536 } | 536 } |
| 537 | 537 |
| 538 bool InputImeUpdateMenuItemsFunction::RunSync() { | 538 bool InputImeUpdateMenuItemsFunction::RunSync() { |
| 539 scoped_ptr<UpdateMenuItems::Params> parent_params( | 539 std::unique_ptr<UpdateMenuItems::Params> parent_params( |
| 540 UpdateMenuItems::Params::Create(*args_)); | 540 UpdateMenuItems::Params::Create(*args_)); |
| 541 const UpdateMenuItems::Params::Parameters& params = | 541 const UpdateMenuItems::Params::Parameters& params = |
| 542 parent_params->parameters; | 542 parent_params->parameters; |
| 543 | 543 |
| 544 InputImeEventRouter* event_router = | 544 InputImeEventRouter* event_router = |
| 545 GetInputImeEventRouter(Profile::FromBrowserContext(browser_context())); | 545 GetInputImeEventRouter(Profile::FromBrowserContext(browser_context())); |
| 546 InputMethodEngine* engine = | 546 InputMethodEngine* engine = |
| 547 event_router ? event_router->GetEngine(extension_id(), params.engine_id) | 547 event_router ? event_router->GetEngine(extension_id(), params.engine_id) |
| 548 : nullptr; | 548 : nullptr; |
| 549 if (!engine) { | 549 if (!engine) { |
| 550 error_ = kErrorEngineNotAvailable; | 550 error_ = kErrorEngineNotAvailable; |
| 551 return false; | 551 return false; |
| 552 } | 552 } |
| 553 | 553 |
| 554 std::vector<chromeos::input_method::InputMethodManager::MenuItem> items_out; | 554 std::vector<chromeos::input_method::InputMethodManager::MenuItem> items_out; |
| 555 for (const input_ime::MenuItem& item_in : params.items) { | 555 for (const input_ime::MenuItem& item_in : params.items) { |
| 556 items_out.push_back(chromeos::input_method::InputMethodManager::MenuItem()); | 556 items_out.push_back(chromeos::input_method::InputMethodManager::MenuItem()); |
| 557 SetMenuItemToMenu(item_in, &items_out.back()); | 557 SetMenuItemToMenu(item_in, &items_out.back()); |
| 558 } | 558 } |
| 559 | 559 |
| 560 if (!engine->UpdateMenuItems(items_out)) | 560 if (!engine->UpdateMenuItems(items_out)) |
| 561 error_ = kErrorUpdateMenuItemsFail; | 561 error_ = kErrorUpdateMenuItemsFail; |
| 562 return true; | 562 return true; |
| 563 } | 563 } |
| 564 | 564 |
| 565 bool InputImeDeleteSurroundingTextFunction::RunSync() { | 565 bool InputImeDeleteSurroundingTextFunction::RunSync() { |
| 566 scoped_ptr<DeleteSurroundingText::Params> parent_params( | 566 std::unique_ptr<DeleteSurroundingText::Params> parent_params( |
| 567 DeleteSurroundingText::Params::Create(*args_)); | 567 DeleteSurroundingText::Params::Create(*args_)); |
| 568 const DeleteSurroundingText::Params::Parameters& params = | 568 const DeleteSurroundingText::Params::Parameters& params = |
| 569 parent_params->parameters; | 569 parent_params->parameters; |
| 570 | 570 |
| 571 InputImeEventRouter* event_router = | 571 InputImeEventRouter* event_router = |
| 572 GetInputImeEventRouter(Profile::FromBrowserContext(browser_context())); | 572 GetInputImeEventRouter(Profile::FromBrowserContext(browser_context())); |
| 573 InputMethodEngine* engine = | 573 InputMethodEngine* engine = |
| 574 event_router ? event_router->GetEngine(extension_id(), params.engine_id) | 574 event_router ? event_router->GetEngine(extension_id(), params.engine_id) |
| 575 : nullptr; | 575 : nullptr; |
| 576 if (!engine) { | 576 if (!engine) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 590 ->GetActiveIMEState() | 590 ->GetActiveIMEState() |
| 591 ->GetCurrentInputMethod(); | 591 ->GetCurrentInputMethod(); |
| 592 std::string active_extension_id = | 592 std::string active_extension_id = |
| 593 chromeos::extension_ime_util::GetExtensionIDFromInputMethodID( | 593 chromeos::extension_ime_util::GetExtensionIDFromInputMethodID( |
| 594 current_input_method.id()); | 594 current_input_method.id()); |
| 595 InputMethodEngine* engine = GetActiveEngine( | 595 InputMethodEngine* engine = GetActiveEngine( |
| 596 Profile::FromBrowserContext(browser_context()), active_extension_id); | 596 Profile::FromBrowserContext(browser_context()), active_extension_id); |
| 597 if (!engine) | 597 if (!engine) |
| 598 return RespondNow(Error(kErrorEngineNotAvailable)); | 598 return RespondNow(Error(kErrorEngineNotAvailable)); |
| 599 | 599 |
| 600 scoped_ptr<NotifyImeMenuItemActivated::Params> params( | 600 std::unique_ptr<NotifyImeMenuItemActivated::Params> params( |
| 601 NotifyImeMenuItemActivated::Params::Create(*args_)); | 601 NotifyImeMenuItemActivated::Params::Create(*args_)); |
| 602 if (params->engine_id != engine->GetActiveComponentId()) | 602 if (params->engine_id != engine->GetActiveComponentId()) |
| 603 return RespondNow(Error(kErrorEngineNotActive)); | 603 return RespondNow(Error(kErrorEngineNotActive)); |
| 604 engine->PropertyActivate(params->name); | 604 engine->PropertyActivate(params->name); |
| 605 return RespondNow(NoArguments()); | 605 return RespondNow(NoArguments()); |
| 606 } | 606 } |
| 607 | 607 |
| 608 void InputImeAPI::OnExtensionLoaded(content::BrowserContext* browser_context, | 608 void InputImeAPI::OnExtensionLoaded(content::BrowserContext* browser_context, |
| 609 const Extension* extension) { | 609 const Extension* extension) { |
| 610 const std::vector<InputComponentInfo>* input_components = | 610 const std::vector<InputComponentInfo>* input_components = |
| (...skipping 24 matching lines...) Expand all Loading... |
| 635 return; | 635 return; |
| 636 InputMethodEngine* engine = | 636 InputMethodEngine* engine = |
| 637 GetActiveEngine(Profile::FromBrowserContext(details.browser_context), | 637 GetActiveEngine(Profile::FromBrowserContext(details.browser_context), |
| 638 details.extension_id); | 638 details.extension_id); |
| 639 // Notifies the IME extension for IME ready with onActivate/onFocus events. | 639 // Notifies the IME extension for IME ready with onActivate/onFocus events. |
| 640 if (engine) | 640 if (engine) |
| 641 engine->Enable(engine->GetActiveComponentId()); | 641 engine->Enable(engine->GetActiveComponentId()); |
| 642 } | 642 } |
| 643 | 643 |
| 644 } // namespace extensions | 644 } // namespace extensions |
| OLD | NEW |