Commit 0f697af9 authored by Bao-Duy Tran's avatar Bao-Duy Tran Committed by Chromium LUCI CQ

Inject login_layout_set to ComponentExtensionIMEManager via delegate.

Certain unit tests are having environment-specific failures due to mixed
usage of hermetic test data and non-hermetic prod configs. This refactor
is in preparation for fixing such non-hermetic-ness.

Besides, it's also in preparation for further reduction in usage of
deprecated input_methods.txt [1][2] (remnant from before the migration
to extension-based input methods circa 2011), towards its full removal.
Nowadays the canonical configs for 1P input methods on CrOS is
google_xkb_manifest.json [3].

[1] https://source.chromium.org/chromium/chromium/src/+/master:chromeos/ime/input_methods.txt;drc=5ab33d25bc676b63e4afbcfade6f9265a5f5a3ea
[2] https://source.chromium.org/chromium/chromium/src/+/master:chromeos/ime/gen_input_methods.py;drc=0303b222088853ce1c0af2bbc7f47937746eda97
[3] https://source.chromium.org/chromium/chromium/src/+/master:chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json;drc=03ae97c2c311ac00d3e9a59203f4921c9e87e707

Bug: 970790, 1134526
Change-Id: I622bb36e8cd054d26431870cb2d0e70a3e1fe472
Cq-Include-Trybots: luci.chrome.try:linux-chromeos-chrome;luci.chromium.try:linux-chromeos-rel,linux-chromeos-dbg;luci.chromium.try:linux_chromium_chromeos_asan_rel_ng,linux_chromium_chromeos_msan_rel_ng
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2554276
Commit-Queue: Bao-Duy Tran <tranbaoduy@chromium.org>
Reviewed-by: default avatarJohn Palmer <jopalmer@chromium.org>
Reviewed-by: default avatarAlexander Alekseev <alemate@chromium.org>
Reviewed-by: default avatarDarren Shen <shend@chromium.org>
Cr-Commit-Position: refs/heads/master@{#832332}
parent 26d3c421
...@@ -193,6 +193,7 @@ source_set("chromeos") { ...@@ -193,6 +193,7 @@ source_set("chromeos") {
"//chromeos/dbus/upstart", "//chromeos/dbus/upstart",
"//chromeos/disks", "//chromeos/disks",
"//chromeos/geolocation", "//chromeos/geolocation",
"//chromeos/ime:gencode",
"//chromeos/login/auth", "//chromeos/login/auth",
"//chromeos/login/login_state", "//chromeos/login/login_state",
"//chromeos/login/session", "//chromeos/login/session",
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_paths.h"
#include "chrome/common/extensions/extension_constants.h" #include "chrome/common/extensions/extension_constants.h"
#include "chrome/grit/browser_resources.h" #include "chrome/grit/browser_resources.h"
#include "chromeos/ime/input_methods.h"
#include "extensions/browser/extension_pref_value_map.h" #include "extensions/browser/extension_pref_value_map.h"
#include "extensions/browser/extension_pref_value_map_factory.h" #include "extensions/browser/extension_pref_value_map_factory.h"
#include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry.h"
...@@ -162,6 +163,12 @@ void OnFilePathChecked(Profile* profile, ...@@ -162,6 +163,12 @@ void OnFilePathChecked(Profile* profile,
ComponentExtensionIMEManagerDelegateImpl:: ComponentExtensionIMEManagerDelegateImpl::
ComponentExtensionIMEManagerDelegateImpl() { ComponentExtensionIMEManagerDelegateImpl() {
ReadComponentExtensionsInfo(&component_extension_list_); ReadComponentExtensionsInfo(&component_extension_list_);
for (const auto& input_method : input_method::kInputMethods) {
if (input_method.is_login_keyboard) {
login_layout_set_.insert(input_method.xkb_layout_id);
}
}
} }
ComponentExtensionIMEManagerDelegateImpl:: ComponentExtensionIMEManagerDelegateImpl::
...@@ -192,6 +199,16 @@ void ComponentExtensionIMEManagerDelegateImpl::Load( ...@@ -192,6 +199,16 @@ void ComponentExtensionIMEManagerDelegateImpl::Load(
base::Owned(copied_file_path))); base::Owned(copied_file_path)));
} }
bool ComponentExtensionIMEManagerDelegateImpl::IsInLoginLayoutAllowlist(
const std::vector<std::string>& layouts) {
for (const auto& layout : layouts) {
if (login_layout_set_.find(layout) != login_layout_set_.end()) {
return true;
}
}
return false;
}
std::unique_ptr<base::DictionaryValue> std::unique_ptr<base::DictionaryValue>
ComponentExtensionIMEManagerDelegateImpl::GetManifest( ComponentExtensionIMEManagerDelegateImpl::GetManifest(
const std::string& manifest_string) { const std::string& manifest_string) {
......
...@@ -34,6 +34,8 @@ class ComponentExtensionIMEManagerDelegateImpl ...@@ -34,6 +34,8 @@ class ComponentExtensionIMEManagerDelegateImpl
const std::string& extension_id, const std::string& extension_id,
const std::string& manifest, const std::string& manifest,
const base::FilePath& file_path) override; const base::FilePath& file_path) override;
bool IsInLoginLayoutAllowlist(
const std::vector<std::string>& layouts) override;
static bool IsIMEExtensionID(const std::string& id); static bool IsIMEExtensionID(const std::string& id);
...@@ -64,6 +66,8 @@ class ComponentExtensionIMEManagerDelegateImpl ...@@ -64,6 +66,8 @@ class ComponentExtensionIMEManagerDelegateImpl
// The list of component extension IME. // The list of component extension IME.
std::vector<ComponentExtensionIME> component_extension_list_; std::vector<ComponentExtensionIME> component_extension_list_;
std::set<std::string> login_layout_set_;
DISALLOW_COPY_AND_ASSIGN(ComponentExtensionIMEManagerDelegateImpl); DISALLOW_COPY_AND_ASSIGN(ComponentExtensionIMEManagerDelegateImpl);
}; };
......
...@@ -801,7 +801,7 @@ static_library("test_support") { ...@@ -801,7 +801,7 @@ static_library("test_support") {
"ime/chromeos/mock_input_method_manager.h", "ime/chromeos/mock_input_method_manager.h",
] ]
deps += [ deps += [
# Generates a header used by component_extension_ime_manager.cc # Generates a header used by mock_component_extension_ime_manager_delegate.cc
"//chromeos/ime:gencode", "//chromeos/ime:gencode",
"//ui/base/ime/chromeos", "//ui/base/ime/chromeos",
] ]
......
...@@ -57,7 +57,6 @@ component("chromeos") { ...@@ -57,7 +57,6 @@ component("chromeos") {
":ime_types", ":ime_types",
"//build:branding_buildflags", "//build:branding_buildflags",
"//chromeos/constants", "//chromeos/constants",
"//chromeos/ime:gencode",
"//chromeos/services/ime/public/mojom", "//chromeos/services/ime/public/mojom",
"//chromeos/system", "//chromeos/system",
"//third_party/icu", "//third_party/icu",
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "chromeos/constants/chromeos_switches.h" #include "chromeos/constants/chromeos_switches.h"
#include "chromeos/ime/input_methods.h"
#include "ui/base/ime/chromeos/extension_ime_util.h" #include "ui/base/ime/chromeos/extension_ime_util.h"
namespace chromeos { namespace chromeos {
...@@ -58,11 +57,6 @@ ComponentExtensionIME::~ComponentExtensionIME() = default; ...@@ -58,11 +57,6 @@ ComponentExtensionIME::~ComponentExtensionIME() = default;
ComponentExtensionIMEManager::ComponentExtensionIMEManager( ComponentExtensionIMEManager::ComponentExtensionIMEManager(
std::unique_ptr<ComponentExtensionIMEManagerDelegate> delegate) std::unique_ptr<ComponentExtensionIMEManagerDelegate> delegate)
: delegate_(std::move(delegate)) { : delegate_(std::move(delegate)) {
for (const auto& input_method : input_method::kInputMethods) {
if (input_method.is_login_keyboard)
login_layout_set_.insert(input_method.xkb_layout_id);
}
// Creates internal mapping between input method id and engine components. // Creates internal mapping between input method id and engine components.
std::vector<ComponentExtensionIME> ext_list = delegate_->ListIME(); std::vector<ComponentExtensionIME> ext_list = delegate_->ListIME();
for (const auto& ext : ext_list) { for (const auto& ext : ext_list) {
...@@ -122,7 +116,7 @@ input_method::InputMethodDescriptors ...@@ -122,7 +116,7 @@ input_method::InputMethodDescriptors
ime.language_codes, ime.language_codes,
// Enables extension based xkb keyboards on login screen. // Enables extension based xkb keyboards on login screen.
extension_ime_util::IsKeyboardLayoutExtension(input_method_id) && extension_ime_util::IsKeyboardLayoutExtension(input_method_id) &&
IsInLoginLayoutAllowlist(layouts), delegate_->IsInLoginLayoutAllowlist(layouts),
ime.options_page_url, ime.input_view_url)); ime.options_page_url, ime.input_view_url));
} }
} }
...@@ -159,13 +153,4 @@ bool ComponentExtensionIMEManager::FindEngineEntry( ...@@ -159,13 +153,4 @@ bool ComponentExtensionIMEManager::FindEngineEntry(
return true; return true;
} }
bool ComponentExtensionIMEManager::IsInLoginLayoutAllowlist(
const std::vector<std::string>& layouts) {
for (const auto& layout : layouts) {
if (login_layout_set_.find(layout) != login_layout_set_.end())
return true;
}
return false;
}
} // namespace chromeos } // namespace chromeos
...@@ -94,8 +94,6 @@ class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ComponentExtensionIMEManager { ...@@ -94,8 +94,6 @@ class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ComponentExtensionIMEManager {
// It's filled by ctor and never changed during runtime. // It's filled by ctor and never changed during runtime.
std::set<std::string> input_method_id_set_; std::set<std::string> input_method_id_set_;
std::set<std::string> login_layout_set_;
DISALLOW_COPY_AND_ASSIGN(ComponentExtensionIMEManager); DISALLOW_COPY_AND_ASSIGN(ComponentExtensionIMEManager);
}; };
......
...@@ -30,6 +30,9 @@ class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ...@@ -30,6 +30,9 @@ class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
const std::string& extension_id, const std::string& extension_id,
const std::string& manifest, const std::string& manifest,
const base::FilePath& path) = 0; const base::FilePath& path) = 0;
virtual bool IsInLoginLayoutAllowlist(
const std::vector<std::string>& layouts) = 0;
}; };
} // namespace chromeos } // namespace chromeos
......
...@@ -3,13 +3,20 @@ ...@@ -3,13 +3,20 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "ui/base/ime/chromeos/mock_component_extension_ime_manager_delegate.h" #include "ui/base/ime/chromeos/mock_component_extension_ime_manager_delegate.h"
#include "chromeos/ime/input_methods.h"
#include "ui/base/ime/chromeos/component_extension_ime_manager.h" #include "ui/base/ime/chromeos/component_extension_ime_manager.h"
namespace chromeos { namespace chromeos {
namespace input_method { namespace input_method {
MockComponentExtensionIMEManagerDelegate:: MockComponentExtensionIMEManagerDelegate::
MockComponentExtensionIMEManagerDelegate() = default; MockComponentExtensionIMEManagerDelegate() {
for (const auto& input_method : input_method::kInputMethods) {
if (input_method.is_login_keyboard) {
login_layout_set_.insert(input_method.xkb_layout_id);
}
}
}
MockComponentExtensionIMEManagerDelegate:: MockComponentExtensionIMEManagerDelegate::
~MockComponentExtensionIMEManagerDelegate() = default; ~MockComponentExtensionIMEManagerDelegate() = default;
...@@ -24,5 +31,16 @@ void MockComponentExtensionIMEManagerDelegate::Load( ...@@ -24,5 +31,16 @@ void MockComponentExtensionIMEManagerDelegate::Load(
const std::string& extension_id, const std::string& extension_id,
const std::string& manifest, const std::string& manifest,
const base::FilePath& path) {} const base::FilePath& path) {}
bool MockComponentExtensionIMEManagerDelegate::IsInLoginLayoutAllowlist(
const std::vector<std::string>& layouts) {
for (const auto& layout : layouts) {
if (login_layout_set_.find(layout) != login_layout_set_.end()) {
return true;
}
}
return false;
}
} // namespace input_method } // namespace input_method
} // namespace chromeos } // namespace chromeos
...@@ -24,12 +24,15 @@ class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ...@@ -24,12 +24,15 @@ class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS)
const std::string& extension_id, const std::string& extension_id,
const std::string& manifest, const std::string& manifest,
const base::FilePath& path) override; const base::FilePath& path) override;
bool IsInLoginLayoutAllowlist(
const std::vector<std::string>& layouts) override;
void set_ime_list(const std::vector<ComponentExtensionIME>& ime_list) { void set_ime_list(const std::vector<ComponentExtensionIME>& ime_list) {
ime_list_ = ime_list; ime_list_ = ime_list;
} }
private: private:
std::set<std::string> login_layout_set_;
std::vector<ComponentExtensionIME> ime_list_; std::vector<ComponentExtensionIME> ime_list_;
DISALLOW_COPY_AND_ASSIGN(MockComponentExtensionIMEManagerDelegate); DISALLOW_COPY_AND_ASSIGN(MockComponentExtensionIMEManagerDelegate);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment