15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/login/wizard_controller.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/basictypes.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/command_line.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/compiler_specific.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/path_service.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/prefs/pref_service.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/prefs/pref_service_factory.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/prefs/testing_pref_store.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/run_loop.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/string_util.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_shutdown.h" 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/base/locale_util.h" 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/geolocation/simple_geolocation_provider.h" 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h" 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/chromeos/login/enrollment/mock_auto_enrollment_check_screen.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/enrollment/mock_enrollment_screen.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/existing_user_controller.h" 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/error_screen.h" 29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/chromeos/login/screens/hid_detection_screen.h" 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/mock_eula_screen.h" 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/mock_network_screen.h" 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/mock_update_screen.h" 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/network_screen.h" 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/reset_screen.h" 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/user_image_screen.h" 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/wrong_hwid_screen.h" 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/startup_utils.h" 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/test/wizard_in_process_browser_test.h" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/test_login_utils.h" 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/webui_login_view.h" 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h" 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/policy/server_backed_device_state.h" 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/profiles/profile_helper.h" 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/timezone/timezone_request.h" 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/chrome_paths.h" 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/common/pref_names.h" 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/grit/generated_resources.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chromeos/audio/cras_audio_handler.h" 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 55a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/chromeos_test_utils.h" 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chromeos/dbus/fake_session_manager_client.h" 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/auth/key.h" 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/auth/mock_auth_status_consumer.h" 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/login/auth/mock_authenticator.h" 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/auth/user_context.h" 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chromeos/network/network_state.h" 63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_state_handler.h" 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chromeos/settings/timezone_settings.h" 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/test/browser_test_utils.h" 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/test/test_utils.h" 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h" 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "net/url_request/url_fetcher_impl.h" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/icu/source/common/unicode/locid.h" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/accelerators/accelerator.h" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)using ::testing::Exactly; 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing ::testing::Invoke; 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)using ::testing::Return; 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kUsername[] = "test_user@managedchrome.com"; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPassword[] = "test_password"; 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kGeolocationResponseBody[] = 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "{\n" 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"location\": {\n" 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"lat\": 51.0,\n" 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"lng\": -0.1\n" 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " },\n" 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"accuracy\": 1200.4\n" 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "}"; 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Timezone should not match kGeolocationResponseBody to check that exactly 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// this value will be used. 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kTimezoneResponseBody[] = 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "{\n" 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"dstOffset\" : 0.0,\n" 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"rawOffset\" : -32400.0,\n" 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"status\" : \"OK\",\n" 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"timeZoneId\" : \"America/Anchorage\",\n" 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"timeZoneName\" : \"Pacific Standard Time\"\n" 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "}"; 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PrefStoreStub : public TestingPrefStore { 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // TestingPrefStore overrides: 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual PrefReadError GetReadError() const OVERRIDE { 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return PersistentPrefStore::PREF_READ_ERROR_JSON_PARSE; 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual bool IsInitializationComplete() const OVERRIDE { 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~PrefStoreStub() {} 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct SwitchLanguageTestData { 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SwitchLanguageTestData() : success(false), done(false) {} 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string requested_locale; 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string loaded_locale; 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool success; 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool done; 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void OnLocaleSwitched(SwitchLanguageTestData* self, 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& locale, 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& loaded_locale, 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const bool success) { 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self->requested_locale = locale; 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self->loaded_locale = loaded_locale; 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self->success = success; 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self->done = true; 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RunSwitchLanguageTest(const std::string& locale, 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& expected_locale, 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const bool expect_success) { 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SwitchLanguageTestData data; 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<locale_util::SwitchLanguageCallback> callback( 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new locale_util::SwitchLanguageCallback( 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&OnLocaleSwitched, base::Unretained(&data)))); 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) locale_util::SwitchLanguage(locale, true, false, callback.Pass()); 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Token writing moves control to BlockingPool and back. 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RunAllBlockingPoolTasksUntilIdle(); 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(data.done, true); 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(data.requested_locale, locale); 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(data.loaded_locale, expected_locale); 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(data.success, expect_success); 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SetUpCrasAndEnableChromeVox(int volume_percent, bool mute_on) { 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AccessibilityManager* a11y = AccessibilityManager::Get(); 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CrasAudioHandler* cras = CrasAudioHandler::Get(); 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Audio output is at |volume_percent| and |mute_on|. Spoken feedback 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // is disabled. 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cras->SetOutputVolumePercent(volume_percent); 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cras->SetOutputMute(mute_on); 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) a11y->EnableSpokenFeedback(false, ash::A11Y_NOTIFICATION_NONE); 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Spoken feedback is enabled. 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) a11y->EnableSpokenFeedback(true, ash::A11Y_NOTIFICATION_NONE); 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 174effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid QuitLoopOnAutoEnrollmentProgress( 175effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policy::AutoEnrollmentState expected_state, 176effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::RunLoop* loop, 177effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policy::AutoEnrollmentState actual_state) { 178effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (expected_state == actual_state) 179effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch loop->Quit(); 180effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 181effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 182effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid WaitForAutoEnrollmentState(policy::AutoEnrollmentState state) { 183effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::RunLoop loop; 184effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AutoEnrollmentController* auto_enrollment_controller = 185effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LoginDisplayHostImpl::default_host()->GetAutoEnrollmentController(); 186effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<AutoEnrollmentController::ProgressCallbackList::Subscription> 187effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch progress_subscription( 188effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch auto_enrollment_controller->RegisterProgressCallback( 189effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(&QuitLoopOnAutoEnrollmentProgress, state, &loop))); 190effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch loop.Run(); 191effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 192effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T, class H> 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockOutShowHide : public T { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template <class P> explicit MockOutShowHide(P p) : T(p) {} 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template <class P> MockOutShowHide(P p, H* actor) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : T(p, actor), actor_(actor) {} 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) H* actor() const { return actor_.get(); } 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(Show, void()); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(Hide, void()); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<H> actor_; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MOCK(mock_var, screen_name, mocked_class, actor_class) \ 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mock_var = new MockOutShowHide<mocked_class, actor_class>( \ 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WizardController::default_controller(), new actor_class); \ 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WizardController::default_controller() \ 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->screens_[WizardController::screen_name] = make_linked_ptr(mock_var); \ 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*mock_var, Show()).Times(0); \ 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_var, Hide()).Times(0); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WizardControllerTest : public WizardInProcessBrowserTest { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardControllerTest() : WizardInProcessBrowserTest( 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardController::kTestNoScreenName) {} 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WizardControllerTest() {} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AccessibilityManager::Get()-> 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetProfileForTest(ProfileHelper::GetSigninProfile()); 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WizardInProcessBrowserTest::SetUpOnMainThread(); 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 233effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ErrorScreen* GetErrorScreen() { 234effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return static_cast<ScreenObserver*>(WizardController::default_controller()) 235effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ->GetErrorScreen(); 236effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 237effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::WebContents* GetWebContents() { 2390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LoginDisplayHostImpl* host = static_cast<LoginDisplayHostImpl*>( 2400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LoginDisplayHostImpl::default_host()); 2410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!host) 2420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return NULL; 2430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch WebUILoginView* webui_login_view = host->GetWebUILoginView(); 2440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!webui_login_view) 2450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return NULL; 2460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return webui_login_view->GetWebContents(); 2470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 2480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void WaitUntilJSIsReady() { 2500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LoginDisplayHostImpl* host = static_cast<LoginDisplayHostImpl*>( 2510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LoginDisplayHostImpl::default_host()); 2520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!host) 2530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 2540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch chromeos::OobeUI* oobe_ui = host->GetOobeUI(); 2550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!oobe_ui) 2560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 2570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::RunLoop run_loop; 2580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const bool oobe_ui_ready = oobe_ui->IsJSReady(run_loop.QuitClosure()); 2590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!oobe_ui_ready) 2600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch run_loop.Run(); 2610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 2620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool JSExecuteBooleanExpression(const std::string& expression) { 2640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool result; 2650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 2660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetWebContents(), 2670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "window.domAutomationController.send(!!(" + expression + "));", 2680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch &result)); 2690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return result; 2700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 2710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void CheckCurrentScreen(const std::string& screen_name) { 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(WizardController::default_controller()->GetScreen(screen_name), 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WizardController::default_controller()->current_screen()); 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WizardControllerTest); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerTest, SwitchLanguage) { 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(WizardController::default_controller() != NULL); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardController::default_controller()->AdvanceToScreen( 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardController::kNetworkScreenName); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checking the default locale. Provided that the profile is cleared in SetUp. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("en-US", g_browser_process->GetApplicationLocale()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("en", icu::Locale::getDefault().getLanguage()); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(base::i18n::IsRTL()); 29046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::string16 en_str = 29146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_NETWORK_SELECTION_TITLE); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RunSwitchLanguageTest("fr", "fr", true); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("fr", g_browser_process->GetApplicationLocale()); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("fr", icu::Locale::getDefault().getLanguage()); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(base::i18n::IsRTL()); 29746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::string16 fr_str = 29846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_NETWORK_SELECTION_TITLE); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(en_str, fr_str); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RunSwitchLanguageTest("ar", "ar", true); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("ar", g_browser_process->GetApplicationLocale()); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("ar", icu::Locale::getDefault().getLanguage()); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(base::i18n::IsRTL()); 30646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::string16 ar_str = 30746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_NETWORK_SELECTION_TITLE); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(fr_str, ar_str); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerTest, VolumeIsChangedForChromeVox) { 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetUpCrasAndEnableChromeVox(75 /* volume_percent */, true /* mute_on */); 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check that output is unmuted now and at some level. 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CrasAudioHandler* cras = CrasAudioHandler::Get(); 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_FALSE(cras->IsOutputMuted()); 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(WizardController::kMinAudibleOutputVolumePercent, 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cras->GetOutputVolumePercent()); 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerTest, VolumeIsUnchangedForChromeVox) { 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetUpCrasAndEnableChromeVox(75 /* volume_percent */, false /* mute_on */); 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check that output is unmuted now and at some level. 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CrasAudioHandler* cras = CrasAudioHandler::Get(); 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_FALSE(cras->IsOutputMuted()); 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(75, cras->GetOutputVolumePercent()); 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerTest, VolumeIsAdjustedForChromeVox) { 3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetUpCrasAndEnableChromeVox(5 /* volume_percent */, false /* mute_on */); 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check that output is unmuted now and at some level. 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CrasAudioHandler* cras = CrasAudioHandler::Get(); 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_FALSE(cras->IsOutputMuted()); 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(WizardController::kMinAudibleOutputVolumePercent, 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cras->GetOutputVolumePercent()); 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class WizardControllerTestURLFetcherFactory 342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : public net::TestURLFetcherFactory { 343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 344cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual net::URLFetcher* CreateURLFetcher( 345cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int id, 346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& url, 347cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::URLFetcher::RequestType request_type, 348cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::URLFetcherDelegate* d) OVERRIDE { 349cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (StartsWithASCII( 350cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url.spec(), 351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SimpleGeolocationProvider::DefaultGeolocationProviderURL().spec(), 352cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) true)) { 353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return new net::FakeURLFetcher(url, 354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) d, 355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string(kGeolocationResponseBody), 356cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::HTTP_OK, 357cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::URLRequestStatus::SUCCESS); 358cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 359cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (StartsWithASCII(url.spec(), 360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chromeos::DefaultTimezoneProviderURL().spec(), 361cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) true)) { 362cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return new net::FakeURLFetcher(url, 363cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) d, 364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string(kTimezoneResponseBody), 365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::HTTP_OK, 366cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::URLRequestStatus::SUCCESS); 367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return net::TestURLFetcherFactory::CreateURLFetcher( 369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) id, url, request_type, d); 370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~WizardControllerTestURLFetcherFactory() {} 372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TimeZoneTestRunner { 375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 376cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void OnResolved() { loop_.Quit(); } 377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void Run() { loop_.Run(); } 378cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 379cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 380cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::RunLoop loop_; 381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 382cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WizardControllerFlowTest : public WizardControllerTest { 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardControllerFlowTest() {} 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overriden from InProcessBrowserTest: 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardControllerTest::SetUpOnMainThread(); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that OOBE is run as an "official" build. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardController::default_controller()->is_official_build_ = true; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear portal list (as it is by default in OOBE). 394868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NetworkHandler::Get()->network_state_handler()->SetCheckPortalList(""); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up the mocks for all screens. 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK(mock_network_screen_, 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kNetworkScreenName, 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockNetworkScreen, 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockNetworkScreenActor); 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK(mock_update_screen_, 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kUpdateScreenName, 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockUpdateScreen, 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockUpdateScreenActor); 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK(mock_eula_screen_, 4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEulaScreenName, 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockEulaScreen, 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockEulaScreenActor); 4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK(mock_enrollment_screen_, 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEnrollmentScreenName, 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockEnrollmentScreen, 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockEnrollmentScreenActor); 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK(mock_auto_enrollment_check_screen_, 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kAutoEnrollmentCheckScreenName, 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockAutoEnrollmentCheckScreen, 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockAutoEnrollmentCheckScreenActor); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Switch to the initial screen. 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, WizardController::default_controller()->current_screen()); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Show()).Times(1); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardController::default_controller()->AdvanceToScreen( 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardController::kNetworkScreenName); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void TearDown() { 426cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (fallback_fetcher_factory_) { 427cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) fetcher_factory_.reset(); 428cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::URLFetcherImpl::set_factory(fallback_fetcher_factory_.get()); 429cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) fallback_fetcher_factory_.reset(); 430cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 431cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 432cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 433cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void InitTimezoneResolver() { 434cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) fallback_fetcher_factory_.reset(new WizardControllerTestURLFetcherFactory); 435cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::URLFetcherImpl::set_factory(NULL); 436cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) fetcher_factory_.reset( 437cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) new net::FakeURLFetcherFactory(fallback_fetcher_factory_.get())); 438cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 439cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) network_portal_detector_ = new NetworkPortalDetectorTestImpl(); 440cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetworkPortalDetector::InitializeForTesting(network_portal_detector_); 441cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 442cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetworkPortalDetector::CaptivePortalState online_state; 443cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; 444cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) online_state.response_code = 204; 445f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 446f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Default detworks happens to be usually "eth1" in tests. 447f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const NetworkState* default_network = 448f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NetworkHandler::Get()->network_state_handler()->DefaultNetwork(); 449f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_portal_detector_->SetDefaultNetworkForTesting( 451f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) default_network->guid()); 452cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) network_portal_detector_->SetDetectionResultsForTesting( 453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default_network->guid(), 454cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) online_state); 455cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 456cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnExit(ScreenObserver::ExitCodes exit_code) { 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardController::default_controller()->OnExit(exit_code); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 461cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chromeos::SimpleGeolocationProvider* GetGeolocationProvider() { 462cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return WizardController::default_controller()->geolocation_provider_.get(); 463cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 464cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 465cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void WaitUntilTimezoneResolved() { 466cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<TimeZoneTestRunner> runner(new TimeZoneTestRunner); 467cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!WizardController::default_controller() 468cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ->SetOnTimeZoneResolvedForTesting( 469cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Bind(&TimeZoneTestRunner::OnResolved, 470cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Unretained(runner.get())))) 471cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 472cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 473cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) runner->Run(); 474cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 475cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 47646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void ResetAutoEnrollmentCheckScreen() { 4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WizardController::default_controller()->screens_.erase( 4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WizardController::kAutoEnrollmentCheckScreenName); 47946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 48046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockOutShowHide<MockNetworkScreen, MockNetworkScreenActor>* 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_network_screen_; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockOutShowHide<MockUpdateScreen, MockUpdateScreenActor>* mock_update_screen_; 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockOutShowHide<MockEulaScreen, MockEulaScreenActor>* mock_eula_screen_; 485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockOutShowHide<MockEnrollmentScreen, 486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockEnrollmentScreenActor>* mock_enrollment_screen_; 48746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MockOutShowHide<MockAutoEnrollmentCheckScreen, 48846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MockAutoEnrollmentCheckScreenActor>* mock_auto_enrollment_check_screen_; 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 491cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetworkPortalDetectorTestImpl* network_portal_detector_; 492cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 493cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Use a test factory as a fallback so we don't have to deal with other 494cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // requests. 495cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<WizardControllerTestURLFetcherFactory> fallback_fetcher_factory_; 496cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<net::FakeURLFetcherFactory> fetcher_factory_; 497cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WizardControllerFlowTest); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowMain) { 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ExistingUserController::current_controller() == NULL); 5031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 5040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch WaitUntilJSIsReady(); 5060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Check visibility of the header bar. 5080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_FALSE(JSExecuteBooleanExpression("$('login-header-bar').hidden")); 5090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnExit(ScreenObserver::NETWORK_CONNECTED); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEulaScreenName); 5150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Header bar should still be visible. 5170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_FALSE(JSExecuteBooleanExpression("$('login-header-bar').hidden")); 5180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_update_screen_, Show()).Times(1); 522cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Enable TimeZone resolve 523cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InitTimezoneResolver(); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnExit(ScreenObserver::EULA_ACCEPTED); 525cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(GetGeolocationProvider()); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Let update screen smooth time process (time = 0ms). 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kUpdateScreenName); 53046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, Hide()).Times(1); 53146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Show()).Times(1); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnExit(ScreenObserver::UPDATE_INSTALLED); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kAutoEnrollmentCheckScreenName); 53546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(0); 53646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Show()).Times(0); 53746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) OnExit(ScreenObserver::ENTERPRISE_AUTO_ENROLLMENT_CHECK_COMPLETED); 53846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ExistingUserController::current_controller() == NULL); 540d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ("ethernet,wifi,cellular", 541d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) NetworkHandler::Get()->network_state_handler() 542d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ->GetCheckPortalListForTest()); 543cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 544cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WaitUntilTimezoneResolved(); 545cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ("America/Anchorage", 546cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::UTF16ToUTF8(chromeos::system::TimezoneSettings::GetInstance() 547cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ->GetCurrentTimezoneID())); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowErrorUpdate) { 5511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(0); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_update_screen_, Show()).Times(0); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnExit(ScreenObserver::NETWORK_CONNECTED); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEulaScreenName); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_update_screen_, Show()).Times(1); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnExit(ScreenObserver::EULA_ACCEPTED); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Let update screen smooth time process (time = 0ms). 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kUpdateScreenName); 56746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, Hide()).Times(1); 56846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Show()).Times(1); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnExit(ScreenObserver::UPDATE_ERROR_UPDATING); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kAutoEnrollmentCheckScreenName); 57246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(0); 57346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Show()).Times(0); 57446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) OnExit(ScreenObserver::ENTERPRISE_AUTO_ENROLLMENT_CHECK_COMPLETED); 57546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ExistingUserController::current_controller() == NULL); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowSkipUpdateEnroll) { 5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 58146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(0); 58246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); 58346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, Show()).Times(0); 58446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); 58546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) OnExit(ScreenObserver::NETWORK_CONNECTED); 58646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEulaScreenName); 58846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); 58946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(0); 59046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, Show()).Times(0); 59146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WizardController::default_controller()->SkipUpdateEnrollAfterEula(); 59246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_->actor(), 59346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetParameters(mock_enrollment_screen_, 59446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EnrollmentScreenActor::ENROLLMENT_MODE_MANUAL, 59546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "")) 59646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) .Times(1); 597f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Show()).Times(1); 598f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) OnExit(ScreenObserver::EULA_ACCEPTED); 599f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 600f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kAutoEnrollmentCheckScreenName); 602f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(1); 60346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_, Show()).Times(1); 60446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_, Hide()).Times(0); 605f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) OnExit(ScreenObserver::ENTERPRISE_AUTO_ENROLLMENT_CHECK_COMPLETED); 60646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 60746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEnrollmentScreenName); 60946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(ExistingUserController::current_controller() == NULL); 61046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ("ethernet,wifi,cellular", 61146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NetworkHandler::Get()->network_state_handler() 61246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ->GetCheckPortalListForTest()); 61346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 61446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowEulaDeclined) { 6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(0); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnExit(ScreenObserver::NETWORK_CONNECTED); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEulaScreenName); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Show()).Times(1); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Hide()).Times(0); // last transition 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnExit(ScreenObserver::EULA_BACK); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, 632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ControlFlowEnrollmentCompleted) { 6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(0); 635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_->actor(), 636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetParameters(mock_enrollment_screen_, 637effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EnrollmentScreenActor::ENROLLMENT_MODE_MANUAL, 638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "")) 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(1); 640c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_, Show()).Times(1); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WizardController::default_controller()->AdvanceToScreen( 644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WizardController::kEnrollmentScreenName); 6451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEnrollmentScreenName); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnExit(ScreenObserver::ENTERPRISE_ENROLLMENT_COMPLETED); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ExistingUserController::current_controller() == NULL); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, 652c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ControlFlowAutoEnrollmentCompleted) { 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WizardController::default_controller()->SkipPostLoginScreensForTesting(); 6541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 655c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(0); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 657cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) UserContext user_context(kUsername); 658cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) user_context.SetKey(Key(kPassword)); 659cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) user_context.SetUserIDHash(user_context.GetUserID()); 660cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LoginUtils::Set(new TestLoginUtils(user_context)); 661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MockAuthStatusConsumer mock_consumer; 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Must have a pending signin to resume after auto-enrollment: 664f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LoginDisplayHostImpl::default_host()->StartSignInScreen(LoginScreenContext()); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ExistingUserController::current_controller() == NULL); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExistingUserController::current_controller()->DoAutoEnrollment(); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExistingUserController::current_controller()->set_login_status_consumer( 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &mock_consumer); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This calls StartWizard, destroying the current controller() and its mocks; 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // don't set expectations on those objects. 671cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ExistingUserController::current_controller()->CompleteLogin(user_context); 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Run the tasks posted to complete the login: 67390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEnrollmentScreenName); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is the main expectation: after auto-enrollment, login is resumed. 677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(mock_consumer, OnAuthSuccess(_)).Times(1); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnExit(ScreenObserver::ENTERPRISE_AUTO_MAGIC_ENROLLMENT_COMPLETED); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prevent browser launch when the profile is prepared: 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_shutdown::SetTryingToQuit(true); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the tasks posted to complete the login: 68290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ControlFlowWrongHWIDScreenFromLogin) { 6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 689f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LoginDisplayHostImpl::default_host()->StartSignInScreen(LoginScreenContext()); 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ExistingUserController::current_controller() == NULL); 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExistingUserController::current_controller()->ShowWrongHWIDScreen(); 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kWrongHWIDScreenName); 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // After warning is skipped, user returns to sign-in screen. 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // And this destroys WizardController. 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnExit(ScreenObserver::WRONG_HWID_WARNING_SKIPPED); 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ExistingUserController::current_controller() == NULL); 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 701effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass WizardControllerEnrollmentFlowTest : public WizardControllerFlowTest { 702effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch protected: 703effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch WizardControllerEnrollmentFlowTest() {} 704effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 705effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 706effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch WizardControllerFlowTest::SetUpCommandLine(command_line); 707effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 708c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch command_line->AppendSwitchASCII( 709c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch switches::kEnterpriseEnableForcedReEnrollment, 710c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch chromeos::AutoEnrollmentController::kForcedReEnrollmentAlways); 711effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch command_line->AppendSwitchASCII( 712effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch switches::kEnterpriseEnrollmentInitialModulus, "1"); 713effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch command_line->AppendSwitchASCII( 714effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch switches::kEnterpriseEnrollmentModulusLimit, "2"); 715effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 716effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 717effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 718effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISALLOW_COPY_AND_ASSIGN(WizardControllerEnrollmentFlowTest); 719effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 720effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 721effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(WizardControllerEnrollmentFlowTest, 722effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ControlFlowForcedReEnrollment) { 7231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 724effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); 725effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); 726effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch OnExit(ScreenObserver::NETWORK_CONNECTED); 727effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 7281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEulaScreenName); 729effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); 730effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1); 731effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_CALL(*mock_update_screen_, Show()).Times(1); 732effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch OnExit(ScreenObserver::EULA_ACCEPTED); 733effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Let update screen smooth time process (time = 0ms). 734effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch content::RunAllPendingInMessageLoop(); 735effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 7361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kUpdateScreenName); 737effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_CALL(*mock_update_screen_, Hide()).Times(1); 73846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Show()).Times(1); 739effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch OnExit(ScreenObserver::UPDATE_INSTALLED); 740effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 74146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AutoEnrollmentCheckScreen* screen = 7421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutoEnrollmentCheckScreen::Get(WizardController::default_controller()); 74346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(screen, 74446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) WizardController::default_controller()->current_screen()); 74546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(1); 74646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) screen->Start(); 747effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Wait for auto-enrollment controller to encounter the connection error. 748effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch WaitForAutoEnrollmentState(policy::AUTO_ENROLLMENT_STATE_CONNECTION_ERROR); 749effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 750effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The error screen shows up if there's no auto-enrollment decision. 751effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(StartupUtils::IsOobeCompleted()); 752effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(GetErrorScreen(), 753effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch WizardController::default_controller()->current_screen()); 754effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::DictionaryValue device_state; 755effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch device_state.SetString(policy::kDeviceStateRestoreMode, 756effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policy::kDeviceStateRestoreModeReEnrollmentEnforced); 757effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch g_browser_process->local_state()->Set(prefs::kServerBackedDeviceState, 758effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch device_state); 759effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_CALL(*mock_enrollment_screen_, Show()).Times(1); 760effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_CALL(*mock_enrollment_screen_->actor(), 761effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch SetParameters(mock_enrollment_screen_, 762effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EnrollmentScreenActor::ENROLLMENT_MODE_FORCED, 763effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "")).Times(1); 764effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch OnExit(ScreenObserver::ENTERPRISE_AUTO_ENROLLMENT_CHECK_COMPLETED); 765effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 76646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ResetAutoEnrollmentCheckScreen(); 76746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 768effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Make sure enterprise enrollment page shows up. 7691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEnrollmentScreenName); 770effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch OnExit(ScreenObserver::ENTERPRISE_ENROLLMENT_COMPLETED); 771effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 772effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(StartupUtils::IsOobeCompleted()); 773effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 774effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 77558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class WizardControllerBrokenLocalStateTest : public WizardControllerTest { 77658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 77758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardControllerBrokenLocalStateTest() 77858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : fake_session_manager_client_(NULL) { 77958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 78058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 78158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~WizardControllerBrokenLocalStateTest() {} 78258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 78358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 78458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardControllerTest::SetUpInProcessBrowserTestFixture(); 78558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fake_session_manager_client_ = new FakeSessionManagerClient; 7871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DBusThreadManager::GetSetterForTesting()->SetSessionManagerClient( 788f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<SessionManagerClient>(fake_session_manager_client_)); 78958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 79058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 79158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 792f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::PrefServiceFactory factory; 793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) factory.set_user_prefs(make_scoped_refptr(new PrefStoreStub())); 794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) local_state_ = factory.Create(new PrefRegistrySimple()).Pass(); 79558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardController::set_local_state_for_testing(local_state_.get()); 79658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 79758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardControllerTest::SetUpOnMainThread(); 79858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 79958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Make sure that OOBE is run as an "official" build. 80058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardController::default_controller()->is_official_build_ = true; 80158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 80258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 80358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { 80458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardControllerTest::TearDownInProcessBrowserTestFixture(); 80558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 80658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 80758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 80858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FakeSessionManagerClient* fake_session_manager_client() const { 80958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return fake_session_manager_client_; 81058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 81158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 81258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 81358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<PrefService> local_state_; 81458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FakeSessionManagerClient* fake_session_manager_client_; 81558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 81658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WizardControllerBrokenLocalStateTest); 81758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 81858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 81958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerBrokenLocalStateTest, 82058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LocalStateCorrupted) { 82158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Checks that after wizard controller initialization error screen 82258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // in the proper state is displayed. 82358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(GetErrorScreen(), 82458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardController::default_controller()->current_screen()); 82558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(ErrorScreen::UI_STATE_LOCAL_STATE_ERROR, 82658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetErrorScreen()->GetUIState()); 82758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 82858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WaitUntilJSIsReady(); 82958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 83058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Checks visibility of the error message and powerwash button. 83158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_FALSE(JSExecuteBooleanExpression("$('error-message').hidden")); 83258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(JSExecuteBooleanExpression( 83358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "$('error-message').classList.contains('ui-state-local-state-error')")); 83458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(JSExecuteBooleanExpression("$('progress-dots').hidden")); 83558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(JSExecuteBooleanExpression("$('login-header-bar').hidden")); 83658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 83758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Emulates user click on the "Restart and Powerwash" button. 83858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(0, fake_session_manager_client()->start_device_wipe_call_count()); 83958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScript( 84058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetWebContents(), 84158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "$('error-message-restart-and-powerwash-button').click();")); 84258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(1, fake_session_manager_client()->start_device_wipe_call_count()); 84358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 84458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 84558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class WizardControllerProxyAuthOnSigninTest : public WizardControllerTest { 84658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 84758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardControllerProxyAuthOnSigninTest() 84858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : proxy_server_(net::SpawnedTestServer::TYPE_BASIC_AUTH_PROXY, 84958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) net::SpawnedTestServer::kLocalhost, 85058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::FilePath()) { 85158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 85258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~WizardControllerProxyAuthOnSigninTest() {} 85358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 85458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Overridden from WizardControllerTest: 85558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void SetUp() OVERRIDE { 85658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(proxy_server_.Start()); 85758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardControllerTest::SetUp(); 85858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 85958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 86058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 86158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardControllerTest::SetUpOnMainThread(); 86258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardController::default_controller()->AdvanceToScreen( 86358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WizardController::kNetworkScreenName); 86458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 86558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 86658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 86758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) command_line->AppendSwitchASCII(::switches::kProxyServer, 86858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) proxy_server_.host_port_pair().ToString()); 86958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 87058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 87158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) net::SpawnedTestServer& proxy_server() { return proxy_server_; } 87258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 87358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 87458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) net::SpawnedTestServer proxy_server_; 87558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 87658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WizardControllerProxyAuthOnSigninTest); 87758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 87858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 87958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerProxyAuthOnSigninTest, 88023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ProxyAuthDialogOnSigninScreen) { 88158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::WindowedNotificationObserver auth_needed_waiter( 88258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chrome::NOTIFICATION_AUTH_NEEDED, 88358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::NotificationService::AllSources()); 88458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 88658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 887f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LoginDisplayHostImpl::default_host()->StartSignInScreen(LoginScreenContext()); 88858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) auth_needed_waiter.Wait(); 88958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 89058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 891c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WizardControllerKioskFlowTest : public WizardControllerFlowTest { 892c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 893c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WizardControllerKioskFlowTest() {} 894c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 895c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Overridden from InProcessBrowserTest: 896c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 897c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath test_data_dir; 898a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ASSERT_TRUE(chromeos::test_utils::GetTestDataPath( 899a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) "app_mode", "kiosk_manifest", &test_data_dir)); 900c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->AppendSwitchPath( 901c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) switches::kAppOemManifestFile, 902a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) test_data_dir.AppendASCII("kiosk_manifest.json")); 903c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 904c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 905c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 906c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WizardControllerKioskFlowTest); 907c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 908c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 909c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerKioskFlowTest, 910c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ControlFlowKioskForcedEnrollment) { 911c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_->actor(), 912c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetParameters(mock_enrollment_screen_, 913effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EnrollmentScreenActor::ENROLLMENT_MODE_FORCED, 914c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "")) 915c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Times(1); 916c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 917c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(ExistingUserController::current_controller() == NULL); 9181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 919c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); 920c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); 921c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnExit(ScreenObserver::NETWORK_CONNECTED); 922c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEulaScreenName); 924c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); 925c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1); 926c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, Show()).Times(1); 927c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnExit(ScreenObserver::EULA_ACCEPTED); 928c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Let update screen smooth time process (time = 0ms). 929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 930c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kUpdateScreenName); 932c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, Hide()).Times(1); 93346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Show()).Times(1); 934c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnExit(ScreenObserver::UPDATE_INSTALLED); 935c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kAutoEnrollmentCheckScreenName); 93746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(1); 93846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_, Show()).Times(1); 93946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) OnExit(ScreenObserver::ENTERPRISE_AUTO_ENROLLMENT_CHECK_COMPLETED); 94046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 94146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 942c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(StartupUtils::IsOobeCompleted()); 943c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 944c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Make sure enterprise enrollment page shows up right after update screen. 9451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEnrollmentScreenName); 946c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnExit(ScreenObserver::ENTERPRISE_ENROLLMENT_COMPLETED); 947c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 948c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(StartupUtils::IsOobeCompleted()); 949c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 950c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 951f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 952f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerKioskFlowTest, 953f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ControlFlowEnrollmentBack) { 954f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_->actor(), 955f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetParameters(mock_enrollment_screen_, 956effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EnrollmentScreenActor::ENROLLMENT_MODE_FORCED, 957f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "")) 958f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) .Times(1); 959f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 960f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(ExistingUserController::current_controller() == NULL); 9611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 962f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Show()).Times(1); 963f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); 964f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); 965f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OnExit(ScreenObserver::NETWORK_CONNECTED); 966f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEulaScreenName); 968f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); 969f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1); 970f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, Show()).Times(1); 971f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OnExit(ScreenObserver::EULA_ACCEPTED); 972f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Let update screen smooth time process (time = 0ms). 973f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 974f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kUpdateScreenName); 976f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*mock_update_screen_, Hide()).Times(1); 97746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Show()).Times(1); 97846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) OnExit(ScreenObserver::UPDATE_INSTALLED); 97946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kAutoEnrollmentCheckScreenName); 98146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(1); 982f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_, Show()).Times(1); 983f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_, Hide()).Times(1); 98446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) OnExit(ScreenObserver::ENTERPRISE_AUTO_ENROLLMENT_CHECK_COMPLETED); 985f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 986f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(StartupUtils::IsOobeCompleted()); 987f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 988f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Make sure enterprise enrollment page shows up right after update screen. 9891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEnrollmentScreenName); 990f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OnExit(ScreenObserver::ENTERPRISE_ENROLLMENT_BACK); 991f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 993f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(StartupUtils::IsOobeCompleted()); 994f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 995f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 996cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class WizardControllerOobeResumeTest : public WizardControllerTest { 997cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected: 998cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WizardControllerOobeResumeTest() {} 999cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Overriden from InProcessBrowserTest: 1000cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 1001cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WizardControllerTest::SetUpOnMainThread(); 1002cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1003cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Make sure that OOBE is run as an "official" build. 1004cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WizardController::default_controller()->is_official_build_ = true; 1005cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1006cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Clear portal list (as it is by default in OOBE). 1007cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetworkHandler::Get()->network_state_handler()->SetCheckPortalList(""); 1008cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1009cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Set up the mocks for all screens. 10101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK(mock_network_screen_, 10111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kNetworkScreenName, 10121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockNetworkScreen, 10131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockNetworkScreenActor); 10141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK(mock_enrollment_screen_, 10151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEnrollmentScreenName, 10161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockEnrollmentScreen, 10171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockEnrollmentScreenActor); 1018cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1019cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1020cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void OnExit(ScreenObserver::ExitCodes exit_code) { 1021cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WizardController::default_controller()->OnExit(exit_code); 1022cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1023cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1024cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string GetFirstScreenName() { 1025cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return WizardController::default_controller()->first_screen_name(); 1026cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1027cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1028cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) MockOutShowHide<MockNetworkScreen, MockNetworkScreenActor>* 1029cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mock_network_screen_; 1030cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) MockOutShowHide<MockEnrollmentScreen, 1031cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) MockEnrollmentScreenActor>* mock_enrollment_screen_; 1032cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1033cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 1034cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WizardControllerOobeResumeTest); 1035cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 1036cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1037cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerOobeResumeTest, 1038cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PRE_ControlFlowResumeInterruptedOobe) { 1039cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Switch to the initial screen. 1040cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Show()).Times(1); 1041cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WizardController::default_controller()->AdvanceToScreen( 1042cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WizardController::kNetworkScreenName); 10431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kNetworkScreenName); 1044cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_->actor(), 1045cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SetParameters(mock_enrollment_screen_, 1046cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EnrollmentScreenActor::ENROLLMENT_MODE_MANUAL, 10471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "")).Times(1); 1048cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_CALL(*mock_enrollment_screen_, Show()).Times(1); 1049cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); 1050cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1051cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WizardController::default_controller()->AdvanceToScreen( 1052cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WizardController::kEnrollmentScreenName); 10531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckCurrentScreen(WizardController::kEnrollmentScreenName); 1054cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1055cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1056cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(WizardControllerOobeResumeTest, 1057cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ControlFlowResumeInterruptedOobe) { 1058cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(WizardController::kEnrollmentScreenName, GetFirstScreenName()); 1059cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1060cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 10612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(dzhioev): Add test emaulating device with wrong HWID. 10622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(nkostylev): Add test for WebUI accelerators http://crosbug.com/22571 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// TODO(merkulova): Add tests for bluetooth HID detection screen variations when 1066a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// UI and logic is ready. http://crbug.com/127016 1067a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1068116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// TODO(dzhioev): Add tests for controller/host pairing flow. 1069116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// http://crbug.com/375191 1070116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1071116680a4aac90f2aa7413d9095a592090648e557Ben MurdochCOMPILE_ASSERT(ScreenObserver::EXIT_CODES_COUNT == 23, 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_tests_for_new_control_flow_you_just_introduced); 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 1075