Index: chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc |
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc |
index 1c44d9a88ff64e2f9a027ea0f8485cff63ed5c16..ec11241f6aa39dde0561fac975c3730bedbcfafb 100644 |
--- a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc |
+++ b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc |
@@ -11,8 +11,10 @@ |
#include "base/command_line.h" |
#include "base/strings/string_util.h" |
#include "chrome/app/chrome_command_ids.h" |
+#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" |
#include "chrome/browser/chromeos/accessibility/speech_monitor.h" |
+#include "chrome/browser/chromeos/login/login_manager_test.h" |
#include "chrome/browser/chromeos/login/ui/login_display_host.h" |
#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" |
#include "chrome/browser/chromeos/login/ui/webui_login_view.h" |
@@ -62,28 +64,22 @@ class LoggedInSpokenFeedbackTest : public InProcessBrowserTest { |
} |
void TearDownOnMainThread() override { |
- AccessibilityManager::SetBrailleControllerForTest(NULL); |
+ AccessibilityManager::SetBrailleControllerForTest(nullptr); |
} |
void SendKeyPress(ui::KeyboardCode key) { |
- ASSERT_NO_FATAL_FAILURE( |
- ASSERT_TRUE( |
- ui_test_utils::SendKeyPressToWindowSync( |
- NULL, key, false, false, false, false))); |
+ ASSERT_NO_FATAL_FAILURE(ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync( |
+ nullptr, key, false, false, false, false))); |
} |
void SendKeyPressWithControl(ui::KeyboardCode key) { |
- ASSERT_NO_FATAL_FAILURE( |
- ASSERT_TRUE( |
- ui_test_utils::SendKeyPressToWindowSync( |
- NULL, key, true, false, false, false))); |
+ ASSERT_NO_FATAL_FAILURE(ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync( |
+ nullptr, key, true, false, false, false))); |
} |
void SendKeyPressWithSearchAndShift(ui::KeyboardCode key) { |
- ASSERT_NO_FATAL_FAILURE( |
- ASSERT_TRUE( |
- ui_test_utils::SendKeyPressToWindowSync( |
- NULL, key, false, true, false, true))); |
+ ASSERT_NO_FATAL_FAILURE(ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync( |
+ nullptr, key, false, true, false, true))); |
} |
void RunJavaScriptInChromeVoxBackgroundPage(const std::string& script) { |
@@ -102,7 +98,7 @@ class LoggedInSpokenFeedbackTest : public InProcessBrowserTest { |
"window.ontouchstart = function() {};"); |
} |
- bool PerformAcceleratorAction(ash::AcceleratorAction action) { |
+ bool PerformAcceleratorAction(ash::AcceleratorAction action) { |
ash::AcceleratorController* controller = |
ash::Shell::GetInstance()->accelerator_controller(); |
return controller->PerformActionIfEnabled(action); |
@@ -558,20 +554,29 @@ IN_PROC_BROWSER_TEST_F(GuestSpokenFeedbackTest, FocusToolbar) { |
// Spoken feedback tests of the out-of-box experience. |
// |
-class OobeSpokenFeedbackTest : public InProcessBrowserTest { |
+class OobeSpokenFeedbackTest : public LoginManagerTest { |
protected: |
- OobeSpokenFeedbackTest() {} |
+ OobeSpokenFeedbackTest() : LoginManagerTest(false) {} |
~OobeSpokenFeedbackTest() override {} |
void SetUpCommandLine(base::CommandLine* command_line) override { |
- command_line->AppendSwitch(chromeos::switches::kLoginManager); |
- command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests); |
- command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "user"); |
+ LoginManagerTest::SetUpCommandLine(command_line); |
+ // Many bots don't have keyboard/mice which triggers the HID detection |
+ // dialog in the OOBE. Avoid confusing the tests with that. |
+ command_line->AppendSwitch(chromeos::switches::kDisableHIDDetectionOnOOBE); |
} |
- void SetUpOnMainThread() override { |
- AccessibilityManager::Get()-> |
- SetProfileForTest(ProfileHelper::GetSigninProfile()); |
+ // Waits until the OOBE screen signals it is ready. |
+ void WaitUntilJSIsReady() { |
+ LoginDisplayHostImpl* host = static_cast<LoginDisplayHostImpl*>( |
+ LoginDisplayHostImpl::default_host()); |
+ ASSERT_NE(nullptr, host); |
+ chromeos::OobeUI* oobe_ui = host->GetOobeUI(); |
+ ASSERT_NE(nullptr, oobe_ui); |
+ base::RunLoop run_loop; |
+ const bool oobe_ui_ready = oobe_ui->IsJSReady(run_loop.QuitClosure()); |
+ if (!oobe_ui_ready) |
+ run_loop.Run(); |
} |
SpeechMonitor speech_monitor_; |
@@ -580,8 +585,7 @@ class OobeSpokenFeedbackTest : public InProcessBrowserTest { |
DISALLOW_COPY_AND_ASSIGN(OobeSpokenFeedbackTest); |
}; |
-// Test is flaky: http://crbug.com/346797 |
-IN_PROC_BROWSER_TEST_F(OobeSpokenFeedbackTest, DISABLED_SpokenFeedbackInOobe) { |
+IN_PROC_BROWSER_TEST_F(OobeSpokenFeedbackTest, SpokenFeedbackInOobe) { |
ui_controls::EnableUIControls(); |
ASSERT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled()); |
@@ -590,18 +594,34 @@ IN_PROC_BROWSER_TEST_F(OobeSpokenFeedbackTest, DISABLED_SpokenFeedbackInOobe) { |
views::Widget* widget = web_ui_login_view->GetWidget(); |
gfx::NativeWindow window = widget->GetNativeWindow(); |
+ WaitUntilJSIsReady(); |
+ // We expect to be in the language select dropdown for this test to wwork, |
David Tseng
2015/01/27 18:16:45
nit: new line above
dmazzoni
2015/01/27 18:38:44
Also wwork -> work
|
+ // so fail early if that's not the case. |
+ ASSERT_TRUE( |
+ js_checker().GetBool("document.activeElement.id == 'language-select'")); |
AccessibilityManager::Get()->EnableSpokenFeedback( |
true, ui::A11Y_NOTIFICATION_NONE); |
- EXPECT_TRUE(speech_monitor_.SkipChromeVoxEnabledMessage()); |
- |
- EXPECT_EQ("Select your language:", speech_monitor_.GetNextUtterance()); |
- EXPECT_EQ("English ( United States)", speech_monitor_.GetNextUtterance()); |
+ ASSERT_TRUE(speech_monitor_.SkipChromeVoxEnabledMessage()); |
+ // There's no guarantee that ChromeVox speaks anything when injected after |
+ // the page loads, which is by design. Tab forward and then backward |
+ // to make sure we get the right feedback from the language and keyboard |
+ // selection fields. |
+ ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync( |
+ window, ui::VKEY_TAB, false, false, false, false)); |
+ |
+ while (speech_monitor_.GetNextUtterance() != "Select your keyboard:") { |
+ } |
+ LOG(ERROR) << "Got select your keyboard"; |
David Tseng
2015/01/27 18:16:45
nit: remove
|
+ EXPECT_EQ("U S", speech_monitor_.GetNextUtterance()); |
EXPECT_TRUE(MatchPattern(speech_monitor_.GetNextUtterance(), |
"Combo box * of *")); |
- ASSERT_TRUE( |
- ui_test_utils::SendKeyPressToWindowSync( |
- window, ui::VKEY_TAB, false, false, false, false)); |
- EXPECT_EQ("Select your keyboard:", speech_monitor_.GetNextUtterance()); |
+ ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync( |
+ window, ui::VKEY_TAB, false, true /*shift*/, false, false)); |
+ while (speech_monitor_.GetNextUtterance() != "Select your language:") { |
+ } |
+ EXPECT_EQ("English ( United States)", speech_monitor_.GetNextUtterance()); |
+ EXPECT_TRUE( |
+ MatchPattern(speech_monitor_.GetNextUtterance(), "Combo box * of *")); |
} |
} // namespace chromeos |