1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// found in the LICENSE file. 4513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 5513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#ifndef CHROME_BROWSER_BROWSER_SIGNIN_H_ 6513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define CHROME_BROWSER_BROWSER_SIGNIN_H_ 7513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#pragma once 8513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 9513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include <string> 10513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 12513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/common/net/gaia/google_service_auth_error.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 15513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 16513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass BrowserSigninHtml; 17513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Profile; 18513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass ProfileSyncService; 19513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass TabContents; 20513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 21513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// The BrowserSignin class provides a login screen which allows the 22513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// user to signin to the browser. Currently the signin is coordinated 23513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// through the Chrome Sync logic. 24513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// 25513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// TODO(johnnyg): Separate this from the sync logic and make it the 26513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// sole co-ordinator of browser signin. 27513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// 28513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// This class should only be accessed on the UI thread. 29513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass BrowserSignin : public NotificationObserver { 30513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 31513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch explicit BrowserSignin(Profile* profile); 32513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual ~BrowserSignin(); 33513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 34513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // The delegate class is invoked on success and failure. 35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch class SigninDelegate { 36513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 37513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual ~SigninDelegate() {} 38513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 39513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // The login was successful. 40513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OnLoginSuccess() = 0; 41513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 42513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // The login failed. 43513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OnLoginFailure(const GoogleServiceAuthError& error) = 0; 44513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch }; 45513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 46513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Request that the user signin, modal to TabContents provided. 47513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // If a user is already signed in, this will show a login dialog where 48513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // the username is not editable. 49513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // 50513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // A custom HTML string can be provided that will be displayed next 51513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // to the signin dialog. 52513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // 53513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Only one sign-in can be in process at a time; if there is one in 54513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // progress already it will be canceled in favor of this one. 55513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // 56513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // The delegate will eventually be called with OnLoginSuccess() or 57513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // OnLoginFailure(), but never both. virtual for test override. 58513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void RequestSignin(TabContents* tab_contents, 59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const string16& suggested_email, 60513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const string16& login_message, 61513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SigninDelegate* delegate); 62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 63513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Returns the username of the user currently signed in. If no 64513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // user is signed in, returns the empty string. virtual for test 65513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // override. 66513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual std::string GetSignedInUsername() const; 67513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 68513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // NotificationObserver implementation. 69513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void Observe(NotificationType type, 70513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const NotificationSource& source, 71513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const NotificationDetails& details); 72513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 73513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ProfileSyncService* GetProfileSyncService() const; 74513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 75513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Close the dialog. Delegate's OnLoginFailure method will be called. 76513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void Cancel(); 77513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 78513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch private: 79513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Create the HTML Dialog content. 80513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch BrowserSigninHtml* CreateHtmlDialogUI(); 81513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 82513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // When the dialog is closed. 83513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void OnLoginFinished(); 84513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 85513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Turn auth notifications on. 86513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void RegisterAuthNotifications(); 87513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 88513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Turn auth notifications off. 89513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void UnregisterAuthNotifications(); 90513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 91513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Show the dialog Tab-Modal. 92513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void ShowSigninTabModal(TabContents* tab_contents); 93513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 94513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Non-owned pointer to the profile (which owns this object). 95513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Profile* profile_; 96513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 97513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Suggested email for the current login prompt. 98513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch string16 suggested_email_; 99513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 100513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Current login message. 101513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch string16 login_message_; 102513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 103513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Delegate for the current sign in request. 104513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SigninDelegate* delegate_; 105513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 106dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Current HTML Dialog information. Pointer is owned by the WebUI it will be 107dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // attached to. 108513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch BrowserSigninHtml* html_dialog_ui_delegate_; 109513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 110513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NotificationRegistrar registrar_; 111513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 112513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DISALLOW_COPY_AND_ASSIGN(BrowserSignin); 113513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}; 114513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 115513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 116513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif // CHROME_BROWSER_BROWSER_SIGNIN_H_ 117