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)#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_LOCK_WEBUI_SCREEN_LOCKER_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_LOGIN_LOCK_WEBUI_SCREEN_LOCKER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ash/shell_delegate.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ash/wm/lock_state_observer.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/lock/screen_locker_delegate.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/login/signin_specifics.h" 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/lock_window.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/login_display.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/webui_login_view.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/power_manager_client.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/keyboard/keyboard_controller_observer.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/widget_observer.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebUI; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class OobeUI; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScreenLocker; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUILoginDisplay; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace login { 39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass NetworkStateHelper; 40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 41ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUIScreenLockerTester; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This version of ScreenLockerDelegate displays a WebUI lock screen based on 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the Oobe account picker screen. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUIScreenLocker : public WebUILoginView, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public LoginDisplay::Delegate, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ScreenLockerDelegate, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public LockWindow::Observer, 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public ash::LockStateObserver, 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public views::WidgetObserver, 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public PowerManagerClient::Observer, 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public ash::VirtualKeyboardStateObserver, 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public keyboard::KeyboardControllerObserver { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit WebUIScreenLocker(ScreenLocker* screen_locker); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ScreenLockerDelegate implementation. 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void LockScreen() OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ScreenLockReady() OVERRIDE; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnAuthenticate() OVERRIDE; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetInputEnabled(bool enabled) OVERRIDE; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ShowErrorMessage( 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int error_msg_id, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HelpAppLauncher::HelpTopic help_topic_id) OVERRIDE; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ClearErrors() OVERRIDE; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AnimateAuthenticationSuccess() OVERRIDE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual content::WebUI* GetAssociatedWebUI() OVERRIDE; 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void OnLockWebUIReady() OVERRIDE; 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void OnLockBackgroundDisplayed() OVERRIDE; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // LoginDisplay::Delegate: implementation 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void CancelPasswordChangedFlow() OVERRIDE; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CreateAccount() OVERRIDE; 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void CompleteLogin(const UserContext& user_context) OVERRIDE; 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual base::string16 GetConnectedNetworkName() OVERRIDE; 80a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) virtual bool IsSigninInProgress() const OVERRIDE; 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void Login(const UserContext& user_context, 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const SigninSpecifics& specifics) OVERRIDE; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void MigrateUserData(const std::string& old_password) OVERRIDE; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnSigninScreenReady() OVERRIDE; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnStartEnterpriseEnrollment() OVERRIDE; 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void OnStartKioskEnableScreen() OVERRIDE; 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnStartKioskAutolaunchScreen() OVERRIDE; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ShowWrongHWIDScreen() OVERRIDE; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ResetPublicSessionAutoLoginTimer() OVERRIDE; 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ResyncUserData() OVERRIDE; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetDisplayEmail(const std::string& email) OVERRIDE; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Signout() OVERRIDE; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::NotificationObserver (via WebUILoginView) implementation. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // LockWindow::Observer implementation. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnLockWindowReady() OVERRIDE; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // LockStateObserver override. 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnLockStateEvent( 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ash::LockStateObserver::EventType event) OVERRIDE; 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // WidgetObserver override. 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // PowerManagerClient::Observer overrides: 1100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE; 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void LidEventReceived(bool open, 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeTicks& time) OVERRIDE; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Overridden from content::WebContentsObserver: 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE; 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Overridden from ash::KeyboardStateObserver: 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnVirtualKeyboardStateChanged(bool activated) OVERRIDE; 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Overridden from keyboard::KeyboardControllerObserver: 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) OVERRIDE; 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Returns instance of the OOBE WebUI. 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OobeUI* GetOobeUI(); 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class test::WebUIScreenLockerTester; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebUIScreenLocker(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ensures that user pod is focused. 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FocusUserPod(); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The screen locker window. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Widget* lock_window_; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Login UI implementation instance. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<WebUILoginDisplay> login_display_; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used for user image changed notifications. 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tracks when the lock window is displayed and ready. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool lock_ready_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tracks when the WebUI finishes loading. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool webui_ready_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Time when lock was initiated, required for metrics. 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks lock_time_; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 152ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_ptr<login::NetworkStateHelper> network_state_helper_; 153ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // True is subscribed as keyboard controller observer. 155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_observing_keyboard_; 156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The bounds of the virtual keyboard. 158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Rect keyboard_bounds_; 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtrFactory<WebUIScreenLocker> weak_factory_; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebUIScreenLocker); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_LOGIN_LOCK_WEBUI_SCREEN_LOCKER_H_ 168