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

Unified Diff: chrome/browser/extensions/api/input_ime/input_ime_api.cc

Issue 641243005: Support a private event - inputMethodPrivate.onCompositionBoundsChanged so that component IME exten… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits + unit test Created 6 years, 2 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 0d0dea34c0f1618ee38dbfd735645659a6a4df9d..07d70126cf991b2a789b9dbb880ea560f8293d1e 100644
--- a/chrome/browser/extensions/api/input_ime/input_ime_api.cc
+++ b/chrome/browser/extensions/api/input_ime/input_ime_api.cc
@@ -46,6 +46,8 @@ namespace {
const char kErrorEngineNotAvailable[] = "Engine is not available";
const char kErrorSetMenuItemsFail[] = "Could not create menu Items";
const char kErrorUpdateMenuItemsFail[] = "Could not update menu Items";
+const char kOnCompositionBoundsChangedEventName[] =
+ "inputMethodPrivate.onCompositionBoundsChanged";
void SetMenuItemToMenu(const input_ime::MenuItem& input,
InputMethodEngineInterface::MenuItem* out) {
@@ -105,7 +107,8 @@ class ImeObserver : public InputMethodEngineInterface::Observer {
virtual ~ImeObserver() {}
virtual void OnActivate(const std::string& component_id) override {
- if (extension_id_.empty())
+ if (extension_id_.empty() ||
+ !HasListener(input_ime::OnActivate::kEventName))
return;
scoped_ptr<base::ListValue> args(input_ime::OnActivate::Create(
@@ -117,7 +120,8 @@ class ImeObserver : public InputMethodEngineInterface::Observer {
}
virtual void OnDeactivated(const std::string& component_id) override {
- if (extension_id_.empty())
+ if (extension_id_.empty() ||
+ !HasListener(input_ime::OnDeactivated::kEventName))
return;
scoped_ptr<base::ListValue> args(
@@ -129,7 +133,7 @@ class ImeObserver : public InputMethodEngineInterface::Observer {
virtual void OnFocus(
const InputMethodEngineInterface::InputContext& context) override {
- if (extension_id_.empty())
+ if (extension_id_.empty() || !HasListener(input_ime::OnFocus::kEventName))
return;
input_ime::InputContext context_value;
@@ -146,7 +150,7 @@ class ImeObserver : public InputMethodEngineInterface::Observer {
}
virtual void OnBlur(int context_id) override {
- if (extension_id_.empty())
+ if (extension_id_.empty() || !HasListener(input_ime::OnBlur::kEventName))
return;
scoped_ptr<base::ListValue> args(input_ime::OnBlur::Create(context_id));
@@ -157,7 +161,8 @@ class ImeObserver : public InputMethodEngineInterface::Observer {
virtual void OnInputContextUpdate(
const InputMethodEngineInterface::InputContext& context) override {
- if (extension_id_.empty())
+ if (extension_id_.empty() ||
+ !HasListener(input_ime::OnInputContextUpdate::kEventName))
return;
input_ime::InputContext context_value;
@@ -217,7 +222,8 @@ class ImeObserver : public InputMethodEngineInterface::Observer {
const std::string& component_id,
int candidate_id,
InputMethodEngineInterface::MouseButtonEvent button) override {
- if (extension_id_.empty())
+ if (extension_id_.empty() ||
+ !HasListener(input_ime::OnCandidateClicked::kEventName))
return;
input_ime::OnCandidateClicked::Button button_enum =
@@ -247,7 +253,8 @@ class ImeObserver : public InputMethodEngineInterface::Observer {
virtual void OnMenuItemActivated(const std::string& component_id,
const std::string& menu_id) override {
- if (extension_id_.empty())
+ if (extension_id_.empty() ||
+ !HasListener(input_ime::OnMenuItemActivated::kEventName))
return;
scoped_ptr<base::ListValue> args(
@@ -261,7 +268,8 @@ class ImeObserver : public InputMethodEngineInterface::Observer {
const std::string& text,
int cursor_pos,
int anchor_pos) override {
- if (extension_id_.empty())
+ if (extension_id_.empty() ||
+ !HasListener(input_ime::OnSurroundingTextChanged::kEventName))
return;
input_ime::OnSurroundingTextChanged::SurroundingInfo info;
@@ -276,8 +284,27 @@ class ImeObserver : public InputMethodEngineInterface::Observer {
args.Pass());
}
+ virtual void OnCompositionBoundsChanged(const gfx::Rect& bounds) override {
+ if (extension_id_.empty() ||
+ !HasListener(kOnCompositionBoundsChangedEventName))
+ return;
+
+ // Note: this is a private API event.
+ scoped_ptr<base::ListValue> args(new base::ListValue());
+ base::DictionaryValue* bounds_value = new base::DictionaryValue();
+ bounds_value->SetInteger("x", bounds.x());
+ bounds_value->SetInteger("y", bounds.y());
+ bounds_value->SetInteger("w", bounds.width());
+ bounds_value->SetInteger("h", bounds.height());
+ args->Append(bounds_value);
+
+ DispatchEventToExtension(extension_id_,
+ kOnCompositionBoundsChangedEventName,
+ args.Pass());
+ }
+
virtual void OnReset(const std::string& component_id) override {
- if (extension_id_.empty())
+ if (extension_id_.empty() || !HasListener(input_ime::OnReset::kEventName))
return;
scoped_ptr<base::ListValue> args(input_ime::OnReset::Create(component_id));
@@ -309,6 +336,11 @@ class ImeObserver : public InputMethodEngineInterface::Observer {
return false;
}
+ bool HasListener(const std::string& event_name) const {
+ return extensions::EventRouter::Get(
+ ProfileManager::GetActiveUserProfile())->HasEventListener(event_name);
+ }
+
// The component IME extensions need to know the current screen type (e.g.
// lock screen, login screen, etc.) so that its on-screen keyboard page
// won't open new windows/pages. See crbug.com/395621.

Powered by Google App Engine
This is Rietveld 408576698