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

Unified Diff: trunk/src/chrome/browser/chromeos/policy/device_local_account_browsertest.cc

Issue 441143002: Revert 287581 "Allow recommended locales to be set for public se..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 4 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: trunk/src/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
===================================================================
--- trunk/src/chrome/browser/chromeos/policy/device_local_account_browsertest.cc (revision 287633)
+++ trunk/src/chrome/browser/chromeos/policy/device_local_account_browsertest.cc (working copy)
@@ -3,9 +3,7 @@
// found in the LICENSE file.
#include <map>
-#include <set>
#include <string>
-#include <vector>
#include "apps/app_window_registry.h"
#include "apps/ui/native_app_window.h"
@@ -36,13 +34,11 @@
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
-#include "base/threading/sequenced_worker_pool.h"
#include "base/values.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/chromeos/extensions/device_local_account_external_policy_loader.h"
#include "chrome/browser/chromeos/extensions/external_cache.h"
-#include "chrome/browser/chromeos/input_method/input_method_util.h"
#include "chrome/browser/chromeos/login/existing_user_controller.h"
#include "chrome/browser/chromeos/login/screens/wizard_screen.h"
#include "chrome/browser/chromeos/login/ui/login_display_host.h"
@@ -103,7 +99,6 @@
#include "components/signin/core/common/signin_pref_names.h"
#include "components/user_manager/user.h"
#include "components/user_manager/user_type.h"
-#include "content/public/browser/browser_thread.h"
#include "content/public/browser/notification_details.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_source.h"
@@ -178,25 +173,9 @@
const char kExternalData[] = "External data";
const char kExternalDataURL[] = "http://localhost/external_data";
-const char* kSingleRecommendedLocale[] = {
- "el",
-};
-const char* kRecommendedLocales1[] = {
- "pl",
- "et",
- "en-US",
-};
-const char* kRecommendedLocales2[] = {
- "fr",
- "nl",
-};
const char kPublicSessionLocale[] = "de";
const char kPublicSessionInputMethodIDTemplate[] = "_comp_ime_%sxkb:de:neo:ger";
-// The sequence token used by GetKeyboardLayoutsForLocale() for its background
-// tasks.
-const char kSequenceToken[] = "chromeos_login_l10n_util";
-
// Helper that serves extension update manifests to Chrome.
class TestingUpdateManifestProvider {
public:
@@ -377,23 +356,6 @@
return chromeos::UserManager::Get()->IsSessionStarted();
}
-// GetKeyboardLayoutsForLocale() posts a task to a background task runner. This
-// method flushes that task runner and the current thread's message loop to
-// ensure that GetKeyboardLayoutsForLocale() is finished.
-void WaitForGetKeyboardLayoutsForLocaleToFinish() {
- base::SequencedWorkerPool* worker_pool =
- content::BrowserThread::GetBlockingPool();
- scoped_refptr<base::SequencedTaskRunner> background_task_runner =
- worker_pool->GetSequencedTaskRunner(
- worker_pool->GetNamedSequenceToken(kSequenceToken));
- base::RunLoop run_loop;
- background_task_runner->PostTaskAndReply(FROM_HERE,
- base::Bind(&base::DoNothing),
- run_loop.QuitClosure());
- run_loop.Run();
- base::RunLoop().RunUntilIdle();
-}
-
} // namespace
class DeviceLocalAccountTest : public DevicePolicyCrosBrowserTest,
@@ -408,8 +370,7 @@
kAccountId2, DeviceLocalAccount::TYPE_PUBLIC_SESSION)),
public_session_input_method_id_(base::StringPrintf(
kPublicSessionInputMethodIDTemplate,
- chromeos::extension_ime_util::kXkbExtensionId)),
- contents_(NULL) {
+ chromeos::extension_ime_util::kXkbExtensionId)) {
set_exit_when_last_browser_closes(false);
}
@@ -457,59 +418,6 @@
InitializePolicy();
}
- virtual void SetUpOnMainThread() OVERRIDE {
- DevicePolicyCrosBrowserTest::SetUpOnMainThread();
-
- content::WindowedNotificationObserver(
- chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
- content::NotificationService::AllSources()).Wait();
-
- chromeos::LoginDisplayHostImpl* host =
- reinterpret_cast<chromeos::LoginDisplayHostImpl*>(
- chromeos::LoginDisplayHostImpl::default_host());
- ASSERT_TRUE(host);
- chromeos::WebUILoginView* web_ui_login_view = host->GetWebUILoginView();
- ASSERT_TRUE(web_ui_login_view);
- content::WebUI* web_ui = web_ui_login_view->GetWebUI();
- ASSERT_TRUE(web_ui);
- contents_ = web_ui->GetWebContents();
- ASSERT_TRUE(contents_);
-
- // Wait for the login UI to be ready.
- chromeos::OobeUI* oobe_ui = host->GetOobeUI();
- ASSERT_TRUE(oobe_ui);
- base::RunLoop run_loop;
- const bool oobe_ui_ready = oobe_ui->IsJSReady(run_loop.QuitClosure());
- if (!oobe_ui_ready)
- run_loop.Run();
-
- // The network selection screen changes the application locale on load and
- // once again on blur. Wait for the screen to load and blur it so that any
- // locale changes caused by this screen happen now and do not affect any
- // subsequent parts of the test.
- bool done = false;
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
- contents_,
- "var languageSelect = document.getElementById('language-select');"
- "var blurAndReportSuccess = function() {"
- " languageSelect.blur();"
- " domAutomationController.send(true);"
- "};"
- "var screenLoading = document.getElementById('outer-container')"
- " .classList.contains('down');"
- "if (document.activeElement == languageSelect || !screenLoading)"
- " blurAndReportSuccess();"
- "else"
- " languageSelect.addEventListener('focus', blurAndReportSuccess);",
- &done));
-
- // Skip to the login screen.
- chromeos::WizardController* wizard_controller =
- chromeos::WizardController::default_controller();
- ASSERT_TRUE(wizard_controller);
- wizard_controller->SkipToLoginForTesting(LoginScreenContext());
- }
-
virtual void TearDownOnMainThread() OVERRIDE {
BrowserList::RemoveObserver(this);
@@ -572,19 +480,6 @@
kAccountId1, device_local_account_policy_.GetBlob());
}
- void SetRecommendedLocales(const char* recommended_locales[],
- size_t array_size) {
- em::StringListPolicyProto* session_locales_proto =
- device_local_account_policy_.payload().mutable_sessionlocales();
- session_locales_proto->mutable_policy_options()->set_mode(
- em::PolicyOptions_PolicyMode_RECOMMENDED);
- session_locales_proto->mutable_value()->Clear();
- for (size_t i = 0; i < array_size; ++i) {
- session_locales_proto->mutable_value()->add_entries(
- recommended_locales[i]);
- }
- }
-
void AddPublicSessionToDevicePolicy(const std::string& username) {
em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
em::DeviceLocalAccountInfoProto* account =
@@ -597,17 +492,6 @@
std::string(), proto.SerializeAsString());
}
- void EnableAutoLogin() {
- em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
- em::DeviceLocalAccountsProto* device_local_accounts =
- proto.mutable_device_local_accounts();
- device_local_accounts->set_auto_login_id(kAccountId1);
- device_local_accounts->set_auto_login_delay(0);
- RefreshDevicePolicy();
- test_server_.UpdatePolicy(dm_protocol::kChromeDevicePolicyType,
- std::string(), proto.SerializeAsString());
- }
-
void CheckPublicSessionPresent(const std::string& id) {
const user_manager::User* user = chromeos::UserManager::Get()->FindUser(id);
ASSERT_TRUE(user);
@@ -653,6 +537,53 @@
WaitForDisplayName(user_id_1_, kDisplayName1);
}
+ void GetWebContents(content::WebContents** contents) {
+ chromeos::LoginDisplayHostImpl* host =
+ reinterpret_cast<chromeos::LoginDisplayHostImpl*>(
+ chromeos::LoginDisplayHostImpl::default_host());
+ ASSERT_TRUE(host);
+ chromeos::WebUILoginView* web_ui_login_view = host->GetWebUILoginView();
+ ASSERT_TRUE(web_ui_login_view);
+ content::WebUI* web_ui = web_ui_login_view->GetWebUI();
+ ASSERT_TRUE(web_ui);
+ *contents = web_ui->GetWebContents();
+ ASSERT_TRUE(*contents);
+ }
+
+ void WaitForLoginUI() {
+ // Wait for the login UI to be ready.
+ chromeos::LoginDisplayHostImpl* host =
+ reinterpret_cast<chromeos::LoginDisplayHostImpl*>(
+ chromeos::LoginDisplayHostImpl::default_host());
+ ASSERT_TRUE(host);
+ chromeos::OobeUI* oobe_ui = host->GetOobeUI();
+ ASSERT_TRUE(oobe_ui);
+ base::RunLoop run_loop;
+ const bool oobe_ui_ready = oobe_ui->IsJSReady(run_loop.QuitClosure());
+ if (!oobe_ui_ready)
+ run_loop.Run();
+
+ // The network selection screen changes the application locale on load and
+ // once again on blur. Wait for the screen to load and blur it so that any
+ // locale changes caused by this screen happen now and do not affect any
+ // subsequent parts of the test.
+ content::WebContents* contents = NULL;
+ ASSERT_NO_FATAL_FAILURE(GetWebContents(&contents));
+ bool done = false;
+ ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
+ contents,
+ "var languageSelect = document.getElementById('language-select');"
+ "var blurAndReportSuccess = function() {"
+ " languageSelect.blur();"
+ " domAutomationController.send(true);"
+ "};"
+ "if (document.activeElement == languageSelect)"
+ " blurAndReportSuccess();"
+ "else"
+ " languageSelect.addEventListener('focus', blurAndReportSuccess);",
+ &done));
+ }
+
void StartLogin(const std::string& locale,
const std::string& input_method) {
// Start login into the device-local account.
@@ -679,20 +610,6 @@
base::Bind(IsSessionStarted)).Wait();
}
- void VerifyKeyboardLayoutMatchesLocale() {
- chromeos::input_method::InputMethodManager* input_method_manager =
- chromeos::input_method::InputMethodManager::Get();
- std::vector<std::string> layouts_from_locale;
- input_method_manager->GetInputMethodUtil()->
- GetInputMethodIdsFromLanguageCode(
- g_browser_process->GetApplicationLocale(),
- chromeos::input_method::kKeyboardLayoutsOnly,
- &layouts_from_locale);
- ASSERT_FALSE(layouts_from_locale.empty());
- EXPECT_EQ(layouts_from_locale.front(),
- input_method_manager->GetCurrentInputMethod().id());
- }
-
const std::string user_id_1_;
const std::string user_id_2_;
const std::string public_session_input_method_id_;
@@ -702,8 +619,6 @@
UserPolicyBuilder device_local_account_policy_;
LocalPolicyTestServer test_server_;
- content::WebContents* contents_;
-
private:
DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountTest);
};
@@ -731,14 +646,25 @@
WaitForPolicy();
+ // Skip to the login screen.
+ chromeos::WizardController* wizard_controller =
+ chromeos::WizardController::default_controller();
+ ASSERT_TRUE(wizard_controller);
+ wizard_controller->SkipToLoginForTesting(LoginScreenContext());
+ content::WindowedNotificationObserver(
+ chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
+ content::NotificationService::AllSources()).Wait();
+
// Verify that the display name is shown in the UI.
+ content::WebContents* contents = NULL;
+ ASSERT_NO_FATAL_FAILURE(GetWebContents(&contents));
const std::string get_compact_pod_display_name = base::StringPrintf(
"domAutomationController.send(document.getElementById('pod-row')"
" .getPodWithUsername_('%s').nameElement.textContent);",
user_id_1_.c_str());
std::string display_name;
ASSERT_TRUE(content::ExecuteScriptAndExtractString(
- contents_,
+ contents,
get_compact_pod_display_name,
&display_name));
EXPECT_EQ(kDisplayName1, display_name);
@@ -749,14 +675,14 @@
user_id_1_.c_str());
display_name.clear();
ASSERT_TRUE(content::ExecuteScriptAndExtractString(
- contents_,
+ contents,
get_expanded_pod_display_name,
&display_name));
EXPECT_EQ(kDisplayName1, display_name);
// Click on the pod to expand it.
ASSERT_TRUE(content::ExecuteScript(
- contents_,
+ contents,
base::StringPrintf(
"document.getElementById('pod-row').getPodWithUsername_('%s')"
" .click();",
@@ -778,13 +704,13 @@
// Verify that the new display name is shown in the UI.
display_name.clear();
ASSERT_TRUE(content::ExecuteScriptAndExtractString(
- contents_,
+ contents,
get_compact_pod_display_name,
&display_name));
EXPECT_EQ(kDisplayName2, display_name);
display_name.clear();
ASSERT_TRUE(content::ExecuteScriptAndExtractString(
- contents_,
+ contents,
get_expanded_pod_display_name,
&display_name));
EXPECT_EQ(kDisplayName2, display_name);
@@ -793,7 +719,7 @@
// without reloading and losing state.
bool expanded = false;
ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
- contents_,
+ contents,
base::StringPrintf(
"domAutomationController.send(document.getElementById('pod-row')"
" .getPodWithUsername_('%s').expanded);",
@@ -861,7 +787,7 @@
AddPublicSessionToDevicePolicy(kAccountId1);
WaitForPolicy();
-
+ ASSERT_NO_FATAL_FAILURE(WaitForLoginUI());
ASSERT_NO_FATAL_FAILURE(StartLogin(std::string(), std::string()));
WaitForSessionStart();
@@ -894,7 +820,7 @@
AddPublicSessionToDevicePolicy(kAccountId1);
WaitForPolicy();
-
+ ASSERT_NO_FATAL_FAILURE(WaitForLoginUI());
ASSERT_NO_FATAL_FAILURE(StartLogin(std::string(), std::string()));
WaitForSessionStart();
@@ -945,6 +871,7 @@
AddPublicSessionToDevicePolicy(kAccountId1);
WaitForPolicy();
+ ASSERT_NO_FATAL_FAILURE(WaitForLoginUI());
// Start listening for app/extension installation results.
content::WindowedNotificationObserver hosted_app_observer(
@@ -1024,6 +951,7 @@
AddPublicSessionToDevicePolicy(kAccountId1);
WaitForPolicy();
+ ASSERT_NO_FATAL_FAILURE(WaitForLoginUI());
// Start listening for app/extension installation results.
content::WindowedNotificationObserver hosted_app_observer(
@@ -1133,6 +1061,7 @@
ASSERT_TRUE(fetched_external_data);
EXPECT_EQ(kExternalData, *fetched_external_data);
+ ASSERT_NO_FATAL_FAILURE(WaitForLoginUI());
ASSERT_NO_FATAL_FAILURE(StartLogin(std::string(), std::string()));
WaitForSessionStart();
@@ -1243,7 +1172,7 @@
AddPublicSessionToDevicePolicy(kAccountId1);
WaitForPolicy();
-
+ ASSERT_NO_FATAL_FAILURE(WaitForLoginUI());
ASSERT_NO_FATAL_FAILURE(StartLogin(std::string(), std::string()));
WaitForSessionStart();
@@ -1392,106 +1321,43 @@
app_window_registry->RemoveObserver(this);
};
-IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, NoRecommendedLocaleNoSwitch) {
+IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, DoNotSelectLanguageAndKeyboard) {
+ chromeos::input_method::InputMethodManager* input_method_manager =
+ chromeos::input_method::InputMethodManager::Get();
const std::string initial_locale = g_browser_process->GetApplicationLocale();
+ const std::string initial_input_method =
+ input_method_manager->GetCurrentInputMethod().id();
UploadAndInstallDeviceLocalAccountPolicy();
AddPublicSessionToDevicePolicy(kAccountId1);
WaitForPolicy();
-
- // Click on the pod to expand it. Verify that the pod expands to its basic
- // form as there are no recommended locales.
- bool advanced = false;
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
- contents_,
- base::StringPrintf(
- "var pod ="
- " document.getElementById('pod-row').getPodWithUsername_('%s');"
- "pod.click();"
- "domAutomationController.send(pod.classList.contains('advanced'));",
- user_id_1_.c_str()),
- &advanced));
- EXPECT_FALSE(advanced);
-
- // Click the enter button to start the session.
- ASSERT_TRUE(content::ExecuteScript(
- contents_,
- base::StringPrintf(
- "document.getElementById('pod-row').getPodWithUsername_('%s')"
- " .querySelector('.enter-button').click();",
- user_id_1_.c_str())));
-
+ ASSERT_NO_FATAL_FAILURE(WaitForLoginUI());
+ ASSERT_NO_FATAL_FAILURE(StartLogin(std::string(), std::string()));
WaitForSessionStart();
- // Verify that the locale has not changed and the first keyboard layout
- // applicable to the locale was chosen.
EXPECT_EQ(initial_locale, g_browser_process->GetApplicationLocale());
- VerifyKeyboardLayoutMatchesLocale();
+ EXPECT_EQ(initial_input_method,
+ input_method_manager->GetCurrentInputMethod().id());
}
-IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, NoRecommendedLocaleSwitch) {
+IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, SelectLanguageAndKeyboard) {
+ // Specify startup pages.
+ device_local_account_policy_.payload().mutable_restoreonstartup()->set_value(
+ SessionStartupPref::kPrefValueURLs);
+ em::StringListPolicyProto* startup_urls_proto =
+ device_local_account_policy_.payload().mutable_restoreonstartupurls();
+ for (size_t i = 0; i < arraysize(kStartupURLs); ++i)
+ startup_urls_proto->mutable_value()->add_entries(kStartupURLs[i]);
UploadAndInstallDeviceLocalAccountPolicy();
AddPublicSessionToDevicePolicy(kAccountId1);
+ // Log in to the device-local account with a specific locale and keyboard
+ // layout.
WaitForPolicy();
-
- // Click on the pod to expand it. Verify that the pod expands to its basic
- // form as there are no recommended locales.
- bool advanced = false;
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
- contents_,
- base::StringPrintf(
- "var pod ="
- " document.getElementById('pod-row').getPodWithUsername_('%s');"
- "pod.click();"
- "domAutomationController.send(pod.classList.contains('advanced'));",
- user_id_1_.c_str()),
- &advanced));
- EXPECT_FALSE(advanced);
-
- // Click the link that switches the pod to its advanced form. Verify that the
- // pod switches from basic to advanced.
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
- contents_,
- base::StringPrintf(
- "var pod ="
- " document.getElementById('pod-row').getPodWithUsername_('%s');"
- "pod.querySelector('.language-and-input').click();"
- "domAutomationController.send(pod.classList.contains('advanced'));",
- user_id_1_.c_str()),
- &advanced));
- EXPECT_FALSE(advanced);
-
- // Manually select a different locale.
- ASSERT_TRUE(content::ExecuteScript(
- contents_,
- base::StringPrintf(
- "var languageSelect = document.getElementById('pod-row')"
- " .getPodWithUsername_('%s').querySelector('.language-select');"
- "languageSelect.value = '%s';"
- "var event = document.createEvent('HTMLEvents');"
- "event.initEvent('change', false, true);"
- "languageSelect.dispatchEvent(event);",
- user_id_1_.c_str(),
- kPublicSessionLocale)));
-
- // The UI will have requested an updated list of keyboard layouts at this
- // point. Wait for the constructions of this list to finish.
- WaitForGetKeyboardLayoutsForLocaleToFinish();
-
- // Manually select a different keyboard layout and click the enter button to
- // start the session.
- ASSERT_TRUE(content::ExecuteScript(
- contents_,
- base::StringPrintf(
- "var pod ="
- " document.getElementById('pod-row').getPodWithUsername_('%s');"
- "pod.querySelector('.keyboard-select').value = '%s';"
- "pod.querySelector('.enter-button').click();",
- user_id_1_.c_str(),
- public_session_input_method_id_.c_str())));
-
+ ASSERT_NO_FATAL_FAILURE(WaitForLoginUI());
+ ASSERT_NO_FATAL_FAILURE(
+ StartLogin(kPublicSessionLocale, public_session_input_method_id_));
WaitForSessionStart();
// Verify that the locale and keyboard layout have been applied.
@@ -1501,292 +1367,8 @@
GetCurrentInputMethod().id());
}
-IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, OneRecommendedLocale) {
- // Specify a recommended locale.
- SetRecommendedLocales(kSingleRecommendedLocale,
- arraysize(kSingleRecommendedLocale));
- UploadAndInstallDeviceLocalAccountPolicy();
- AddPublicSessionToDevicePolicy(kAccountId1);
-
- WaitForPolicy();
-
- // Click on the pod to expand it. Verify that the pod expands to its basic
- // form as there is only one recommended locale.
- bool advanced = false;
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
- contents_,
- base::StringPrintf(
- "var pod ="
- " document.getElementById('pod-row').getPodWithUsername_('%s');"
- "pod.click();"
- "domAutomationController.send(pod.classList.contains('advanced'));",
- user_id_1_.c_str()),
- &advanced));
- EXPECT_FALSE(advanced);
-
- // Click the enter button to start the session.
- ASSERT_TRUE(content::ExecuteScript(
- contents_,
- base::StringPrintf(
- "document.getElementById('pod-row').getPodWithUsername_('%s')"
- " .querySelector('.enter-button').click();",
- user_id_1_.c_str())));
-
- WaitForSessionStart();
-
- // Verify that the recommended locale has been applied and the first keyboard
- // layout applicable to the locale was chosen.
- EXPECT_EQ(kSingleRecommendedLocale[0],
- g_browser_process->GetApplicationLocale());
- VerifyKeyboardLayoutMatchesLocale();
-}
-
-IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, MultipleRecommendedLocales) {
- // Specify recommended locales.
- SetRecommendedLocales(kRecommendedLocales1, arraysize(kRecommendedLocales1));
- UploadAndInstallDeviceLocalAccountPolicy();
- AddPublicSessionToDevicePolicy(kAccountId1);
- AddPublicSessionToDevicePolicy(kAccountId2);
-
- WaitForPolicy();
-
- // Click on the pod to expand it. Verify that the pod expands to its advanced
- // form directly as there are two or more recommended locales.
- bool advanced = false;
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
- contents_,
- base::StringPrintf(
- "var pod ="
- " document.getElementById('pod-row').getPodWithUsername_('%s');"
- "pod.click();"
- "domAutomationController.send(pod.classList.contains('advanced'));",
- user_id_1_.c_str()),
- &advanced));
- EXPECT_TRUE(advanced);
-
- // Verify that the pod shows a list of locales beginning with the recommended
- // ones, followed by others.
- const std::string get_locale_list = base::StringPrintf(
- "var languageSelect = document.getElementById('pod-row')"
- " .getPodWithUsername_('%s').querySelector('.language-select');"
- "var locales = [];"
- "for (var i = 0; i < languageSelect.length; ++i)"
- " locales.push(languageSelect.options[i].value);"
- "domAutomationController.send(JSON.stringify(locales));",
- user_id_1_.c_str());
- std::string json;
- ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_,
- get_locale_list,
- &json));
- scoped_ptr<base::Value> value_ptr(base::JSONReader::Read(json));
- const base::ListValue* locales = NULL;
- ASSERT_TRUE(value_ptr);
- ASSERT_TRUE(value_ptr->GetAsList(&locales));
- EXPECT_LT(arraysize(kRecommendedLocales1), locales->GetSize());
-
- // Verify that the list starts with the recommended locales, in correct order.
- for (size_t i = 0; i < arraysize(kRecommendedLocales1); ++i) {
- std::string locale;
- EXPECT_TRUE(locales->GetString(i, &locale));
- EXPECT_EQ(kRecommendedLocales1[i], locale);
- }
-
- // Verify that the recommended locales do not appear again in the remainder of
- // the list.
- std::set<std::string> recommended_locales;
- for (size_t i = 0; i < arraysize(kRecommendedLocales1); ++i)
- recommended_locales.insert(kRecommendedLocales1[i]);
- for (size_t i = arraysize(kRecommendedLocales1); i < locales->GetSize();
- ++i) {
- std::string locale;
- EXPECT_TRUE(locales->GetString(i, &locale));
- EXPECT_EQ(recommended_locales.end(), recommended_locales.find(locale));
- }
-
- // Verify that the first recommended locale is selected.
- const std::string get_selected_locale =
- base::StringPrintf(
- "domAutomationController.send(document.getElementById('pod-row')"
- " .getPodWithUsername_('%s').querySelector('.language-select')"
- " .value);",
- user_id_1_.c_str());
- std::string selected_locale;
- ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_,
- get_selected_locale,
- &selected_locale));
- EXPECT_EQ(kRecommendedLocales1[0], selected_locale);
-
- // Change the list of recommended locales.
- SetRecommendedLocales(kRecommendedLocales2, arraysize(kRecommendedLocales2));
-
- // Also change the display name as it is easy to ensure that policy has been
- // updated by waiting for a display name change.
- device_local_account_policy_.payload().mutable_userdisplayname()->set_value(
- kDisplayName2);
- UploadAndInstallDeviceLocalAccountPolicy();
- policy::BrowserPolicyConnectorChromeOS* connector =
- g_browser_process->platform_part()->browser_policy_connector_chromeos();
- DeviceLocalAccountPolicyBroker* broker =
- connector->GetDeviceLocalAccountPolicyService()->GetBrokerForUser(
- user_id_1_);
- ASSERT_TRUE(broker);
- broker->core()->store()->Load();
- WaitForDisplayName(user_id_1_, kDisplayName2);
-
- // Verify that the new list of locales is shown in the UI.
- ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_,
- get_locale_list,
- &json));
- value_ptr.reset(base::JSONReader::Read(json));
- locales = NULL;
- ASSERT_TRUE(value_ptr);
- ASSERT_TRUE(value_ptr->GetAsList(&locales));
- EXPECT_LT(arraysize(kRecommendedLocales2), locales->GetSize());
- for (size_t i = 0; i < arraysize(kRecommendedLocales2); ++i) {
- std::string locale;
- EXPECT_TRUE(locales->GetString(i, &locale));
- EXPECT_EQ(kRecommendedLocales2[i], locale);
- }
-
- // Verify that the first new recommended locale is selected.
- ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_,
- get_selected_locale,
- &selected_locale));
- EXPECT_EQ(kRecommendedLocales2[0], selected_locale);
-
- // Manually select a different locale.
- ASSERT_TRUE(content::ExecuteScript(
- contents_,
- base::StringPrintf(
- "var languageSelect = document.getElementById('pod-row')"
- " .getPodWithUsername_('%s').querySelector('.language-select');"
- "languageSelect.value = '%s';"
- "var event = document.createEvent('HTMLEvents');"
- "event.initEvent('change', false, true);"
- "languageSelect.dispatchEvent(event);",
- user_id_1_.c_str(),
- kPublicSessionLocale)));
-
- // Change the list of recommended locales.
- SetRecommendedLocales(kRecommendedLocales2, arraysize(kRecommendedLocales1));
- device_local_account_policy_.payload().mutable_userdisplayname()->set_value(
- kDisplayName1);
- UploadAndInstallDeviceLocalAccountPolicy();
- broker->core()->store()->Load();
- WaitForDisplayName(user_id_1_, kDisplayName1);
-
- // Verify that the manually selected locale is still selected.
- ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_,
- get_selected_locale,
- &selected_locale));
- EXPECT_EQ(kPublicSessionLocale, selected_locale);
-
- // The UI will request an updated list of keyboard layouts at this point. Wait
- // for the constructions of this list to finish.
- WaitForGetKeyboardLayoutsForLocaleToFinish();
-
- // Manually select a different keyboard layout.
- ASSERT_TRUE(content::ExecuteScript(
- contents_,
- base::StringPrintf(
- "document.getElementById('pod-row').getPodWithUsername_('%s')"
- " .querySelector('.keyboard-select').value = '%s';",
- user_id_1_.c_str(),
- public_session_input_method_id_.c_str())));
-
- // Click on a different pod, causing focus to shift away and the pod to
- // contract.
- ASSERT_TRUE(content::ExecuteScript(
- contents_,
- base::StringPrintf(
- "document.getElementById('pod-row').getPodWithUsername_('%s')"
- " .click();",
- user_id_2_.c_str())));
-
- // Click on the pod again, causing it to expand again. Verify that the pod has
- // kept all its state (the advanced form is being shown, the manually selected
- // locale and keyboard layout are selected).
- ASSERT_TRUE(content::ExecuteScriptAndExtractString(
- contents_,
- base::StringPrintf(
- "var pod ="
- " document.getElementById('pod-row').getPodWithUsername_('%s');"
- "pod.click();"
- "var state = {};"
- "state.advanced = pod.classList.contains('advanced');"
- "state.locale = pod.querySelector('.language-select').value;"
- "state.keyboardLayout = pod.querySelector('.keyboard-select').value;"
- "console.log(JSON.stringify(state));"
- "domAutomationController.send(JSON.stringify(state));",
- user_id_1_.c_str()),
- &json));
- LOG(ERROR) << json;
- value_ptr.reset(base::JSONReader::Read(json));
- const base::DictionaryValue* state = NULL;
- ASSERT_TRUE(value_ptr);
- ASSERT_TRUE(value_ptr->GetAsDictionary(&state));
- EXPECT_TRUE(state->GetBoolean("advanced", &advanced));
- EXPECT_TRUE(advanced);
- EXPECT_TRUE(state->GetString("locale", &selected_locale));
- EXPECT_EQ(kPublicSessionLocale, selected_locale);
- std::string selected_keyboard_layout;
- EXPECT_TRUE(state->GetString("keyboardLayout", &selected_keyboard_layout));
- EXPECT_EQ(public_session_input_method_id_, selected_keyboard_layout);
-
- // Click the enter button to start the session.
- ASSERT_TRUE(content::ExecuteScript(
- contents_,
- base::StringPrintf(
- "document.getElementById('pod-row').getPodWithUsername_('%s')"
- " .querySelector('.enter-button').click();",
- user_id_1_.c_str())));
-
- WaitForSessionStart();
-
- // Verify that the locale and keyboard layout have been applied.
- EXPECT_EQ(kPublicSessionLocale, g_browser_process->GetApplicationLocale());
- EXPECT_EQ(public_session_input_method_id_,
- chromeos::input_method::InputMethodManager::Get()->
- GetCurrentInputMethod().id());
-}
-
IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest,
- AutoLoginWithoutRecommendedLocales) {
- const std::string initial_locale = g_browser_process->GetApplicationLocale();
-
- UploadAndInstallDeviceLocalAccountPolicy();
- AddPublicSessionToDevicePolicy(kAccountId1);
- EnableAutoLogin();
-
- WaitForPolicy();
-
- WaitForSessionStart();
-
- // Verify that the locale has not changed and the first keyboard layout
- // applicable to the locale was chosen.
- EXPECT_EQ(initial_locale, g_browser_process->GetApplicationLocale());
- VerifyKeyboardLayoutMatchesLocale();
-}
-
-IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest,
- AutoLoginWithRecommendedLocales) {
- // Specify recommended locales.
- SetRecommendedLocales(kRecommendedLocales1, arraysize(kRecommendedLocales1));
- UploadAndInstallDeviceLocalAccountPolicy();
- AddPublicSessionToDevicePolicy(kAccountId1);
- EnableAutoLogin();
-
- WaitForPolicy();
-
- WaitForSessionStart();
-
- // Verify that the first recommended locale has been applied and the first
- // keyboard layout applicable to the locale was chosen.
- EXPECT_EQ(kRecommendedLocales1[0], g_browser_process->GetApplicationLocale());
- VerifyKeyboardLayoutMatchesLocale();
-}
-
-IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, TermsOfServiceWithLocaleSwitch) {
+ SelectLanguageAndKeyboardWithTermsOfService) {
// Specify Terms of Service URL.
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
device_local_account_policy_.payload().mutable_termsofserviceurl()->set_value(
@@ -1795,50 +1377,25 @@
UploadAndInstallDeviceLocalAccountPolicy();
AddPublicSessionToDevicePolicy(kAccountId1);
+ // Log in to the device-local account with a specific locale and keyboard
+ // layout.
WaitForPolicy();
+ ASSERT_NO_FATAL_FAILURE(WaitForLoginUI());
+ ASSERT_NO_FATAL_FAILURE(
+ StartLogin(kPublicSessionLocale, public_session_input_method_id_));
- // Select a different locale.
- ASSERT_TRUE(content::ExecuteScript(
- contents_,
- base::StringPrintf(
- "var languageSelect = document.getElementById('pod-row')"
- " .getPodWithUsername_('%s').querySelector('.language-select');"
- "languageSelect.value = '%s';"
- "var event = document.createEvent('HTMLEvents');"
- "event.initEvent('change', false, true);"
- "languageSelect.dispatchEvent(event);",
- user_id_1_.c_str(),
- kPublicSessionLocale)));
-
- // The UI will have requested an updated list of keyboard layouts at this
- // point. Wait for the constructions of this list to finish.
- WaitForGetKeyboardLayoutsForLocaleToFinish();
-
// Set up an observer that will quit the message loop when login has succeeded
// and the first wizard screen, if any, is being shown.
base::RunLoop login_wait_run_loop;
chromeos::MockAuthStatusConsumer login_status_consumer;
EXPECT_CALL(login_status_consumer, OnAuthSuccess(_)).Times(1).WillOnce(
InvokeWithoutArgs(&login_wait_run_loop, &base::RunLoop::Quit));
+
+ // Spin the loop until the observer fires. Then, unregister the observer.
chromeos::ExistingUserController* controller =
chromeos::ExistingUserController::current_controller();
ASSERT_TRUE(controller);
controller->set_login_status_consumer(&login_status_consumer);
-
- // Manually select a different keyboard layout and click the enter button to
- // start the session.
- ASSERT_TRUE(content::ExecuteScript(
- contents_,
- base::StringPrintf(
- "var pod ="
- " document.getElementById('pod-row').getPodWithUsername_('%s');"
- "pod.querySelector('.keyboard-select').value = '%s';"
- "pod.querySelector('.enter-button').click();",
- user_id_1_.c_str(),
- public_session_input_method_id_.c_str())));
-
- // Spin the loop until the login observer fires. Then, unregister the
- // observer.
login_wait_run_loop.Run();
controller->set_login_status_consumer(NULL);
@@ -1851,8 +1408,10 @@
wizard_controller->current_screen()->GetName());
// Wait for the Terms of Service to finish downloading.
+ content::WebContents* contents = NULL;
+ ASSERT_NO_FATAL_FAILURE(GetWebContents(&contents));
bool done = false;
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool(contents_,
+ ASSERT_TRUE(content::ExecuteScriptAndExtractBool(contents,
"var screenElement = document.getElementById('terms-of-service');"
"function SendReplyIfDownloadDone() {"
" if (screenElement.classList.contains('tos-loading'))"
@@ -1875,7 +1434,7 @@
GetCurrentInputMethod().id());
// Click the accept button.
- ASSERT_TRUE(content::ExecuteScript(contents_,
+ ASSERT_TRUE(content::ExecuteScript(contents,
"$('tos-accept-button').click();"));
WaitForSessionStart();
@@ -1903,7 +1462,7 @@
AddPublicSessionToDevicePolicy(kAccountId1);
WaitForPolicy();
-
+ ASSERT_NO_FATAL_FAILURE(WaitForLoginUI());
ASSERT_NO_FATAL_FAILURE(StartLogin(std::string(), std::string()));
// Set up an observer that will quit the message loop when login has succeeded
@@ -1931,8 +1490,10 @@
// Wait for the Terms of Service to finish downloading, then get the status of
// the screen's UI elements.
+ content::WebContents* contents = NULL;
+ ASSERT_NO_FATAL_FAILURE(GetWebContents(&contents));
std::string json;
- ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents_,
+ ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents,
"var screenElement = document.getElementById('terms-of-service');"
"function SendReplyIfDownloadDone() {"
" if (screenElement.classList.contains('tos-loading'))"
@@ -1960,7 +1521,7 @@
&json));
scoped_ptr<base::Value> value_ptr(base::JSONReader::Read(json));
const base::DictionaryValue* status = NULL;
- ASSERT_TRUE(value_ptr);
+ ASSERT_TRUE(value_ptr.get());
ASSERT_TRUE(value_ptr->GetAsDictionary(&status));
std::string heading;
EXPECT_TRUE(status->GetString("heading", &heading));
@@ -2009,7 +1570,7 @@
EXPECT_TRUE(accept_enabled);
// Click the accept button.
- ASSERT_TRUE(content::ExecuteScript(contents_,
+ ASSERT_TRUE(content::ExecuteScript(contents,
"$('tos-accept-button').click();"));
WaitForSessionStart();

Powered by Google App Engine
This is Rietveld 408576698