Commit 71c00bee authored by Roman Aleksandrov's avatar Roman Aleksandrov Committed by Commit Bot

Welcome screen: Fix language list initialization

Change ResolveLanguageListInThreadPool so that it uses AppLocale instead
of default locale if exists.

Bug: 955397
Change-Id: I6947dd89e297adea3fd019e38d083e45419ea282
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1704098Reviewed-by: default avatarAlexander Alekseev <alemate@chromium.org>
Reviewed-by: default avatarDenis Kuznetsov <antrim@chromium.org>
Reviewed-by: default avatarRoman Sorokin [CET] <rsorokin@chromium.org>
Commit-Queue: Roman Aleksandrov <raleksandrov@google.com>
Cr-Commit-Position: refs/heads/master@{#706436}
parent 3e857276
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h" #include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h"
#include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_paths.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "chromeos/constants/chromeos_paths.h"
#include "chromeos/system/statistics_provider.h" #include "chromeos/system/statistics_provider.h"
#include "components/pref_registry/pref_registry_syncable.h" #include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_registry_simple.h"
...@@ -73,10 +74,6 @@ const char kIdAttr[] = "id"; ...@@ -73,10 +74,6 @@ const char kIdAttr[] = "id";
const char kAcceptedManifestVersion[] = "1.0"; const char kAcceptedManifestVersion[] = "1.0";
// Path to OEM partner startup customization manifest.
const char kStartupCustomizationManifestPath[] =
"/opt/oem/etc/startup_manifest.json";
// This is subdirectory relative to PathService(DIR_CHROMEOS_CUSTOM_WALLPAPERS), // This is subdirectory relative to PathService(DIR_CHROMEOS_CUSTOM_WALLPAPERS),
// where downloaded (and resized) wallpaper is stored. // where downloaded (and resized) wallpaper is stored.
const char kCustomizationDefaultWallpaperDir[] = "customization"; const char kCustomizationDefaultWallpaperDir[] = "customization";
...@@ -287,7 +284,10 @@ StartupCustomizationDocument::StartupCustomizationDocument() ...@@ -287,7 +284,10 @@ StartupCustomizationDocument::StartupCustomizationDocument()
// Loading manifest causes us to do blocking IO on UI thread. // Loading manifest causes us to do blocking IO on UI thread.
// Temporarily allow it until we fix http://crosbug.com/11103 // Temporarily allow it until we fix http://crosbug.com/11103
base::ThreadRestrictions::ScopedAllowIO allow_io; base::ThreadRestrictions::ScopedAllowIO allow_io;
LoadManifestFromFile(base::FilePath(kStartupCustomizationManifestPath)); base::FilePath startup_customization_manifest;
base::PathService::Get(chromeos::FILE_STARTUP_CUSTOMIZATION_MANIFEST,
&startup_customization_manifest);
LoadManifestFromFile(startup_customization_manifest);
} }
Init(system::StatisticsProvider::GetInstance()); Init(system::StatisticsProvider::GetInstance());
} }
......
...@@ -2,6 +2,10 @@ ...@@ -2,6 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include <memory>
#include "base/test/scoped_path_override.h"
#include "base/test/task_environment.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
...@@ -11,11 +15,17 @@ ...@@ -11,11 +15,17 @@
#include "chrome/browser/chromeos/login/test/js_checker.h" #include "chrome/browser/chromeos/login/test/js_checker.h"
#include "chrome/browser/chromeos/login/test/oobe_base_test.h" #include "chrome/browser/chromeos/login/test/oobe_base_test.h"
#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h"
#include "chrome/browser/chromeos/login/test/test_predicate_waiter.h"
#include "chrome/browser/chromeos/login/ui/login_display_host.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h"
#include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.h"
#include "chromeos/constants/chromeos_paths.h"
#include "chromeos/dbus/constants/dbus_switches.h" #include "chromeos/dbus/constants/dbus_switches.h"
#include "components/language/core/browser/pref_names.h"
#include "components/prefs/pref_service.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/accessibility/accessibility_switches.h" #include "ui/accessibility/accessibility_switches.h"
#include "ui/base/ime/chromeos/extension_ime_util.h" #include "ui/base/ime/chromeos/extension_ime_util.h"
...@@ -23,6 +33,14 @@ namespace chromeos { ...@@ -23,6 +33,14 @@ namespace chromeos {
namespace { namespace {
const char kStartupManifest[] =
R"({
"version": "1.0",
"initial_locale" : "en-US",
"initial_timezone" : "US/Pacific",
"keyboard_layout" : "xkb:us::eng",
})";
chromeos::OobeUI* GetOobeUI() { chromeos::OobeUI* GetOobeUI() {
auto* host = chromeos::LoginDisplayHost::default_host(); auto* host = chromeos::LoginDisplayHost::default_host();
return host ? host->GetOobeUI() : nullptr; return host ? host->GetOobeUI() : nullptr;
...@@ -45,6 +63,27 @@ void ToggleAccessibilityFeature(const std::string& feature_name, ...@@ -45,6 +63,27 @@ void ToggleAccessibilityFeature(const std::string& feature_name,
js.CreateWaiter(feature_toggle)->Wait(); js.CreateWaiter(feature_toggle)->Wait();
} }
class LanguageReloadObserver : public WelcomeScreen::Observer {
public:
explicit LanguageReloadObserver(WelcomeScreen* welcome_screen)
: welcome_screen_(welcome_screen) {
welcome_screen_->AddObserver(this);
}
// WelcomeScreen::Observer:
void OnLanguageListReloaded() override { run_loop_.Quit(); }
void Wait() { run_loop_.Run(); }
~LanguageReloadObserver() override { welcome_screen_->RemoveObserver(this); }
private:
WelcomeScreen* const welcome_screen_;
base::RunLoop run_loop_;
DISALLOW_COPY_AND_ASSIGN(LanguageReloadObserver);
};
} // namespace } // namespace
class WelcomeScreenBrowserTest : public InProcessBrowserTest { class WelcomeScreenBrowserTest : public InProcessBrowserTest {
...@@ -55,8 +94,18 @@ class WelcomeScreenBrowserTest : public InProcessBrowserTest { ...@@ -55,8 +94,18 @@ class WelcomeScreenBrowserTest : public InProcessBrowserTest {
// InProcessBrowserTest: // InProcessBrowserTest:
void SetUpOnMainThread() override { void SetUpOnMainThread() override {
ShowLoginWizard(OobeScreen::SCREEN_TEST_NO_WINDOW); ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
base::FilePath startup_manifest =
data_dir_.GetPath().AppendASCII("startup_manifest.json");
base::WriteFile(startup_manifest, kStartupManifest,
strlen(kStartupManifest));
path_override_ = std::make_unique<base::ScopedPathOverride>(
chromeos::FILE_STARTUP_CUSTOMIZATION_MANIFEST, startup_manifest);
ShowLoginWizard(OobeScreen::SCREEN_TEST_NO_WINDOW);
test::TestPredicateWaiter(base::BindRepeating([]() {
return WizardController::default_controller() != nullptr;
})).Wait();
WizardController::default_controller() WizardController::default_controller()
->screen_manager() ->screen_manager()
->DeleteScreenForTesting(WelcomeView::kScreenId); ->DeleteScreenForTesting(WelcomeView::kScreenId);
...@@ -65,6 +114,7 @@ class WelcomeScreenBrowserTest : public InProcessBrowserTest { ...@@ -65,6 +114,7 @@ class WelcomeScreenBrowserTest : public InProcessBrowserTest {
base::BindRepeating(&WelcomeScreenBrowserTest::OnWelcomeScreenExit, base::BindRepeating(&WelcomeScreenBrowserTest::OnWelcomeScreenExit,
base::Unretained(this))); base::Unretained(this)));
welcome_screen_ = welcome_screen.get(); welcome_screen_ = welcome_screen.get();
observer_ = std::make_unique<LanguageReloadObserver>(welcome_screen_);
WizardController::default_controller() WizardController::default_controller()
->screen_manager() ->screen_manager()
->SetScreenForTesting(std::move(welcome_screen)); ->SetScreenForTesting(std::move(welcome_screen));
...@@ -87,8 +137,11 @@ class WelcomeScreenBrowserTest : public InProcessBrowserTest { ...@@ -87,8 +137,11 @@ class WelcomeScreenBrowserTest : public InProcessBrowserTest {
} }
WelcomeScreen* welcome_screen_ = nullptr; WelcomeScreen* welcome_screen_ = nullptr;
std::unique_ptr<LanguageReloadObserver> observer_;
private: private:
std::unique_ptr<base::ScopedPathOverride> path_override_;
base::ScopedTempDir data_dir_;
bool screen_exit_ = false; bool screen_exit_ = false;
base::OnceClosure screen_exit_callback_; base::OnceClosure screen_exit_callback_;
...@@ -322,6 +375,29 @@ IN_PROC_BROWSER_TEST_F(WelcomeScreenBrowserTest, ...@@ -322,6 +375,29 @@ IN_PROC_BROWSER_TEST_F(WelcomeScreenBrowserTest,
test::OobeJS().ExpectHiddenPath({"connect", "dockedMagnifierOobeOption"}); test::OobeJS().ExpectHiddenPath({"connect", "dockedMagnifierOobeOption"});
} }
IN_PROC_BROWSER_TEST_F(WelcomeScreenBrowserTest, PRE_SelectedLanguage) {
EXPECT_EQ(
StartupCustomizationDocument::GetInstance()->initial_locale_default(),
"en-US");
welcome_screen_->Show();
OobeScreenWaiter(WelcomeView::kScreenId).Wait();
const std::string locale = "ru";
welcome_screen_->SetApplicationLocale(locale);
test::OobeJS().TapOnPath({"connect", "welcomeScreen", "welcomeNextButton"});
WaitForScreenExit();
EXPECT_EQ(g_browser_process->local_state()->GetString(
language::prefs::kApplicationLocale),
locale);
}
IN_PROC_BROWSER_TEST_F(WelcomeScreenBrowserTest, SelectedLanguage) {
observer_->Wait();
const std::string locale = "ru";
EXPECT_EQ(g_browser_process->local_state()->GetString(
language::prefs::kApplicationLocale),
locale);
}
IN_PROC_BROWSER_TEST_F(WelcomeScreenWithExperimentalAccessibilityFeaturesTest, IN_PROC_BROWSER_TEST_F(WelcomeScreenWithExperimentalAccessibilityFeaturesTest,
A11yDockedMagnifierEnabled) { A11yDockedMagnifierEnabled) {
welcome_screen_->Show(); welcome_screen_->Show();
......
...@@ -354,8 +354,12 @@ void ResolveLanguageListInThreadPool( ...@@ -354,8 +354,12 @@ void ResolveLanguageListInThreadPool(
std::string selected_language; std::string selected_language;
if (!language_switch_result) { if (!language_switch_result) {
selected_language = if (!g_browser_process->GetApplicationLocale().empty()) {
StartupCustomizationDocument::GetInstance()->initial_locale_default(); selected_language = g_browser_process->GetApplicationLocale();
} else {
selected_language =
StartupCustomizationDocument::GetInstance()->initial_locale_default();
}
} else { } else {
if (language_switch_result->success) { if (language_switch_result->success) {
if (language_switch_result->requested_locale == if (language_switch_result->requested_locale ==
......
...@@ -34,6 +34,9 @@ const base::FilePath::CharType kUptimeFileName[] = ...@@ -34,6 +34,9 @@ const base::FilePath::CharType kUptimeFileName[] =
const base::FilePath::CharType kUpdateRebootNeededUptimeFile[] = const base::FilePath::CharType kUpdateRebootNeededUptimeFile[] =
FILE_PATH_LITERAL("/run/chrome/update_reboot_needed_uptime"); FILE_PATH_LITERAL("/run/chrome/update_reboot_needed_uptime");
const base::FilePath::CharType kStartupCustomizationManifestFile[] =
FILE_PATH_LITERAL("/opt/oem/etc/startup_manifest.json");
const base::FilePath::CharType kDeviceLocalAccountExtensionDir[] = const base::FilePath::CharType kDeviceLocalAccountExtensionDir[] =
FILE_PATH_LITERAL("/var/cache/device_local_account_extensions"); FILE_PATH_LITERAL("/var/cache/device_local_account_extensions");
...@@ -75,6 +78,9 @@ bool PathProvider(int key, base::FilePath* result) { ...@@ -75,6 +78,9 @@ bool PathProvider(int key, base::FilePath* result) {
case FILE_UPDATE_REBOOT_NEEDED_UPTIME: case FILE_UPDATE_REBOOT_NEEDED_UPTIME:
*result = base::FilePath(kUpdateRebootNeededUptimeFile); *result = base::FilePath(kUpdateRebootNeededUptimeFile);
break; break;
case FILE_STARTUP_CUSTOMIZATION_MANIFEST:
*result = base::FilePath(kStartupCustomizationManifestFile);
break;
case DIR_DEVICE_LOCAL_ACCOUNT_EXTENSIONS: case DIR_DEVICE_LOCAL_ACCOUNT_EXTENSIONS:
*result = base::FilePath(kDeviceLocalAccountExtensionDir); *result = base::FilePath(kDeviceLocalAccountExtensionDir);
break; break;
......
...@@ -29,6 +29,8 @@ enum { ...@@ -29,6 +29,8 @@ enum {
// store the uptime at which an update // store the uptime at which an update
// became necessary. The file should be // became necessary. The file should be
// cleared on boot. // cleared on boot.
FILE_STARTUP_CUSTOMIZATION_MANIFEST, // Path to OEM partner startup
// customization manifest.
DIR_DEVICE_LOCAL_ACCOUNT_EXTENSIONS, // Directory under which a cache of DIR_DEVICE_LOCAL_ACCOUNT_EXTENSIONS, // Directory under which a cache of
// force-installed extensions is // force-installed extensions is
// maintained for each device-local // maintained for each device-local
......
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