1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/webui/chromeos/login/login_ui.h" 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted_memory.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/singleton.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/string_piece.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/values.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/cros/cros_library.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/cros/power_library.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/login/dom_login_display.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/profiles/profile.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_window.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/webui/chrome_url_data_manager.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/webui/chromeos/login/login_ui_helpers.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/url_constants.h" 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/browser_thread.h" 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/tab_contents/tab_contents.h" 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace { 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char* kResetPrompt = "resetPrompt"; 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace chromeos { 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// LoginUIHTMLSource, public: -------------------------------------------------- 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenLoginUIHTMLSource::LoginUIHTMLSource(MessageLoop* message_loop) 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : DataSource(chrome::kChromeUILoginHost, message_loop), 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen html_operations_(new HTMLOperationsInterface()) { 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid LoginUIHTMLSource::StartDataRequest(const std::string& path, 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_incognito, 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int request_id) { 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue localized_strings; 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetFontAndTextDirection(&localized_strings); 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::StringPiece login_html = html_operations_->GetLoginHTML(); 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string full_html = html_operations_->GetFullHTML(login_html, 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &localized_strings); 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<RefCountedBytes> html_bytes( 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen html_operations_->CreateHTMLBytes(full_html)); 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SendResponse(request_id, 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen (html_bytes.get())); 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstd::string LoginUIHTMLSource::GetMimeType(const std::string&) const { 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "text/html"; 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// LoginUIHandlerDelegate, protected: ------------------------------------------ 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenLoginUIHandlerDelegate::~LoginUIHandlerDelegate() {} 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// LoginUIHandler, public: ----------------------------------------------------- 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenLoginUIHandler::LoginUIHandler() { 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delegate_ = DOMLoginDisplay::GetInstance(); 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delegate_->set_login_handler(this); 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenWebUIMessageHandler* LoginUIHandler::Attach(WebUI* web_ui) { 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return WebUIMessageHandler::Attach(web_ui); 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid LoginUIHandler::RegisterMessages() { 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->RegisterMessageCallback( 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "LaunchIncognito", 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewCallback(this, 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &LoginUIHandler::HandleLaunchIncognito)); 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->RegisterMessageCallback( 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "AuthenticateUser", 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewCallback(this, 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &LoginUIHandler::HandleAuthenticateUser)); 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->RegisterMessageCallback( 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "ShutdownSystem", 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewCallback(this, 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &LoginUIHandler::HandleShutdownSystem)); 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid LoginUIHandler::HandleAuthenticateUser(const ListValue* args) { 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string username; 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string password; 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen size_t expected_size = 2; 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CHECK_EQ(args->GetSize(), expected_size); 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen args->GetString(0, &username); 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen args->GetString(1, &password); 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delegate_->Login(username, password); 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid LoginUIHandler::HandleLaunchIncognito(const ListValue* args) { 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delegate_->LoginAsGuest(); 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid LoginUIHandler::HandleShutdownSystem(const ListValue* args) { 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK(CrosLibrary::Get()->EnsureLoaded()); 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CrosLibrary::Get()->GetPowerLibrary()->RequestShutdown(); 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid LoginUIHandler::ClearAndEnablePassword() { 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->CallJavascriptFunction(kResetPrompt); 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// LoginUI, public: ------------------------------------------------------------ 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenLoginUI::LoginUI(TabContents* contents) 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : WebUI(contents) { 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen LoginUIHandler* handler = new LoginUIHandler(); 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddMessageHandler(handler->Attach(this)); 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen LoginUIHTMLSource* html_source = 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new LoginUIHTMLSource(MessageLoop::current()); 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen contents->profile()->GetChromeURLDataManager()->AddDataSource(html_source); 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace chromeos 122