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

Unified Diff: chrome/browser/extensions/api/input_ime/input_ime_api.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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/input_ime/input_ime_api.cc
diff --git a/chrome/browser/extensions/api/input_ime/input_ime_api.cc b/chrome/browser/extensions/api/input_ime/input_ime_api.cc
index f3a87f18ace3fb15fcd8c351409924208934dc43..31dc26033cf676f4733be6b1a2989ec16e067567 100644
--- a/chrome/browser/extensions/api/input_ime/input_ime_api.cc
+++ b/chrome/browser/extensions/api/input_ime/input_ime_api.cc
@@ -10,6 +10,8 @@
namespace input_ime = extensions::api::input_ime;
namespace KeyEventHandled = extensions::api::input_ime::KeyEventHandled;
+namespace SetComposition = extensions::api::input_ime::SetComposition;
+namespace CommitText = extensions::api::input_ime::CommitText;
using ui::IMEEngineHandlerInterface;
using input_method::InputMethodEngineBase;
@@ -263,6 +265,70 @@ ExtensionFunction::ResponseAction InputImeKeyEventHandledFunction::Run() {
return RespondNow(NoArguments());
}
+ExtensionFunction::ResponseAction InputImeSetCompositionFunction::Run() {
+ bool success = false;
+ InputImeEventRouter* event_router =
+ GetInputImeEventRouter(Profile::FromBrowserContext(browser_context()));
+ InputMethodEngineBase* engine =
+ event_router ? event_router->GetActiveEngine(extension_id()) : nullptr;
+ if (engine) {
+ scoped_ptr<SetComposition::Params> parent_params(
+ SetComposition::Params::Create(*args_));
+ const SetComposition::Params::Parameters& params =
+ parent_params->parameters;
+ std::vector<InputMethodEngineBase::SegmentInfo> segments;
+ if (params.segments) {
+ const std::vector<
+ linked_ptr<SetComposition::Params::Parameters::SegmentsType>>&
+ segments_args = *params.segments;
+ for (const auto& segments_arg : segments_args) {
+ EXTENSION_FUNCTION_VALIDATE(segments_arg->style !=
+ input_ime::UNDERLINE_STYLE_NONE);
+ InputMethodEngineBase::SegmentInfo segment_info;
+ segment_info.start = segments_arg->start;
+ segment_info.end = segments_arg->end;
+ if (segments_arg->style == input_ime::UNDERLINE_STYLE_UNDERLINE) {
+ segment_info.style = InputMethodEngineBase::SEGMENT_STYLE_UNDERLINE;
+ } else if (segments_arg->style ==
+ input_ime::UNDERLINE_STYLE_DOUBLEUNDERLINE) {
+ segment_info.style =
+ InputMethodEngineBase::SEGMENT_STYLE_DOUBLE_UNDERLINE;
+ } else {
+ segment_info.style =
+ InputMethodEngineBase::SEGMENT_STYLE_NO_UNDERLINE;
+ }
+ segments.push_back(segment_info);
+ }
+ }
+ int selection_start =
+ params.selection_start ? *params.selection_start : params.cursor;
+ int selection_end =
+ params.selection_end ? *params.selection_end : params.cursor;
+ success = engine->SetComposition(params.context_id, params.text.c_str(),
+ selection_start, selection_end,
+ params.cursor, segments, &error_);
+ }
+ scoped_ptr<base::ListValue> output = SetComposition::Results::Create(success);
+ return RespondNow(ArgumentList(std::move(output)));
+}
+
+ExtensionFunction::ResponseAction InputImeCommitTextFunction::Run() {
+ bool success = false;
+ InputImeEventRouter* event_router =
+ GetInputImeEventRouter(Profile::FromBrowserContext(browser_context()));
+ InputMethodEngineBase* engine =
+ event_router ? event_router->GetActiveEngine(extension_id()) : nullptr;
+ if (engine) {
+ scoped_ptr<CommitText::Params> parent_params(
+ CommitText::Params::Create(*args_));
+ const CommitText::Params::Parameters& params = parent_params->parameters;
+ success =
+ engine->CommitText(params.context_id, params.text.c_str(), &error_);
+ }
+ scoped_ptr<base::ListValue> output = CommitText::Results::Create(success);
+ return RespondNow(ArgumentList(std::move(output)));
+}
+
InputImeAPI::InputImeAPI(content::BrowserContext* context)
: browser_context_(context), extension_registry_observer_(this) {
extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context_));

Powered by Google App Engine
This is Rietveld 408576698