Index: chrome/browser/chromeos/input_method/input_method_manager_impl.cc |
diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc |
index 834bb1e9c63b4a72bf17aeae2f70317a3a6ab22b..bd20ea8eb219a4f87d052aad36b07ae6d3343dd1 100644 |
--- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc |
+++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc |
@@ -12,7 +12,9 @@ |
#include <sstream> |
#include <utility> |
+#include "ash/shell.h" |
#include "base/bind.h" |
+#include "base/feature_list.h" |
#include "base/hash.h" |
#include "base/location.h" |
#include "base/metrics/histogram_macros.h" |
@@ -30,6 +32,7 @@ |
#include "chrome/browser/chromeos/profiles/profile_helper.h" |
#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/ui/ash/ash_util.h" |
+#include "chrome/common/chrome_features.h" |
#include "chrome/common/pref_names.h" |
#include "components/prefs/pref_service.h" |
#include "components/user_manager/user_manager.h" |
@@ -1213,5 +1216,46 @@ void InputMethodManagerImpl::MaybeNotifyImeMenuActivationChanged() { |
is_ime_menu_activated_); |
} |
+void InputMethodManagerImpl::OverrideKeyboardUrlRef(const std::string& keyset) { |
+ GURL url = keyboard::GetOverrideContentUrl(); |
+ |
+ // If fails to find ref or tag "id" in the ref, it means the current IME is |
+ // not system IME, and we don't support show emoji, handwriting or voice |
+ // input for such IME extension. |
+ if (!url.has_ref()) |
+ return; |
+ std::string overridden_ref = url.ref(); |
+ auto i = overridden_ref.find("id"); |
+ if (i == std::string::npos) |
+ return; |
+ |
+ if (keyset.empty()) { |
+ keyboard::SetOverrideContentUrl( |
+ GetActiveIMEState()->GetCurrentInputMethod().input_view_url()); |
+ return; |
+ } |
+ |
+ // For system IME extension, the input view url is overridden as: |
+ // chrome-extension://${extension_id}/inputview.html#id=us.compact.qwerty |
+ // &language=en-US&passwordLayout=us.compact.qwerty&name=keyboard_us |
+ // Fow emoji and handwriting input, we replace the id=${keyset} part with |
+ // desired keyset like: id=emoji; For voice, we append ".voice" to the end of |
+ // id like: id=${keyset}.voice. |
+ auto j = overridden_ref.find("&", i + 1); |
+ if (keyset == "voice") { |
+ overridden_ref.replace(j, 0, "." + keyset); |
+ } else { |
+ overridden_ref.replace(i, j - i, "id=" + keyset); |
+ } |
+ |
+ GURL::Replacements replacements; |
+ replacements.SetRefStr(overridden_ref); |
+ keyboard::SetOverrideContentUrl(url.ReplaceComponents(replacements)); |
+} |
+ |
+bool InputMethodManagerImpl::IsEmojiHandwritingVoiceOnImeMenuEnabled() { |
+ return base::FeatureList::IsEnabled(features::kEHVInputOnImeMenu); |
+} |
+ |
} // namespace input_method |
} // namespace chromeos |