screen_locker_tester.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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/login_status_consumer.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/auth/mock_authenticator.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/lock/screen_locker.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/lock/webui_screen_locker.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.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. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LoginAttemptObserver : public chromeos::LoginStatusConsumer { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LoginAttemptObserver(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~LoginAttemptObserver(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WaitForAttempt(); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from LoginStatusConsumer: 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnLoginFailure(const chromeos::LoginFailure& error) OVERRIDE { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoginAttempted(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnLoginSuccess( 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() 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : chromeos::LoginStatusConsumer(), 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) login_attempted_(false), 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_(false) { 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chromeos::ScreenLocker::default_screen_locker()->SetLoginStatusConsumer(this); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LoginAttemptObserver::~LoginAttemptObserver() { 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chromeos::ScreenLocker* global_locker = 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chromeos::ScreenLocker::default_screen_locker(); 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (global_locker) 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) global_locker->SetLoginStatusConsumer(NULL); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginAttemptObserver::WaitForAttempt() { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!login_attempted_) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_ = true; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunMessageLoop(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_ = false; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(login_attempted_); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LoginAttemptObserver::LoginAttempted() { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) login_attempted_ = true; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (waiting_) 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI::current()->Quit(); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // anyonymous namespace 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUIScreenLockerTester : public ScreenLockerTester { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ScreenLockerTester overrides: 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetPassword(const std::string& password) OVERRIDE; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetPassword() OVERRIDE; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void EnterPassword(const std::string& password) OVERRIDE; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void EmulateWindowManagerReady() OVERRIDE; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual views::Widget* GetWidget() const OVERRIDE; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual views::Widget* GetChildWidget() const OVERRIDE; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class chromeos::ScreenLocker; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebUIScreenLockerTester() {} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderViewHost* RenderViewHost() const; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the ScreenLockerWebUI object. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebUIScreenLocker* webui_screen_locker() const; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the WebUI object from the screen locker. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebUI* webui() const; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebUIScreenLockerTester); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUIScreenLockerTester::SetPassword(const std::string& password) { 123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webui()->GetWebContents()->GetMainFrame()->ExecuteJavaScript( 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ASCIIToUTF16(base::StringPrintf( 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "$('pod-row').pods[0].passwordElement.value = '%s';", 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) password.c_str()))); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string WebUIScreenLockerTester::GetPassword() { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string result; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> v = content::ExecuteScriptAndGetValue( 132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderViewHost()->GetMainFrame(), 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "$('pod-row').pods[0].passwordElement.value;"); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(v->GetAsString(&result)); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebUIScreenLockerTester::EnterPassword(const std::string& password) { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPassword(password); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify password is set. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(password, GetPassword()); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that "signin" button is hidden. 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> v = content::ExecuteScriptAndGetValue( 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RenderViewHost()->GetMainFrame(), 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "$('pod-row').pods[0].signinButtonElement.hidden;"); 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