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