Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(199)

Side by Side Diff: chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.cc

Issue 1657593007: Implement chrome.input.ime.setComposition/commitText API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use Xxx::Results::Create(). Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 17 matching lines...) Expand all
28 namespace DeleteSurroundingText = 28 namespace DeleteSurroundingText =
29 extensions::api::input_ime::DeleteSurroundingText; 29 extensions::api::input_ime::DeleteSurroundingText;
30 namespace UpdateMenuItems = extensions::api::input_ime::UpdateMenuItems; 30 namespace UpdateMenuItems = extensions::api::input_ime::UpdateMenuItems;
31 namespace SendKeyEvents = extensions::api::input_ime::SendKeyEvents; 31 namespace SendKeyEvents = extensions::api::input_ime::SendKeyEvents;
32 namespace HideInputView = extensions::api::input_ime::HideInputView; 32 namespace HideInputView = extensions::api::input_ime::HideInputView;
33 namespace SetMenuItems = extensions::api::input_ime::SetMenuItems; 33 namespace SetMenuItems = extensions::api::input_ime::SetMenuItems;
34 namespace SetCursorPosition = extensions::api::input_ime::SetCursorPosition; 34 namespace SetCursorPosition = extensions::api::input_ime::SetCursorPosition;
35 namespace SetCandidates = extensions::api::input_ime::SetCandidates; 35 namespace SetCandidates = extensions::api::input_ime::SetCandidates;
36 namespace SetCandidateWindowProperties = 36 namespace SetCandidateWindowProperties =
37 extensions::api::input_ime::SetCandidateWindowProperties; 37 extensions::api::input_ime::SetCandidateWindowProperties;
38 namespace CommitText = extensions::api::input_ime::CommitText;
39 namespace ClearComposition = extensions::api::input_ime::ClearComposition; 38 namespace ClearComposition = extensions::api::input_ime::ClearComposition;
40 namespace SetComposition = extensions::api::input_ime::SetComposition;
41 namespace OnCompositionBoundsChanged = 39 namespace OnCompositionBoundsChanged =
42 extensions::api::input_method_private::OnCompositionBoundsChanged; 40 extensions::api::input_method_private::OnCompositionBoundsChanged;
43 using ui::IMEEngineHandlerInterface; 41 using ui::IMEEngineHandlerInterface;
44 using input_method::InputMethodEngineBase; 42 using input_method::InputMethodEngineBase;
45 using chromeos::InputMethodEngine; 43 using chromeos::InputMethodEngine;
46 44
47 namespace { 45 namespace {
48 const char kErrorEngineNotAvailable[] = "Engine is not available"; 46 const char kErrorEngineNotAvailable[] = "Engine is not available";
49 const char kErrorSetMenuItemsFail[] = "Could not create menu Items"; 47 const char kErrorSetMenuItemsFail[] = "Could not create menu Items";
50 const char kErrorUpdateMenuItemsFail[] = "Could not update menu Items"; 48 const char kErrorUpdateMenuItemsFail[] = "Could not update menu Items";
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 } 337 }
340 338
341 InputMethodEngineBase* InputImeEventRouter::GetActiveEngine( 339 InputMethodEngineBase* InputImeEventRouter::GetActiveEngine(
342 const std::string& extension_id) { 340 const std::string& extension_id) {
343 std::map<std::string, InputMethodEngine*>::iterator it = 341 std::map<std::string, InputMethodEngine*>::iterator it =
344 engine_map_.find(extension_id); 342 engine_map_.find(extension_id);
345 return (it != engine_map_.end() && it->second->IsActive()) ? it->second 343 return (it != engine_map_.end() && it->second->IsActive()) ? it->second
346 : nullptr; 344 : nullptr;
347 } 345 }
348 346
349 bool InputImeSetCompositionFunction::RunSync() {
350 InputMethodEngine* engine = GetActiveEngine(
351 Profile::FromBrowserContext(browser_context()), extension_id());
352 if (!engine) {
353 SetResult(new base::FundamentalValue(false));
354 return true;
355 }
356
357 scoped_ptr<SetComposition::Params> parent_params(
358 SetComposition::Params::Create(*args_));
359 const SetComposition::Params::Parameters& params = parent_params->parameters;
360 std::vector<InputMethodEngineBase::SegmentInfo> segments;
361 if (params.segments) {
362 const std::vector<linked_ptr<
363 SetComposition::Params::Parameters::SegmentsType> >&
364 segments_args = *params.segments;
365 for (size_t i = 0; i < segments_args.size(); ++i) {
366 EXTENSION_FUNCTION_VALIDATE(
367 segments_args[i]->style !=
368 input_ime::UNDERLINE_STYLE_NONE);
369 segments.push_back(InputMethodEngineBase::SegmentInfo());
370 segments.back().start = segments_args[i]->start;
371 segments.back().end = segments_args[i]->end;
372 if (segments_args[i]->style ==
373 input_ime::UNDERLINE_STYLE_UNDERLINE) {
374 segments.back().style = InputMethodEngineBase::SEGMENT_STYLE_UNDERLINE;
375 } else if (segments_args[i]->style ==
376 input_ime::UNDERLINE_STYLE_DOUBLEUNDERLINE) {
377 segments.back().style =
378 InputMethodEngineBase::SEGMENT_STYLE_DOUBLE_UNDERLINE;
379 } else {
380 segments.back().style =
381 InputMethodEngineBase::SEGMENT_STYLE_NO_UNDERLINE;
382 }
383 }
384 }
385
386 int selection_start =
387 params.selection_start ? *params.selection_start : params.cursor;
388 int selection_end =
389 params.selection_end ? *params.selection_end : params.cursor;
390
391 SetResult(new base::FundamentalValue(
392 engine->SetComposition(params.context_id, params.text.c_str(),
393 selection_start, selection_end, params.cursor,
394 segments, &error_)));
395 return true;
396 }
397
398 bool InputImeClearCompositionFunction::RunSync() { 347 bool InputImeClearCompositionFunction::RunSync() {
399 InputMethodEngine* engine = GetActiveEngine( 348 InputMethodEngine* engine = GetActiveEngine(
400 Profile::FromBrowserContext(browser_context()), extension_id()); 349 Profile::FromBrowserContext(browser_context()), extension_id());
401 if (!engine) { 350 if (!engine) {
402 SetResult(new base::FundamentalValue(false)); 351 SetResult(new base::FundamentalValue(false));
403 return true; 352 return true;
404 } 353 }
405 354
406 scoped_ptr<ClearComposition::Params> parent_params( 355 scoped_ptr<ClearComposition::Params> parent_params(
407 ClearComposition::Params::Create(*args_)); 356 ClearComposition::Params::Create(*args_));
408 const ClearComposition::Params::Parameters& params = 357 const ClearComposition::Params::Parameters& params =
409 parent_params->parameters; 358 parent_params->parameters;
410 359
411 SetResult(new base::FundamentalValue( 360 SetResult(new base::FundamentalValue(
412 engine->ClearComposition(params.context_id, &error_))); 361 engine->ClearComposition(params.context_id, &error_)));
413 return true; 362 return true;
414 } 363 }
415 364
416 bool InputImeCommitTextFunction::RunSync() {
417 InputMethodEngine* engine = GetActiveEngine(
418 Profile::FromBrowserContext(browser_context()), extension_id());
419 if (!engine) {
420 SetResult(new base::FundamentalValue(false));
421 return true;
422 }
423
424 scoped_ptr<CommitText::Params> parent_params(
425 CommitText::Params::Create(*args_));
426 const CommitText::Params::Parameters& params =
427 parent_params->parameters;
428
429 SetResult(new base::FundamentalValue(
430 engine->CommitText(params.context_id, params.text.c_str(), &error_)));
431 return true;
432 }
433
434 bool InputImeHideInputViewFunction::RunAsync() { 365 bool InputImeHideInputViewFunction::RunAsync() {
435 InputMethodEngine* engine = GetActiveEngine( 366 InputMethodEngine* engine = GetActiveEngine(
436 Profile::FromBrowserContext(browser_context()), extension_id()); 367 Profile::FromBrowserContext(browser_context()), extension_id());
437 if (!engine) { 368 if (!engine) {
438 return true; 369 return true;
439 } 370 }
440 engine->HideInputView(); 371 engine->HideInputView();
441 return true; 372 return true;
442 } 373 }
443 374
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 return; 643 return;
713 InputMethodEngine* engine = 644 InputMethodEngine* engine =
714 GetActiveEngine(Profile::FromBrowserContext(details.browser_context), 645 GetActiveEngine(Profile::FromBrowserContext(details.browser_context),
715 details.extension_id); 646 details.extension_id);
716 // Notifies the IME extension for IME ready with onActivate/onFocus events. 647 // Notifies the IME extension for IME ready with onActivate/onFocus events.
717 if (engine) 648 if (engine)
718 engine->Enable(engine->GetActiveComponentId()); 649 engine->Enable(engine->GetActiveComponentId());
719 } 650 }
720 651
721 } // namespace extensions 652 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.h ('k') | chrome/browser/ui/input_method/input_method_engine.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698