Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / ui / webui / chromeos / login / screenlock_icon_source.cc
blob0417c6050913cb7000968e2f38667dd93b5a3608
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/webui/chromeos/login/screenlock_icon_source.h"
7 #include "chrome/browser/chromeos/login/lock/screen_locker.h"
8 #include "chrome/browser/ui/webui/chromeos/login/screenlock_icon_provider.h"
9 #include "chrome/common/url_constants.h"
10 #include "net/base/escape.h"
12 namespace {
14 gfx::Image GetDefaultIcon() {
15 return gfx::Image();
18 } // namespace
20 namespace chromeos {
22 ////////////////////////////////////////////////////////////////////////////////
23 // ScreenlockIconSource
25 ScreenlockIconSource::ScreenlockIconSource(
26 base::WeakPtr<ScreenlockIconProvider> icon_provider)
27 : icon_provider_(icon_provider) {
30 ScreenlockIconSource::~ScreenlockIconSource() {}
32 std::string ScreenlockIconSource::GetSource() const {
33 return std::string(chrome::kChromeUIScreenlockIconHost);
36 void ScreenlockIconSource::StartDataRequest(
37 const std::string& path,
38 int render_process_id,
39 int render_frame_id,
40 const content::URLDataSource::GotDataCallback& callback) {
41 if (!icon_provider_) {
42 callback.Run(GetDefaultIcon().As1xPNGBytes().get());
43 return;
46 GURL url(chrome::kChromeUIScreenlockIconURL + path);
47 std::string username = net::UnescapeURLComponent(
48 url.path().substr(1),
49 net::UnescapeRule::URL_SPECIAL_CHARS | net::UnescapeRule::SPACES);
51 gfx::Image image = icon_provider_->GetIcon(username);
52 if (image.IsEmpty()) {
53 callback.Run(GetDefaultIcon().As1xPNGBytes().get());
54 return;
57 callback.Run(image.As1xPNGBytes().get());
60 std::string ScreenlockIconSource::GetMimeType(const std::string&) const {
61 return "image/png";
64 // static.
65 std::string ScreenlockIconSource::GetIconURLForUser(
66 const std::string& username) {
67 return std::string(chrome::kChromeUIScreenlockIconURL) +
68 net::EscapePath(username);
71 } // namespace chromeos