15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREEN_LOCKER_DELEGATE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREEN_LOCKER_DELEGATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#include "base/callback_forward.h"
95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string16.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/help_app_launcher.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebUI;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
19d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)namespace gfx {
20d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)class Image;
21d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)}
22d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScreenLocker;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ScreenLockerDelegate takes care of displaying the lock screen UI.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScreenLockerDelegate {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ScreenLockerDelegate(ScreenLocker* screen_locker);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ScreenLockerDelegate();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initialize the screen locker delegate. This will call ScreenLockReady when
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // done to notify ScreenLocker.
35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void LockScreen() = 0;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Inform the screen locker that the screen has been locked
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ScreenLockReady();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This function is called when ScreenLocker::Authenticate is called to
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // attempt to authenticate with a given password.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnAuthenticate() = 0;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Enable/disable password input.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetInputEnabled(bool enabled) = 0;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Displays a banner containing |message| on the lock screen.
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void ShowBannerMessage(const std::string& message) = 0;
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
50d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  // Shows a button inside the user pod on the lock screen with an icon.
51d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  virtual void ShowUserPodButton(const std::string& username,
52d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)                                 const std::string& iconURL,
53d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)                                 const base::Closure& click_callback) = 0;
54d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Disables all UI needed and shows error bubble with |message|.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If |sign_out_only| is true then all other input except "Sign Out"
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // button is blocked.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowErrorMessage(
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int error_msg_id,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      HelpAppLauncher::HelpTopic help_topic_id) = 0;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Close message bubble to clear error messages.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ClearErrors() = 0;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Allows to have visual effects once unlock authentication is successful,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Must call ScreenLocker::UnlockOnLoginSuccess() once all effects are done.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AnimateAuthenticationSuccess() = 0;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the native window displaying the lock screen.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::NativeWindow GetNativeWindow() const = 0;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns WebUI associated with screen locker implementation or NULL if
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // there isn't one.
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual content::WebUI* GetAssociatedWebUI();
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Called when webui lock screen is ready.
773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void OnLockWebUIReady() = 0;
783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Called when webui lock screen wallpaper is loaded and displayed.
803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void OnLockBackgroundDisplayed() = 0;
813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Returns screen locker associated with delegate.
83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ScreenLocker* screen_locker() { return screen_locker_; }
84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ScreenLocker that owns this delegate.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScreenLocker* screen_locker_;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ScreenLockerDelegate);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_SCREEN_LOCKER_DELEGATE_H_
95