Index: chrome/browser/chromeos/login/login_screen_policy_browsertest.cc |
diff --git a/chrome/browser/chromeos/login/login_screen_policy_browsertest.cc b/chrome/browser/chromeos/login/login_screen_policy_browsertest.cc |
index 53534afe5008fa35442317dd15d5cbb88c2b934b..5d0d29c0afd3535406c75e5174fd904311c67575 100644 |
--- a/chrome/browser/chromeos/login/login_screen_policy_browsertest.cc |
+++ b/chrome/browser/chromeos/login/login_screen_policy_browsertest.cc |
@@ -4,23 +4,37 @@ |
#include "base/command_line.h" |
#include "base/memory/ref_counted.h" |
+#include "base/threading/thread_task_runner_handle.h" |
+#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/chromeos/login/startup_utils.h" |
#include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h" |
#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" |
#include "chrome/browser/chromeos/settings/cros_settings.h" |
+#include "chrome/browser/lifetime/application_lifetime.h" |
+#include "chrome/grit/generated_resources.h" |
+#include "chrome/test/base/ui_test_utils.h" |
#include "chromeos/chromeos_switches.h" |
#include "chromeos/settings/cros_settings_names.h" |
#include "components/user_manager/user_manager.h" |
-#include "content/public/test/test_utils.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "ui/base/ime/chromeos/input_method_manager.h" |
+#include "ui/base/l10n/l10n_util.h" |
+#include "ui/base/resource/resource_bundle.h" |
namespace em = enterprise_management; |
namespace chromeos { |
class LoginScreenPolicyTest : public policy::DevicePolicyCrosBrowserTest { |
+ public: |
+ void RefreshDevicePolicyAndWaitForSettingChange( |
+ const char* cros_setting_name); |
+ |
+ protected: |
void SetUpCommandLine(base::CommandLine* command_line) override { |
command_line->AppendSwitch(switches::kLoginManager); |
+ command_line->AppendSwitch(switches::kForceLoginManagerInTests); |
} |
void SetUpInProcessBrowserTestFixture() override { |
@@ -28,25 +42,94 @@ class LoginScreenPolicyTest : public policy::DevicePolicyCrosBrowserTest { |
MarkAsEnterpriseOwned(); |
DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture(); |
} |
-}; |
-IN_PROC_BROWSER_TEST_F(LoginScreenPolicyTest, DisableSupervisedUsers) { |
- EXPECT_FALSE(user_manager::UserManager::Get()->AreSupervisedUsersAllowed()); |
+ void TearDownOnMainThread() override { |
+ // This shuts down the login UI. |
+ base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FROM_HERE, base::Bind(&chrome::AttemptExit)); |
+ base::RunLoop().RunUntilIdle(); |
+ } |
+}; |
+void LoginScreenPolicyTest::RefreshDevicePolicyAndWaitForSettingChange( |
+ const char* cros_setting_name) { |
scoped_refptr<content::MessageLoopRunner> runner( |
new content::MessageLoopRunner); |
std::unique_ptr<CrosSettings::ObserverSubscription> subscription( |
chromeos::CrosSettings::Get()->AddSettingsObserver( |
- chromeos::kAccountsPrefSupervisedUsersEnabled, |
- runner->QuitClosure())); |
+ cros_setting_name, runner->QuitClosure())); |
- em::ChromeDeviceSettingsProto& proto(device_policy()->payload()); |
- proto.mutable_supervised_users_settings()->set_supervised_users_enabled(true); |
RefreshDevicePolicy(); |
- |
runner->Run(); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(LoginScreenPolicyTest, DisableSupervisedUsers) { |
+ EXPECT_FALSE(user_manager::UserManager::Get()->AreSupervisedUsersAllowed()); |
+ |
+ em::ChromeDeviceSettingsProto& proto(device_policy()->payload()); |
+ proto.mutable_supervised_users_settings()->set_supervised_users_enabled(true); |
+ RefreshDevicePolicyAndWaitForSettingChange( |
+ chromeos::kAccountsPrefSupervisedUsersEnabled); |
EXPECT_TRUE(user_manager::UserManager::Get()->AreSupervisedUsersAllowed()); |
} |
+IN_PROC_BROWSER_TEST_F(LoginScreenPolicyTest, RestrictInputMethods) { |
+ input_method::InputMethodManager* imm = |
+ input_method::InputMethodManager::Get(); |
+ ASSERT_TRUE(imm); |
+ |
+ ASSERT_EQ(0U, imm->GetActiveIMEState()->GetAllowedInputMethods().size()); |
+ |
+ em::ChromeDeviceSettingsProto& proto(device_policy()->payload()); |
+ proto.mutable_login_screen_input_methods()->add_login_screen_input_methods( |
+ "xkb:de::ger"); |
+ RefreshDevicePolicyAndWaitForSettingChange( |
+ chromeos::kDeviceLoginScreenInputMethods); |
+ |
+ ASSERT_EQ(1U, imm->GetActiveIMEState()->GetAllowedInputMethods().size()); |
+ |
+ // Remove the policy again |
+ proto.mutable_login_screen_input_methods() |
+ ->clear_login_screen_input_methods(); |
+ RefreshDevicePolicyAndWaitForSettingChange( |
+ chromeos::kDeviceLoginScreenInputMethods); |
+ |
+ ASSERT_EQ(0U, imm->GetActiveIMEState()->GetAllowedInputMethods().size()); |
+} |
+ |
+class LoginScreenLocalePolicyTest : public LoginScreenPolicyTest { |
+ protected: |
+ LoginScreenLocalePolicyTest() {} |
+ |
+ void SetUpInProcessBrowserTestFixture() override { |
+ LoginScreenPolicyTest::SetUpInProcessBrowserTestFixture(); |
+ |
+ em::ChromeDeviceSettingsProto& proto(device_policy()->payload()); |
+ proto.mutable_login_screen_locales()->add_login_screen_locales("fr-FR"); |
+ RefreshDevicePolicy(); |
+ } |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(LoginScreenLocalePolicyTest, |
+ PRE_LoginLocaleEnforcedByPolicy) { |
+ chromeos::StartupUtils::MarkOobeCompleted(); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(LoginScreenLocalePolicyTest, |
+ LoginLocaleEnforcedByPolicy) { |
+ // Verifies that the default locale can be overridden with policy. |
+ EXPECT_EQ("fr", g_browser_process->GetApplicationLocale()); |
+ base::string16 french_title = |
+ l10n_util::GetStringUTF16(IDS_LOGIN_POD_SIGNING_IN); |
+ |
+ // Make sure this is really French and differs from the English title. |
+ std::string loaded = |
+ ui::ResourceBundle::GetSharedInstance().ReloadLocaleResources("en-US"); |
+ EXPECT_EQ("en-US", loaded); |
+ base::string16 english_title = |
+ l10n_util::GetStringUTF16(IDS_LOGIN_POD_SIGNING_IN); |
+ EXPECT_NE(french_title, english_title); |
+} |
+ |
} // namespace chromeos |