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_WALLPAPER_WALLPAPER_MANAGER_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_WALLPAPER_WALLPAPER_MANAGER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <deque> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/desktop_background/desktop_background_controller.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted_memory.h" 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/observer_list.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/threading/sequenced_worker_pool.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/avatar/user_image_loader.h" 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h" 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/user_manager/user_image/user_image.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/icu/source/i18n/unicode/timezone.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_skia.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySimple; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class CommandLine; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SequencedTaskRunner; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace user_manager { 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class User; 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass UserImage; 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct WallpaperInfo { 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Either file name of migrated wallpaper including first directory level 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // (corresponding to user id hash) or online wallpaper URL. 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string location; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ash::WallpaperLayout layout; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user_manager::User::WallpaperType type; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time date; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool operator==(const WallpaperInfo& other) { 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (location == other.location) && (layout == other.layout) && 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (type == other.type); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class MovableOnDestroyCallback; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef scoped_ptr<MovableOnDestroyCallback> MovableOnDestroyCallbackHolder; 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WallpaperManagerBrowserTest; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Name of wallpaper sequence token. 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern const char kWallpaperSequenceTokenName[]; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// File path suffices of resized small or large wallpaper. 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(bshe): Use the same sub folder system as custom wallpapers use. 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// crbug.com/174928 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const char kSmallWallpaperSuffix[]; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const char kLargeWallpaperSuffix[]; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Directory names of custom wallpapers. 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern const char kSmallWallpaperSubDir[]; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern const char kLargeWallpaperSubDir[]; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern const char kOriginalWallpaperSubDir[]; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern const char kThumbnailWallpaperSubDir[]; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// The width and height of small/large resolution wallpaper. When screen size is 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// smaller than |kSmallWallpaperMaxWidth| and |kSmallWallpaperMaxHeight|, the 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// small resolution wallpaper should be used. Otherwise, use the large 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// resolution wallpaper. 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochextern const int kSmallWallpaperMaxWidth; 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochextern const int kSmallWallpaperMaxHeight; 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochextern const int kLargeWallpaperMaxWidth; 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochextern const int kLargeWallpaperMaxHeight; 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// The width and height of wallpaper thumbnails. 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochextern const int kWallpaperThumbnailWidth; 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochextern const int kWallpaperThumbnailHeight; 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// This singleton class maintains wallpapers for users who have logged into this 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Chrome OS device. 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class WallpaperManager: public content::NotificationObserver { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 93c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch enum WallpaperResolution { 94c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WALLPAPER_RESOLUTION_LARGE, 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WALLPAPER_RESOLUTION_SMALL 96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 97c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // For testing. 99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) class TestApi { 100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public: 101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) explicit TestApi(WallpaperManager* wallpaper_manager); 102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual ~TestApi(); 103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 104a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::FilePath current_wallpaper_path(); 105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool GetWallpaperFromCache(const std::string& user_id, 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::ImageSkia* image); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetWallpaperCache(const std::string& user_id, 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::ImageSkia& image); 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void ClearDisposableWallpaperCache(); 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private: 115a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) WallpaperManager* wallpaper_manager_; // not owned 116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 117a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestApi); 118a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) }; 119a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // This should be public to allow access from functions in anonymous 1210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // namespace. 1220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch class CustomizedWallpaperRescaledFiles; 1230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) class Observer { 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~Observer() {} 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnWallpaperAnimationFinished(const std::string& user_id) = 0; 128c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnUpdateWallpaperForTesting() {} 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnPendingListEmptyForTesting() {} 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This is "wallpaper either scheduled to load, or loading right now". 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // While enqueued, it defines moment in the future, when it will be loaded. 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Enqueued but not started request might be updated by subsequent load 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // request. Therefore it's created empty, and updated being enqueued. 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // PendingWallpaper is owned by WallpaperManager, but reference to this object 139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // is passed to other threads by PostTask() calls, therefore it is 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // RefCountedThreadSafe. 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) class PendingWallpaper : public base::RefCountedThreadSafe<PendingWallpaper> { 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Do LoadWallpaper() - image not found in cache. 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PendingWallpaper(const base::TimeDelta delay, const std::string& user_id); 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // There are 4 cases in SetUserWallpaper: 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 1) gfx::ImageSkia is found in cache. 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // - Schedule task to (probably) resize it and install: 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // call ash::Shell::GetInstance()->desktop_background_controller()-> 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // SetCustomWallpaper(user_wallpaper, layout); 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 2) WallpaperInfo is found in cache 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // - need to LoadWallpaper(), resize and install. 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 3) wallpaper path is not NULL, load image URL, then resize, etc... 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 4) SetDefaultWallpaper (either on some error, or when user is new). 1555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void ResetSetWallpaperImage(const gfx::ImageSkia& image, 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const WallpaperInfo& info); 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ResetLoadWallpaper(const WallpaperInfo& info); 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ResetSetCustomWallpaper(const WallpaperInfo& info, 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& wallpaper_path); 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ResetSetDefaultWallpaper(); 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) friend class base::RefCountedThreadSafe<PendingWallpaper>; 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ~PendingWallpaper(); 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // All Reset*() methods use SetMode() to set object to new state. 1685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void SetMode(const gfx::ImageSkia& image, 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const WallpaperInfo& info, 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& wallpaper_path, 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const bool is_default); 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This method is usually triggered by timer to actually load request. 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ProcessRequest(); 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This method is called by callback, when load request is finished. 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnWallpaperSet(); 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string user_id_; 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WallpaperInfo info_; 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::ImageSkia user_wallpaper_; 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FilePath wallpaper_path_; 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Load default wallpaper instead of user image. 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool default_; 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This is "on destroy" callback that will call OnWallpaperSet() when 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // image will be loaded. 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MovableOnDestroyCallbackHolder on_finish_; 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::OneShotTimer<WallpaperManager::PendingWallpaper> timer; 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Load start time to calculate duration. 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Time started_load_at_; 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PendingWallpaper); 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WallpaperManager(); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~WallpaperManager(); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Get pointer to singleton WallpaperManager instance, create it if necessary. 2025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static WallpaperManager* Get(); 2035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Registers wallpaper manager preferences. 2055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static void RegisterPrefs(PrefRegistrySimple* registry); 2065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Resizes |image| to a resolution which is nearest to |preferred_width| and 2085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // |preferred_height| while respecting the |layout| choice. |output_skia| is 2095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // optional (may be NULL). Returns true on success. 2105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static bool ResizeImage(const gfx::ImageSkia& image, 2115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ash::WallpaperLayout layout, 2125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int preferred_width, 2135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int preferred_height, 2145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_refptr<base::RefCountedBytes>* output, 2155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu gfx::ImageSkia* output_skia); 2165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Resizes |image| to a resolution which is nearest to |preferred_width| and 2185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // |preferred_height| while respecting the |layout| choice and saves the 2195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // resized wallpaper to |path|. |output_skia| is optional (may be 2205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // NULL). Returns true on success. 2215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static bool ResizeAndSaveWallpaper(const gfx::ImageSkia& image, 2225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::FilePath& path, 2235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ash::WallpaperLayout layout, 2245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int preferred_width, 2255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int preferred_height, 2265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu gfx::ImageSkia* output_skia); 2275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Returns the appropriate wallpaper resolution for all root windows. 2295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static WallpaperResolution GetAppropriateResolution(); 2305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Returns custom wallpaper path. Append |sub_dir|, |user_id_hash| and |file| 2326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // to custom wallpaper directory. 2336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) static base::FilePath GetCustomWallpaperPath(const char* sub_dir, 2346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const std::string& user_id_hash, 2356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const std::string& file); 2366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 237c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void SetCommandLineForTesting(base::CommandLine* command_line); 238a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Indicates imminent shutdown, allowing the WallpaperManager to remove any 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // observers it has registered. 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Shutdown(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds PowerManagerClient, TimeZoneSettings and CrosSettings observers. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddObservers(); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Loads wallpaper asynchronously if the current wallpaper is not the 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // wallpaper of logged in user. 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EnsureLoggedInUserWallpaperLoaded(); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets wallpaper information of logged in user. 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetLoggedInUserWallpaperInfo(WallpaperInfo* info); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initializes wallpaper. If logged in, loads user's wallpaper. If not logged 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in, uses a solid color wallpaper. If logged in as a stub user, uses an 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // empty wallpaper. 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitializeWallpaper(); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NotificationObserver overrides: 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Removes all |user_id| related wallpaper info and saved wallpapers. 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void RemoveUserWallpaperInfo(const std::string& user_id); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Calls SetCustomWallpaper() with |user_id_hash| received from cryptohome. 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void SetCustomWallpaperOnSanitizedUsername(const std::string& user_id, 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::ImageSkia& image, 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool update_wallpaper, 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool cryptohome_success, 2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& user_id_hash); 2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Saves custom wallpaper to file, post task to generate thumbnail and updates 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // local state preferences. If |update_wallpaper| is false, don't change 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // wallpaper but only update cache. 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetCustomWallpaper(const std::string& user_id, 2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& user_id_hash, 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& file, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ash::WallpaperLayout layout, 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user_manager::User::WallpaperType type, 2815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const gfx::ImageSkia& image, 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool update_wallpaper); 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Use given files as new default wallpaper. 2850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Reloads current wallpaper, if old default was loaded. 2860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Current value of default_wallpaper_image_ is destroyed. 2870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Sets default_wallpaper_image_ either to |small_wallpaper_image| or 2880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // |large_wallpaper_image| depending on GetAppropriateResolution(). 2890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void SetDefaultWallpaperPath( 2900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::FilePath& customized_default_wallpaper_file_small, 2910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<gfx::ImageSkia> small_wallpaper_image, 2920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::FilePath& customized_default_wallpaper_file_large, 2930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<gfx::ImageSkia> large_wallpaper_image); 2940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets wallpaper to default wallpaper (asynchronously with zero delay). 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetDefaultWallpaperNow(const std::string& user_id); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets wallpaper to default wallpaper (asynchronously with default delay). 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetDefaultWallpaperDelayed(const std::string& user_id); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets selected wallpaper information for |user_id| and saves it to Local 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // State if |is_persistent| is true. 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetUserWallpaperInfo(const std::string& user_id, 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WallpaperInfo& info, 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_persistent); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets |user_id|'s wallpaper (asynchronously with zero delay). 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetUserWallpaperNow(const std::string& user_id); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets |user_id|'s wallpaper (asynchronously with default delay). 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetUserWallpaperDelayed(const std::string& user_id); 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Sets wallpaper to |image| (asynchronously with zero delay). If 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // |update_wallpaper| is false, skip change wallpaper but only update cache. 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetWallpaperFromImageSkia(const std::string& user_id, 3165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const gfx::ImageSkia& image, 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::WallpaperLayout layout, 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool update_wallpaper); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates current wallpaper. It may switch the size of wallpaper based on the 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // current display's resolution. (asynchronously with zero delay) 322a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void UpdateWallpaper(bool clear_cache); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 324f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Adds given observer to the list. 325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AddObserver(Observer* observer); 326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Removes given observer from the list. 328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void RemoveObserver(Observer* observer); 329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 330a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Returns whether a wallpaper policy is enforced for |user_id|. 331a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool IsPolicyControlled(const std::string& user_id) const; 332a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 333a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Called when a wallpaper policy has been set for |user_id|. Blocks user 334a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // from changing the wallpaper. 335a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnPolicySet(const std::string& policy, const std::string& user_id); 336a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 337a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Called when the wallpaper policy has been cleared for |user_id|. 338a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnPolicyCleared(const std::string& policy, const std::string& user_id); 339a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 340a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Called when the policy-set wallpaper has been fetched. Initiates decoding 341a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // of the JPEG |data| with a callback to SetPolicyControlledWallpaper(). 342a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnPolicyFetched(const std::string& policy, 343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& user_id, 344a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<std::string> data); 345a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // This is called from CustomizationDocument. 3470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // |resized_directory| is the directory where resized versions are stored and 3480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // must be writable. 3490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void SetCustomizedDefaultWallpaper(const GURL& wallpaper_url, 3500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::FilePath& downloaded_file, 3510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::FilePath& resized_directory); 3520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Returns queue size. 354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size_t GetPendingListSizeForTesting() const; 355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 357a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) friend class TestApi; 3586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) friend class PendingWallpaper; 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class WallpaperManagerBrowserTest; 360c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch friend class WallpaperManagerBrowserTestDefaultWallpaper; 361effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch friend class WallpaperManagerPolicyTest; 362effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<std::string, gfx::ImageSkia> CustomWallpaperMap; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Saves original custom wallpaper to |path| (absolute path) on filesystem 3676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // and starts resizing operation of the custom wallpaper if necessary. 3686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) static void SaveCustomWallpaper(const std::string& user_id_hash, 3696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const base::FilePath& path, 3706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ash::WallpaperLayout layout, 3716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<gfx::ImageSkia> image); 3726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Moves custom wallpapers from |user_id| directory to |user_id_hash| 3746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // directory. 3756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) static void MoveCustomWallpapersOnWorker( 3766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const std::string& user_id, 3776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const std::string& user_id_hash, 3786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::WeakPtr<WallpaperManager> weak_ptr); 3796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Gets |user_id|'s custom wallpaper at |wallpaper_path|. Falls back on 3816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // original custom wallpaper. When |update_wallpaper| is true, sets wallpaper 3826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // to the loaded wallpaper. Must run on wallpaper sequenced worker thread. 3836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) static void GetCustomWallpaperInternal( 3846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const std::string& user_id, 3856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const WallpaperInfo& info, 3866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const base::FilePath& wallpaper_path, 3876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) bool update_wallpaper, 3886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) MovableOnDestroyCallbackHolder on_finish, 3896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) base::WeakPtr<WallpaperManager> weak_ptr); 3906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Resize and save customized default wallpaper. 3926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) static void ResizeCustomizedDefaultWallpaper( 3936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<gfx::ImageSkia> image, 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const user_manager::UserImage::RawImage& raw_image, 3956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const CustomizedWallpaperRescaledFiles* rescaled_files, 3966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) bool* success, 3976d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) gfx::ImageSkia* small_wallpaper_image, 3986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) gfx::ImageSkia* large_wallpaper_image); 3996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 4005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Initialize wallpaper for the specified user to default and saves this 4015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // settings in local state. 4025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void InitInitialUserWallpaper(const std::string& user_id, bool is_persistent); 4035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Set wallpaper to |user_image| controlled by policy. (Takes a UserImage 4055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // because that's the callback interface provided by UserImageLoader.) 406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void SetPolicyControlledWallpaper(const std::string& user_id, 407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const user_manager::UserImage& user_image); 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Gets encoded wallpaper from cache. Returns true if success. 4105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool GetWallpaperFromCache(const std::string& user_id, gfx::ImageSkia* image); 4115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The number of wallpapers have loaded. For test only. 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int loaded_wallpapers() const { return loaded_wallpapers_; } 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Cache some (or all) logged in users' wallpapers to memory at login 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // screen. It should not compete with first wallpaper loading when boot 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // up/initialize login WebUI page. 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There are two ways the first wallpaper might be loaded: 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1. Loaded on boot. Login WebUI waits for it. 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2. When flag --disable-boot-animation is passed. Login WebUI is loaded 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // right away and in 500ms after. Wallpaper started to load. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For case 2, should_cache_wallpaper_ is used to indicate if we need to 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cache wallpapers on wallpaper animation finished. The cache operation 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should be only executed once. 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CacheUsersWallpapers(); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Caches |user_id|'s wallpaper to memory. 4285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void CacheUserWallpaper(const std::string& user_id); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Clears disposable ONLINE and CUSTOM wallpaper cache. At multi profile 4315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // world, logged in users' wallpaper cache is not disposable. 4325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void ClearDisposableWallpaperCache(); 4335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clears all obsolete wallpaper prefs from old version wallpaper pickers. 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ClearObsoleteWallpaperPrefs(); 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Deletes all |user_id| related custom wallpapers and directories. 4385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void DeleteUserWallpapers(const std::string& user_id, 4394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& path_to_file); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 441a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Gets the CommandLine representing the current process's command line. 442c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::CommandLine* GetCommandLine(); 443a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Initialize wallpaper of registered device after device policy is trusted. 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that before device is enrolled, it proceeds with untrusted setting. 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void InitializeRegisteredDeviceWallpaper(); 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Loads |user_id|'s wallpaper. When |update_wallpaper| is true, sets 4495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // wallpaper to the loaded wallpaper. 4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void LoadWallpaper(const std::string& user_id, 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WallpaperInfo& info, 4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool update_wallpaper, 4535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MovableOnDestroyCallbackHolder on_finish); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Called when the original custom wallpaper is moved to the new place. 4564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Updates the corresponding user wallpaper info. 4575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void MoveCustomWallpapersSuccess(const std::string& user_id, 4584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& user_id_hash); 4594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Moves custom wallpaper to a new place. Email address was used as directory 4614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // name in the old system, this is not safe. New directory system uses 4625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // user_id_hash instead of user_id. This must be called after user_id_hash is 4634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // ready. 4644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void MoveLoggedInUserCustomWallpaper(); 4654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Gets wallpaper information of |user_id| from Local State or memory. Returns 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // false if wallpaper information is not found. 468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool GetUserWallpaperInfo(const std::string& user_id, 469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WallpaperInfo* info) const; 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets wallpaper to the decoded wallpaper if |update_wallpaper| is true. 4725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Otherwise, cache wallpaper to memory if not logged in. (Takes a UserImage 4735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // because that's the callback interface provided by UserImageLoader.) 4745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnWallpaperDecoded(const std::string& user_id, 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ash::WallpaperLayout layout, 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool update_wallpaper, 4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MovableOnDestroyCallbackHolder on_finish, 478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const user_manager::UserImage& user_image); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Creates new PendingWallpaper request (or updates currently pending). 4815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ScheduleSetUserWallpaper(const std::string& user_id, bool delayed); 4825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets wallpaper to default. 4845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void DoSetDefaultWallpaper( 4855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& user_id, 4865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MovableOnDestroyCallbackHolder on_finish); 4875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Starts to load wallpaper at |wallpaper_path|. If |wallpaper_path| is the 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // same as |current_wallpaper_path_|, do nothing. Must be called on UI thread. 4905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void StartLoad(const std::string& user_id, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WallpaperInfo& info, 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool update_wallpaper, 4935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& wallpaper_path, 4945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MovableOnDestroyCallbackHolder on_finish); 4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // After completed load operation, update average load time. 4975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SaveLastLoadTime(const base::TimeDelta elapsed); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Notify all registered observers. 500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void NotifyAnimationFinished(); 501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns modifiable PendingWallpaper. 5035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns pending_inactive_ or creates new PendingWallpaper if necessary. 5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PendingWallpaper* GetPendingWallpaper(const std::string& user_id, 5055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool delayed); 5065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 507cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // This is called by PendingWallpaper when load is finished. 508cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void RemovePendingWallpaperFromList(PendingWallpaper* pending); 509cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Calculate delay for next wallpaper load. 5115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // It is usually average wallpaper load time. 5125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If last wallpaper load happened long ago, timeout should be reduced by 5135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // the time passed after last wallpaper load. So usual user experience results 5145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // in zero delay. 5155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::TimeDelta GetWallpaperLoadDelay() const; 5165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // This is called after we check that supplied default wallpaper files exist. 5180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void SetCustomizedDefaultWallpaperAfterCheck( 5190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const GURL& wallpaper_url, 5200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::FilePath& downloaded_file, 5210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files); 5220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Starts rescaling of customized wallpaper. 5240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void OnCustomizedDefaultWallpaperDecoded( 5250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const GURL& wallpaper_url, 5260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files, 527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const user_manager::UserImage& user_image); 5280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Check the result of ResizeCustomizedDefaultWallpaper and finally 5300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // apply Customized Default Wallpaper. 5310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void OnCustomizedDefaultWallpaperResized( 5320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const GURL& wallpaper_url, 5330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files, 5340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<bool> success, 5350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<gfx::ImageSkia> small_wallpaper_image, 5360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<gfx::ImageSkia> large_wallpaper_image); 5370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 538c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Init |*default_*_wallpaper_file_| from given command line and 539c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // clear |default_wallpaper_image_|. 540c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void SetDefaultWallpaperPathsFromCommandLine(base::CommandLine* command_line); 541c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 542c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Sets wallpaper to decoded default. 543c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void OnDefaultWallpaperDecoded(const base::FilePath& path, 544c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const ash::WallpaperLayout layout, 545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<user_manager::UserImage>* result, 546c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch MovableOnDestroyCallbackHolder on_finish, 547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const user_manager::UserImage& user_image); 548c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 549c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Start decoding given default wallpaper. 550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void StartLoadAndSetDefaultWallpaper( 551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::FilePath& path, 552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ash::WallpaperLayout layout, 553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MovableOnDestroyCallbackHolder on_finish, 554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<user_manager::UserImage>* result_out); 555c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 556c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Returns wallpaper subdirectory name for current resolution. 557c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const char* GetCustomWallpaperSubdirForCurrentResolution(); 558c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 559cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Init default_wallpaper_image_ with 1x1 image of default color. 560cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void CreateSolidDefaultWallpaper(); 561cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The number of loaded wallpapers. 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int loaded_wallpapers_; 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sequence token associated with wallpaper operations. 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::SequencedWorkerPool::SequenceToken sequence_token_; 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wallpaper sequenced task runner. 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> task_runner_; 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The file path of current loaded/loading custom/online wallpaper. 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath current_wallpaper_path_; 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Loads user wallpaper from its file. 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<UserImageLoader> wallpaper_loader_; 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Logged-in user wallpaper information. 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WallpaperInfo current_user_wallpaper_info_; 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 580a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // If non-NULL, used in place of the real command line. 581a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::CommandLine* command_line_for_testing_; 582a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Caches wallpapers of users. Accessed only on UI thread. 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CustomWallpaperMap wallpaper_cache_; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The last selected user on user pod row. 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string last_selected_user_; 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool should_cache_wallpaper_; 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 59168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scoped_ptr<CrosSettings::ObserverSubscription> 59268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) show_user_name_on_signin_subscription_; 59368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 596f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ObserverList<Observer> observers_; 597f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // These members are for the scheduler: 5995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // When last load attempt finished. 6015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Time last_load_finished_at_; 6025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // last N wallpaper loads times. 6045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::deque<base::TimeDelta> last_load_times_; 6055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Pointer to last inactive (waiting) entry of 'loading_' list. 6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // NULL when there is no inactive request. 6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PendingWallpaper* pending_inactive_; 6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Owns PendingWallpaper. 6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // PendingWallpaper deletes itself from here on load complete. 6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // All pending will be finally deleted on destroy. 6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) typedef std::vector<scoped_refptr<PendingWallpaper> > PendingList; 6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PendingList loading_; 6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 616c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::FilePath default_small_wallpaper_file_; 617c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::FilePath default_large_wallpaper_file_; 618c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 619c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::FilePath guest_small_wallpaper_file_; 620c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::FilePath guest_large_wallpaper_file_; 621c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 622c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Current decoded default image is stored in cache. 623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<user_manager::UserImage> default_wallpaper_image_; 624c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 6251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::WeakPtrFactory<WallpaperManager> weak_factory_; 6261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WallpaperManager); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 632cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_WALLPAPER_WALLPAPER_MANAGER_H_ 633