// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_LOGIN_UI_H_ #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_LOGIN_UI_H_ #pragma once #include <string> #include "base/memory/scoped_ptr.h" #include "chrome/browser/ui/webui/chrome_url_data_manager.h" #include "content/browser/webui/web_ui.h" class Profile; namespace chromeos { class HTMLOperationsInterface; // Boilerplate class that is used to associate the LoginUI code with the URL // "chrome://login" class LoginUIHTMLSource : public ChromeURLDataManager::DataSource { public: explicit LoginUIHTMLSource(MessageLoop* message_loop); virtual void StartDataRequest(const std::string& path, bool is_incognito, int request_id); virtual std::string GetMimeType(const std::string&) const; private: scoped_ptr<HTMLOperationsInterface> html_operations_; DISALLOW_COPY_AND_ASSIGN(LoginUIHTMLSource); }; class LoginUIHandler; class LoginUIHandlerDelegate { public: LoginUIHandlerDelegate() : login_handler_(NULL) { } // Sign in using |username| and |password| specified. // Used for both known and new users. virtual void Login(const std::string& username, const std::string& password) = 0; // Sign in into Guest session. virtual void LoginAsGuest() = 0; // Let the delegate know about the handler it is supposed to be using. virtual void set_login_handler(LoginUIHandler* login_handler) { login_handler_ = login_handler; } protected: // Reference to the DOM handling layer for the login screen LoginUIHandler* login_handler_; virtual ~LoginUIHandlerDelegate(); }; // Main LoginUI handling function. It handles the WebUI hooks that are supplied // for the login page to use for authentication. class LoginUIHandler : public WebUIMessageHandler { public: LoginUIHandler(); // WebUIMessageHandler implementation. virtual WebUIMessageHandler* Attach(WebUI* web_ui); virtual void RegisterMessages(); void HandleAuthenticateUser(const ListValue* args); void HandleLaunchIncognito(const ListValue* args); void HandleShutdownSystem(const ListValue* args); void ClearAndEnablePassword(); protected: LoginUIHandlerDelegate* delegate_; private: DISALLOW_COPY_AND_ASSIGN(LoginUIHandler); }; // Boilerplate class that is used to associate the LoginUI code with the WebUI // code. class LoginUI : public WebUI { public: explicit LoginUI(TabContents* contents); // Return the URL for a given search term. static const GURL GetLoginURLWithSearchText(const string16& text); static RefCountedMemory* GetFaviconResourceBytes(); private: DISALLOW_COPY_AND_ASSIGN(LoginUI); }; } // namespace chromeos #endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_LOGIN_UI_H_