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

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: Addressed Devlin's comments. 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 1ce5be01e3624331ff7ad2ac492af82b258dcead..de6b7f4491af4155e74bced9d5b4b9795134b5b4 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;
@@ -244,6 +246,12 @@ InputImeEventRouter* InputImeEventRouterFactory::GetRouter(Profile* profile) {
}
bool InputImeKeyEventHandledFunction::RunAsync() {
+ InputMethodEngineBase* engine =
+ GetInputImeEventRouter(Profile::FromBrowserContext(browser_context()))
+ ->GetActiveEngine(extension_id());
+ if (engine)
+ engine->KeyEventHandled();
Shu Chen 2016/02/04 08:00:46 Please merge the below OnKeyEventHandled() call in
Azure Wei 2016/02/04 11:57:21 Done. Issue 1664513008 was created to move all the
+
scoped_ptr<KeyEventHandled::Params> params(
KeyEventHandled::Params::Create(*args_));
GetInputImeEventRouter(Profile::FromBrowserContext(browser_context()))
@@ -251,6 +259,70 @@ bool InputImeKeyEventHandledFunction::RunAsync() {
return true;
}
+ExtensionFunction::ResponseAction InputImeSetCompositionFunction::Run() {
+ scoped_ptr<base::ListValue> output;
+ InputMethodEngineBase* engine =
+ GetInputImeEventRouter(Profile::FromBrowserContext(browser_context()))
+ ->GetActiveEngine(extension_id());
+ if (!engine) {
+ output = SetComposition::Results::Create(false);
+ } else {
+ 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;
+ output = SetComposition::Results::Create(engine->SetComposition(
+ params.context_id, params.text.c_str(), selection_start, selection_end,
+ params.cursor, segments, &error_));
+ }
+ return RespondNow(OneArgument(std::move(output)));
+}
+
+ExtensionFunction::ResponseAction InputImeCommitTextFunction::Run() {
+ scoped_ptr<base::ListValue> output;
+ InputMethodEngineBase* engine =
+ GetInputImeEventRouter(Profile::FromBrowserContext(browser_context()))
+ ->GetActiveEngine(extension_id());
+ if (!engine) {
+ output = CommitText::Results::Create(false);
+ } else {
+ scoped_ptr<CommitText::Params> parent_params(
+ CommitText::Params::Create(*args_));
+ const CommitText::Params::Parameters& params = parent_params->parameters;
+ output = CommitText::Results::Create(
+ engine->CommitText(params.context_id, params.text.c_str(), &error_));
+ }
+ return RespondNow(OneArgument(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