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_USERS_AVATAR_USER_IMAGE_MANAGER_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_AVATAR_USER_IMAGE_MANAGER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySimple; 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FilePath; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageSkia; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace user_manager { 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass UserImage; 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class UserImageSyncObserver; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class that provides a mechanism for updating user images. 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// There is an instance of this class for each user in the system. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserImageManager { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers user image manager preferences. 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void RegisterPrefs(PrefRegistrySimple* registry); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) explicit UserImageManager(const std::string& user_id); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~UserImageManager(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Loads user image data from Local State. 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void LoadUserImage() = 0; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Indicates that a user has just logged in. 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void UserLoggedIn(bool user_is_new, bool user_is_local) = 0; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets user image to the default image with index |image_index|, sends 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // LOGIN_USER_IMAGE_CHANGED notification and updates Local State. 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SaveUserDefaultImageIndex(int image_index) = 0; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Saves image to file, sends LOGIN_USER_IMAGE_CHANGED notification and 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // updates Local State. 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SaveUserImage(const user_manager::UserImage& user_image) = 0; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tries to load user image from disk; if successful, sets it for the user, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sends LOGIN_USER_IMAGE_CHANGED notification and updates Local State. 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SaveUserImageFromFile(const base::FilePath& path) = 0; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets profile image as user image for the user, sends 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // LOGIN_USER_IMAGE_CHANGED notification and updates Local State. If 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // the user is not logged-in or the last |DownloadProfileImage| call 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // has failed, a default grey avatar will be used until the user logs 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // in and profile image is downloaded successfully. 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SaveUserImageFromProfileImage() = 0; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Deletes user image and the corresponding image file. 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void DeleteUserImage() = 0; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Starts downloading the profile image for the user. If user's image 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // index is |USER_IMAGE_PROFILE|, newly downloaded image is immediately 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // set as user's current picture. |reason| is an arbitrary string 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // (used to report UMA histograms with download times). 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DownloadProfileImage(const std::string& reason) = 0; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the result of the last successful profile image download, if any. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise, returns an empty bitmap. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const gfx::ImageSkia& DownloadedProfileImage() const = 0; 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns sync observer attached to the user. Returns NULL if current 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // user can't sync images or user is not logged in. 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual UserImageSyncObserver* GetSyncObserver() const = 0; 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Unregisters preference observers before browser process shutdown. 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Also cancels any profile image download in progress. 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void Shutdown() = 0; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Invoked when an external data reference is set for the user. 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnExternalDataSet(const std::string& policy) = 0; 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Invoked when the external data reference is cleared for the user. 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnExternalDataCleared(const std::string& policy) = 0; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Invoked when the external data referenced for the user has been 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // fetched. Failed fetches are retried and the method is called only 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // when a fetch eventually succeeds. If a fetch fails permanently 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // (e.g. because the external data reference specifies an invalid URL), 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // the method is not called at all. 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnExternalDataFetched(const std::string& policy, 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<std::string> data) = 0; 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected: 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& user_id() const { return user_id_; } 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // ID of user which images are managed by current instance of 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // UserImageManager. 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string user_id_; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_AVATAR_USER_IMAGE_MANAGER_H_ 111