1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Use of this source code is governed by a BSD-style license that can be 3dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// found in the LICENSE file. 4dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/webui/options/chromeos/user_image_source.h" 6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted_memory.h" 8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/chromeos/login/user_manager.h" 9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/common/url_constants.h" 10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "grit/theme_resources.h" 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "ui/base/resource/resource_bundle.h" 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "ui/gfx/codec/png_codec.h" 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace chromeos { 15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstd::vector<unsigned char> UserImageSource::GetUserImage( 17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& email) const { 18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::vector<unsigned char> user_image; 19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen chromeos::UserVector users = chromeos::UserManager::Get()->GetUsers(); 20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (size_t i = 0; i < users.size(); ++i) { 21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (users[i].email() == email) { 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen gfx::PNGCodec::EncodeBGRASkBitmap(users[i].image(), false, &user_image); 23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return user_image; 24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen gfx::PNGCodec::EncodeBGRASkBitmap( 27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen *ResourceBundle::GetSharedInstance().GetBitmapNamed( 28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDR_LOGIN_DEFAULT_USER), 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen false, 30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &user_image); 31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return user_image; 32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 34dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenUserImageSource::UserImageSource() 35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : DataSource(chrome::kChromeUIUserImageHost, MessageLoop::current()) { 36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 38dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenUserImageSource::~UserImageSource() {} 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid UserImageSource::StartDataRequest(const std::string& path, 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_incognito, 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int request_id) { 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Strip the query param value - we only use it as a hack to ensure our 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // image gets reloaded instead of being pulled from the browser cache 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string email = path.substr(0, path.find_first_of("?")); 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SendResponse(request_id, new RefCountedBytes(GetUserImage(email))); 47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstd::string UserImageSource::GetMimeType(const std::string&) const { 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // We need to explicitly return a mime type, otherwise if the user tries to 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // drag the image they get no extension. 52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return "image/png"; 53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} // namespace chromeos 56