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. 4 5 #include "chrome/browser/ui/webui/chromeos/login/screenlock_icon_source.h" 6 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" 11 12 namespace { 13 14 gfx::Image GetDefaultIcon() { 15 return gfx::Image(); 16 } 17 18 } // namespace 19 20 namespace chromeos { 21 22 //////////////////////////////////////////////////////////////////////////////// 23 // ScreenlockIconSource 24 25 ScreenlockIconSource::ScreenlockIconSource( 26 base::WeakPtr<ScreenlockIconProvider> icon_provider) 27 : icon_provider_(icon_provider) { 28 } 29 30 ScreenlockIconSource::~ScreenlockIconSource() {} 31 32 std::string ScreenlockIconSource::GetSource() const { 33 return std::string(chrome::kChromeUIScreenlockIconHost); 34 } 35 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()); 43 return; 44 } 45 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); 50 51 gfx::Image image = icon_provider_->GetIcon(username); 52 if (image.IsEmpty()) { 53 callback.Run(GetDefaultIcon().As1xPNGBytes()); 54 return; 55 } 56 57 callback.Run(image.As1xPNGBytes().get()); 58 } 59 60 std::string ScreenlockIconSource::GetMimeType(const std::string&) const { 61 return "image/png"; 62 } 63 64 // static. 65 std::string ScreenlockIconSource::GetIconURLForUser( 66 const std::string& username) { 67 return std::string(chrome::kChromeUIScreenlockIconURL) + 68 net::EscapePath(username); 69 } 70 71 } // namespace chromeos 72