screen_locker_tester.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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/auth/mock_authenticator.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/lock/screen_locker.h"
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/lock/webui_screen_locker.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/auth/auth_status_consumer.h"
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/public/browser/render_frame_host.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_utils.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/button.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/textfield/textfield.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/root_view.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// This class is used to observe state of the global ScreenLocker instance,
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// which can go away as a result of a successful authentication. As such,
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// it needs to directly reference the global ScreenLocker.
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass LoginAttemptObserver : public chromeos::AuthStatusConsumer {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  LoginAttemptObserver();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~LoginAttemptObserver();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void WaitForAttempt();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Overridden from AuthStatusConsumer:
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnAuthFailure(const chromeos::AuthFailure& error) OVERRIDE {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LoginAttempted();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnAuthSuccess(
488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const chromeos::UserContext& credentials) OVERRIDE {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LoginAttempted();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LoginAttempted();
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool login_attempted_;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool waiting_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(LoginAttemptObserver);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)LoginAttemptObserver::LoginAttemptObserver()
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : chromeos::AuthStatusConsumer(), login_attempted_(false), waiting_(false) {
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  chromeos::ScreenLocker::default_screen_locker()->SetLoginStatusConsumer(this);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LoginAttemptObserver::~LoginAttemptObserver() {
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  chromeos::ScreenLocker* global_locker =
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      chromeos::ScreenLocker::default_screen_locker();
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (global_locker)
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    global_locker->SetLoginStatusConsumer(NULL);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginAttemptObserver::WaitForAttempt() {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!login_attempted_) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_ = true;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::RunMessageLoop();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    waiting_ = false;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(login_attempted_);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginAttemptObserver::LoginAttempted() {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  login_attempted_ = true;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (waiting_)
8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoopForUI::current()->Quit();
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // anyonymous namespace
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUIScreenLockerTester : public ScreenLockerTester {
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ScreenLockerTester overrides:
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetPassword(const std::string& password) OVERRIDE;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetPassword() OVERRIDE;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void EnterPassword(const std::string& password) OVERRIDE;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void EmulateWindowManagerReady() OVERRIDE;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::Widget* GetWidget() const OVERRIDE;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::Widget* GetChildWidget() const OVERRIDE;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class chromeos::ScreenLocker;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebUIScreenLockerTester() {}
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::RenderViewHost* RenderViewHost() const;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the ScreenLockerWebUI object.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebUIScreenLocker* webui_screen_locker() const;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the WebUI object from the screen locker.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::WebUI* webui() const;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebUIScreenLockerTester);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUIScreenLockerTester::SetPassword(const std::string& password) {
121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  webui()->GetWebContents()->GetMainFrame()->ExecuteJavaScript(
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::ASCIIToUTF16(base::StringPrintf(
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          "$('pod-row').pods[0].passwordElement.value = '%s';",
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          password.c_str())));
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string WebUIScreenLockerTester::GetPassword() {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string result;
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> v = content::ExecuteScriptAndGetValue(
130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      RenderViewHost()->GetMainFrame(),
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "$('pod-row').pods[0].passwordElement.value;");
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(v->GetAsString(&result));
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return result;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUIScreenLockerTester::EnterPassword(const std::string& password) {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool result;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetPassword(password);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Verify password is set.
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(password, GetPassword());
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Verify that "signin" button is hidden.
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::Value> v = content::ExecuteScriptAndGetValue(
145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      RenderViewHost()->GetMainFrame(),
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "window.getComputedStyle("
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "    $('pod-row').pods[0].querySelector('.signin-button-container'))"
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "        .display == 'none'");
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(v->GetAsBoolean(&result));
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(result);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Attempt to sign in.
15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  LoginAttemptObserver login;
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  v = content::ExecuteScriptAndGetValue(
155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      RenderViewHost()->GetMainFrame(),
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "$('pod-row').pods[0].activate();");
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(v->GetAsBoolean(&result));
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(result);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Wait for login attempt.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  login.WaitForAttempt();
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUIScreenLockerTester::EmulateWindowManagerReady() {
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::Widget* WebUIScreenLockerTester::GetWidget() const {
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return webui_screen_locker()->lock_window_;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::Widget* WebUIScreenLockerTester::GetChildWidget() const {
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return webui_screen_locker()->lock_window_;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)content::RenderViewHost* WebUIScreenLockerTester::RenderViewHost() const {
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return webui()->GetWebContents()->GetRenderViewHost();
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebUIScreenLocker* WebUIScreenLockerTester::webui_screen_locker() const {
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(ScreenLocker::screen_locker_);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return static_cast<WebUIScreenLocker*>(
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ScreenLocker::screen_locker_->delegate_.get());
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::WebUI* WebUIScreenLockerTester::webui() const {
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(webui_screen_locker()->webui_ready_);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::WebUI* webui = webui_screen_locker()->GetWebUI();
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(webui);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return webui;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScreenLockerTester::ScreenLockerTester() {
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScreenLockerTester::~ScreenLockerTester() {
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ScreenLockerTester::IsLocked() {
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return ScreenLocker::screen_locker_ &&
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ScreenLocker::screen_locker_->locked_;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ScreenLockerTester::InjectMockAuthenticator(
204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const UserContext& user_context) {
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(ScreenLocker::screen_locker_);
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScreenLocker::screen_locker_->SetAuthenticator(
207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      new MockAuthenticator(ScreenLocker::screen_locker_, user_context));
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace test
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)test::ScreenLockerTester* ScreenLocker::GetTester() {
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new test::WebUIScreenLockerTester();
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
217