1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/command_line.h"
6#include "base/prefs/pref_service.h"
7#include "base/timer/timer.h"
8#include "chrome/browser/browser_process.h"
9#include "chrome/browser/chrome_notification_types.h"
10#include "chrome/browser/chromeos/login/login_manager_test.h"
11#include "chrome/browser/chromeos/login/screenshot_testing_mixin.h"
12#include "chrome/browser/chromeos/login/startup_utils.h"
13#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h"
14#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
15#include "chrome/common/pref_names.h"
16#include "content/public/browser/browser_thread.h"
17#include "content/public/browser/notification_observer.h"
18#include "content/public/browser/notification_registrar.h"
19#include "content/public/browser/notification_service.h"
20#include "content/public/browser/notification_types.h"
21#include "ui/compositor/compositor_switches.h"
22
23namespace chromeos {
24
25namespace {
26
27const char kTestUser1[] = "test-user1@gmail.com";
28const char kTestUser2[] = "test-user2@gmail.com";
29
30}
31
32class LoginUITest : public chromeos::LoginManagerTest {
33 public:
34  bool enable_test_screenshots_;
35  LoginUITest() : LoginManagerTest(false) {
36    screenshot_testing_ = new ScreenshotTestingMixin;
37    AddMixin(screenshot_testing_);
38  }
39  virtual ~LoginUITest() {}
40
41 protected:
42  ScreenshotTestingMixin* screenshot_testing_;
43};
44
45IN_PROC_BROWSER_TEST_F(LoginUITest, PRE_LoginUIVisible) {
46  RegisterUser(kTestUser1);
47  RegisterUser(kTestUser2);
48  StartupUtils::MarkOobeCompleted();
49}
50
51// Verifies basic login UI properties.
52IN_PROC_BROWSER_TEST_F(LoginUITest, LoginUIVisible) {
53  JSExpect("!!document.querySelector('#account-picker')");
54  JSExpect("!!document.querySelector('#pod-row')");
55  JSExpect(
56      "document.querySelectorAll('.pod:not(#user-pod-template)').length == 2");
57
58  JSExpect("document.querySelectorAll('.pod:not(#user-pod-template)')[0]"
59           ".user.emailAddress == '" + std::string(kTestUser1) + "'");
60  JSExpect("document.querySelectorAll('.pod:not(#user-pod-template)')[1]"
61           ".user.emailAddress == '" + std::string(kTestUser2) + "'");
62  screenshot_testing_->RunScreenshotTesting("LoginUITest-LoginUIVisible");
63}
64
65IN_PROC_BROWSER_TEST_F(LoginUITest, PRE_InterruptedAutoStartEnrollment) {
66  StartupUtils::MarkOobeCompleted();
67  PrefService* prefs = g_browser_process->local_state();
68  prefs->SetBoolean(prefs::kDeviceEnrollmentAutoStart, true);
69}
70
71// Tests that the default first screen is the network screen after OOBE
72// when auto enrollment is enabled and device is not yet enrolled.
73IN_PROC_BROWSER_TEST_F(LoginUITest, InterruptedAutoStartEnrollment) {
74  OobeScreenWaiter(OobeDisplay::SCREEN_OOBE_NETWORK).Wait();
75}
76
77}  // namespace chromeos
78