screen_locker_tester.cc revision 29b820f8d84e3bc97d62552e54923c42407f2f29
1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 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)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/lock/screen_locker_tester.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h"
105e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h"
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/lock/screen_locker.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/lock/webui_screen_locker.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/auth/auth_status_consumer.h"
1729b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch#include "chromeos/login/auth/fake_extended_authenticator.h"
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/login/auth/mock_authenticator.h"
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/public/browser/render_frame_host.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_utils.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/button.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/textfield/textfield.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/root_view.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// This class is used to observe state of the global ScreenLocker instance,
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// which can go away as a result of a successful authentication. As such,
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// it needs to directly reference the global ScreenLocker.
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass LoginAttemptObserver : public chromeos::AuthStatusConsumer {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  LoginAttemptObserver();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~LoginAttemptObserver();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void WaitForAttempt();
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Overridden from AuthStatusConsumer:
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnAuthFailure(const chromeos::AuthFailure& error) OVERRIDE {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LoginAttempted();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnAuthSuccess(
498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const chromeos::UserContext& credentials) OVERRIDE {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LoginAttempted();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LoginAttempted();
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool login_attempted_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool waiting_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(LoginAttemptObserver);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)LoginAttemptObserver::LoginAttemptObserver()
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : chromeos::AuthStatusConsumer(), login_attempted_(false), waiting_(false) {
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  chromeos::ScreenLocker::default_screen_locker()->SetLoginStatusConsumer(this);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LoginAttemptObserver::~LoginAttemptObserver() {
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  chromeos::ScreenLocker* global_locker =
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      chromeos::ScreenLocker::default_screen_locker();
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (global_locker)
7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    global_locker->SetLoginStatusConsumer(NULL);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginAttemptObserver::WaitForAttempt() {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!login_attempted_) {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_ = true;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RunMessageLoop();
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_ = false;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(login_attempted_);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginAttemptObserver::LoginAttempted() {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  login_attempted_ = true;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (waiting_)
8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoopForUI::current()->Quit();
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // anyonymous namespace
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUIScreenLockerTester : public ScreenLockerTester {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ScreenLockerTester overrides:
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetPassword(const std::string& password) OVERRIDE;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetPassword() OVERRIDE;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void EnterPassword(const std::string& password) OVERRIDE;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void EmulateWindowManagerReady() OVERRIDE;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::Widget* GetWidget() const OVERRIDE;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::Widget* GetChildWidget() const OVERRIDE;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class chromeos::ScreenLocker;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebUIScreenLockerTester() {}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::RenderViewHost* RenderViewHost() const;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the ScreenLockerWebUI object.
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebUIScreenLocker* webui_screen_locker() const;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the WebUI object from the screen locker.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::WebUI* webui() const;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebUIScreenLockerTester);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUIScreenLockerTester::SetPassword(const std::string& password) {
122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  webui()->GetWebContents()->GetMainFrame()->ExecuteJavaScript(
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::ASCIIToUTF16(base::StringPrintf(
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "$('pod-row').pods[0].passwordElement.value = '%s';",
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          password.c_str())));
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string WebUIScreenLockerTester::GetPassword() {
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string result;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> v = content::ExecuteScriptAndGetValue(
131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      RenderViewHost()->GetMainFrame(),
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "$('pod-row').pods[0].passwordElement.value;");
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(v->GetAsString(&result));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return result;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUIScreenLockerTester::EnterPassword(const std::string& password) {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool result;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetPassword(password);
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Verify password is set.
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(password, GetPassword());
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Verify that "signin" button is hidden.
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> v = content::ExecuteScriptAndGetValue(
146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      RenderViewHost()->GetMainFrame(),
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "window.getComputedStyle("
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "    $('pod-row').pods[0].querySelector('.signin-button-container'))"
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "        .display == 'none'");
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(v->GetAsBoolean(&result));
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(result);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Attempt to sign in.
15458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  LoginAttemptObserver login;
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  v = content::ExecuteScriptAndGetValue(
156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      RenderViewHost()->GetMainFrame(),
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "$('pod-row').pods[0].activate();");
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(v->GetAsBoolean(&result));
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(result);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Wait for login attempt.
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  login.WaitForAttempt();
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUIScreenLockerTester::EmulateWindowManagerReady() {
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::Widget* WebUIScreenLockerTester::GetWidget() const {
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return webui_screen_locker()->lock_window_;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::Widget* WebUIScreenLockerTester::GetChildWidget() const {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return webui_screen_locker()->lock_window_;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)content::RenderViewHost* WebUIScreenLockerTester::RenderViewHost() const {
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return webui()->GetWebContents()->GetRenderViewHost();
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebUIScreenLocker* WebUIScreenLockerTester::webui_screen_locker() const {
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(ScreenLocker::screen_locker_);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return static_cast<WebUIScreenLocker*>(
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ScreenLocker::screen_locker_->delegate_.get());
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::WebUI* WebUIScreenLockerTester::webui() const {
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(webui_screen_locker()->webui_ready_);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::WebUI* webui = webui_screen_locker()->GetWebUI();
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(webui);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return webui;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScreenLockerTester::ScreenLockerTester() {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScreenLockerTester::~ScreenLockerTester() {
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ScreenLockerTester::IsLocked() {
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return ScreenLocker::screen_locker_ &&
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ScreenLocker::screen_locker_->locked_;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ScreenLockerTester::InjectMockAuthenticator(
205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const UserContext& user_context) {
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(ScreenLocker::screen_locker_);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScreenLocker::screen_locker_->SetAuthenticator(
208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      new MockAuthenticator(ScreenLocker::screen_locker_, user_context));
20929b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch  ScreenLocker::screen_locker_->extended_authenticator_ =
21029b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch      new FakeExtendedAuthenticator(ScreenLocker::screen_locker_, user_context);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace test
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)test::ScreenLockerTester* ScreenLocker::GetTester() {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new test::WebUIScreenLockerTester();
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
220