1 // Copyright 2014 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 #ifndef COMPONENTS_WALLPAPER_WALLPAPER_MANAGER_BASE_H_
6 #define COMPONENTS_WALLPAPER_WALLPAPER_MANAGER_BASE_H_
13 #include "base/files/file_path.h"
14 #include "base/gtest_prod_util.h"
15 #include "base/memory/ref_counted_memory.h"
16 #include "base/memory/scoped_ptr.h"
17 #include "base/memory/weak_ptr.h"
18 #include "base/observer_list.h"
19 #include "base/threading/sequenced_worker_pool.h"
20 #include "base/time/time.h"
21 #include "base/timer/timer.h"
22 #include "components/user_manager/user.h"
23 #include "components/user_manager/user_image/user_image.h"
24 #include "components/wallpaper/wallpaper_export.h"
25 #include "components/wallpaper/wallpaper_layout.h"
26 #include "content/public/browser/notification_observer.h"
27 #include "content/public/browser/notification_registrar.h"
28 #include "third_party/icu/source/i18n/unicode/timezone.h"
29 #include "ui/gfx/image/image_skia.h"
31 class PrefRegistrySimple
;
35 class SequencedTaskRunner
;
38 namespace user_manager
{
45 // This object is passed between several threads while wallpaper is being
46 // loaded. It will notify callback when last reference to it is removed
47 // (thus indicating that the last load action has finished).
48 class WALLPAPER_EXPORT MovableOnDestroyCallback
{
50 explicit MovableOnDestroyCallback(const base::Closure
& callback
);
52 ~MovableOnDestroyCallback();
55 base::Closure callback_
;
58 typedef scoped_ptr
<MovableOnDestroyCallback
> MovableOnDestroyCallbackHolder
;
60 struct WALLPAPER_EXPORT WallpaperInfo
{
62 WallpaperInfo(const std::string
& in_location
,
63 WallpaperLayout in_layout
,
64 user_manager::User::WallpaperType in_type
,
65 const base::Time
& in_date
);
68 // Either file name of migrated wallpaper including first directory level
69 // (corresponding to user id hash) or online wallpaper URL.
71 WallpaperLayout layout
;
72 user_manager::User::WallpaperType type
;
74 bool operator==(const WallpaperInfo
& other
) {
75 return (location
== other
.location
) && (layout
== other
.layout
) &&
80 class WallpaperManagerBrowserTest
;
82 // Name of wallpaper sequence token.
83 WALLPAPER_EXPORT
extern const char kWallpaperSequenceTokenName
[];
85 // File path suffices of resized small or large wallpaper.
86 // TODO(bshe): Use the same sub folder system as custom wallpapers use.
88 WALLPAPER_EXPORT
extern const char kSmallWallpaperSuffix
[];
89 WALLPAPER_EXPORT
extern const char kLargeWallpaperSuffix
[];
91 // Directory names of custom wallpapers.
92 WALLPAPER_EXPORT
extern const char kSmallWallpaperSubDir
[];
93 WALLPAPER_EXPORT
extern const char kLargeWallpaperSubDir
[];
94 WALLPAPER_EXPORT
extern const char kOriginalWallpaperSubDir
[];
95 WALLPAPER_EXPORT
extern const char kThumbnailWallpaperSubDir
[];
97 // The width and height of small/large resolution wallpaper. When screen size is
98 // smaller than |kSmallWallpaperMaxWidth| and |kSmallWallpaperMaxHeight|, the
99 // small resolution wallpaper should be used. Otherwise, use the large
100 // resolution wallpaper.
101 WALLPAPER_EXPORT
extern const int kSmallWallpaperMaxWidth
;
102 WALLPAPER_EXPORT
extern const int kSmallWallpaperMaxHeight
;
103 WALLPAPER_EXPORT
extern const int kLargeWallpaperMaxWidth
;
104 WALLPAPER_EXPORT
extern const int kLargeWallpaperMaxHeight
;
106 // The width and height of wallpaper thumbnails.
107 WALLPAPER_EXPORT
extern const int kWallpaperThumbnailWidth
;
108 WALLPAPER_EXPORT
extern const int kWallpaperThumbnailHeight
;
110 // A dictionary that maps usernames to wallpaper properties.
111 WALLPAPER_EXPORT
extern const char kUsersWallpaperInfo
[];
113 // A dictionary pref that maps usernames to file paths to their wallpapers.
114 // Deprecated. Will remove this const char after done migration.
115 WALLPAPER_EXPORT
extern const char kUserWallpapers
[];
117 // A dictionary pref that maps usernames to wallpaper properties.
118 WALLPAPER_EXPORT
extern const char kUserWallpapersProperties
[];
120 // This singleton class maintains wallpapers for users who have logged into this
122 class WALLPAPER_EXPORT WallpaperManagerBase
123 : public content::NotificationObserver
{
125 enum WallpaperResolution
{
126 WALLPAPER_RESOLUTION_LARGE
,
127 WALLPAPER_RESOLUTION_SMALL
129 class CustomizedWallpaperRescaledFiles
{
131 CustomizedWallpaperRescaledFiles(const base::FilePath
& path_downloaded
,
132 const base::FilePath
& path_rescaled_small
,
133 const base::FilePath
& path_rescaled_large
);
134 bool AllSizesExist() const;
136 // Closure will hold unretained pointer to this object. So caller must
137 // make sure that the closure will be destoyed before this object.
138 // Closure must be called on BlockingPool.
139 base::Closure
CreateCheckerClosure();
141 const base::FilePath
& path_downloaded() const;
142 const base::FilePath
& path_rescaled_small() const;
143 const base::FilePath
& path_rescaled_large() const;
145 bool downloaded_exists() const;
146 bool rescaled_small_exists() const;
147 bool rescaled_large_exists() const;
150 // Must be called on BlockingPool.
151 void CheckCustomizedWallpaperFilesExist();
153 const base::FilePath path_downloaded_
;
154 const base::FilePath path_rescaled_small_
;
155 const base::FilePath path_rescaled_large_
;
157 bool downloaded_exists_
;
158 bool rescaled_small_exists_
;
159 bool rescaled_large_exists_
;
161 DISALLOW_COPY_AND_ASSIGN(CustomizedWallpaperRescaledFiles
);
167 explicit TestApi(WallpaperManagerBase
* wallpaper_manager
);
170 bool GetWallpaperFromCache(const std::string
& user_id
,
171 gfx::ImageSkia
* image
);
173 bool GetPathFromCache(const std::string
& user_id
,
174 base::FilePath
* path
);
176 void SetWallpaperCache(const std::string
& user_id
,
177 const base::FilePath
& path
,
178 const gfx::ImageSkia
& image
);
180 void ClearDisposableWallpaperCache();
183 WallpaperManagerBase
* wallpaper_manager_
; // not owned
185 DISALLOW_COPY_AND_ASSIGN(TestApi
);
190 virtual ~Observer() {}
191 virtual void OnWallpaperAnimationFinished(const std::string
& user_id
) = 0;
192 virtual void OnUpdateWallpaperForTesting() {}
193 virtual void OnPendingListEmptyForTesting() {}
196 // set path IDs for used directories
197 static void SetPathIds(int dir_user_data_enum
,
198 int dir_chromeos_wallpapers_enum
,
199 int dir_chromeos_custom_wallpapers_enum
);
201 // Returns custom wallpaper directory by appending corresponding |sub_dir|.
202 static base::FilePath
GetCustomWallpaperDir(const char* sub_dir
);
204 // Registers wallpaper manager preferences.
205 static void RegisterPrefs(PrefRegistrySimple
* registry
);
207 // Resizes |image| to a resolution which is nearest to |preferred_width| and
208 // |preferred_height| while respecting the |layout| choice. |output_skia| is
209 // optional (may be NULL). Returns true on success.
210 static bool ResizeImage(const gfx::ImageSkia
& image
,
211 WallpaperLayout layout
,
213 int preferred_height
,
214 scoped_refptr
<base::RefCountedBytes
>* output
,
215 gfx::ImageSkia
* output_skia
);
217 // Resizes |image| to a resolution which is nearest to |preferred_width| and
218 // |preferred_height| while respecting the |layout| choice and saves the
219 // resized wallpaper to |path|. |output_skia| is optional (may be
220 // NULL). Returns true on success.
221 static bool ResizeAndSaveWallpaper(const gfx::ImageSkia
& image
,
222 const base::FilePath
& path
,
223 WallpaperLayout layout
,
225 int preferred_height
,
226 gfx::ImageSkia
* output_skia
);
228 // Returns custom wallpaper path. Append |sub_dir|, |user_id_hash| and |file|
229 // to custom wallpaper directory.
230 static base::FilePath
GetCustomWallpaperPath(const char* sub_dir
,
231 const std::string
& user_id_hash
,
232 const std::string
& file
);
234 WallpaperManagerBase();
235 ~WallpaperManagerBase() override
;
237 // Returns the appropriate wallpaper resolution for all root windows.
238 virtual WallpaperResolution
GetAppropriateResolution() = 0;
240 virtual void SetCommandLineForTesting(base::CommandLine
* command_line
);
242 // Adds PowerManagerClient, TimeZoneSettings and CrosSettings observers.
243 virtual void AddObservers() = 0;
245 // Loads wallpaper asynchronously if the current wallpaper is not the
246 // wallpaper of logged in user.
247 virtual void EnsureLoggedInUserWallpaperLoaded();
249 // Gets wallpaper information of logged in user.
250 virtual bool GetLoggedInUserWallpaperInfo(WallpaperInfo
* info
);
252 // Initializes wallpaper. If logged in, loads user's wallpaper. If not logged
253 // in, uses a solid color wallpaper. If logged in as a stub user, uses an
255 virtual void InitializeWallpaper() = 0;
257 // NotificationObserver overrides:
258 void Observe(int type
,
259 const content::NotificationSource
& source
,
260 const content::NotificationDetails
& details
) override
= 0;
262 // Removes all |user_id| related wallpaper info and saved wallpapers.
263 virtual void RemoveUserWallpaperInfo(const std::string
& user_id
) = 0;
265 // Calls SetCustomWallpaper() with |user_id_hash| received from cryptohome.
266 virtual void SetCustomWallpaperOnSanitizedUsername(
267 const std::string
& user_id
,
268 const gfx::ImageSkia
& image
,
269 bool update_wallpaper
,
270 bool cryptohome_success
,
271 const std::string
& user_id_hash
);
273 // Saves custom wallpaper to file, post task to generate thumbnail and updates
274 // local state preferences. If |update_wallpaper| is false, don't change
275 // wallpaper but only update cache.
276 virtual void SetCustomWallpaper(const std::string
& user_id
,
277 const std::string
& user_id_hash
,
278 const std::string
& file
,
279 WallpaperLayout layout
,
280 user_manager::User::WallpaperType type
,
281 const gfx::ImageSkia
& image
,
282 bool update_wallpaper
) = 0;
284 // Use given files as new default wallpaper.
285 // Reloads current wallpaper, if old default was loaded.
286 // Current value of default_wallpaper_image_ is destroyed.
287 // Sets default_wallpaper_image_ either to |small_wallpaper_image| or
288 // |large_wallpaper_image| depending on GetAppropriateResolution().
289 virtual void SetDefaultWallpaperPath(
290 const base::FilePath
& customized_default_wallpaper_file_small
,
291 scoped_ptr
<gfx::ImageSkia
> small_wallpaper_image
,
292 const base::FilePath
& customized_default_wallpaper_file_large
,
293 scoped_ptr
<gfx::ImageSkia
> large_wallpaper_image
) = 0;
295 // Sets wallpaper to default wallpaper (asynchronously with zero delay).
296 virtual void SetDefaultWallpaperNow(const std::string
& user_id
) = 0;
298 // Sets wallpaper to default wallpaper (asynchronously with default delay).
299 virtual void SetDefaultWallpaperDelayed(const std::string
& user_id
) = 0;
301 // Sets selected wallpaper information for |user_id| and saves it to Local
302 // State if |is_persistent| is true.
303 virtual void SetUserWallpaperInfo(const std::string
& user_id
,
304 const WallpaperInfo
& info
,
305 bool is_persistent
) = 0;
307 // Sets |user_id|'s wallpaper (asynchronously with zero delay).
308 virtual void SetUserWallpaperNow(const std::string
& user_id
);
310 // Sets |user_id|'s wallpaper (asynchronously with default delay).
311 virtual void SetUserWallpaperDelayed(const std::string
& user_id
);
313 // Sets wallpaper to |image| (asynchronously with zero delay). If
314 // |update_wallpaper| is false, skip change wallpaper but only update cache.
315 virtual void SetWallpaperFromImageSkia(const std::string
& user_id
,
316 const gfx::ImageSkia
& image
,
317 WallpaperLayout layout
,
318 bool update_wallpaper
) = 0;
320 // Updates current wallpaper. It may switch the size of wallpaper based on the
321 // current display's resolution. (asynchronously with zero delay)
322 virtual void UpdateWallpaper(bool clear_cache
);
324 // Adds given observer to the list.
325 virtual void AddObserver(Observer
* observer
);
327 // Removes given observer from the list.
328 virtual void RemoveObserver(Observer
* observer
);
330 // Returns whether a wallpaper policy is enforced for |user_id|.
331 virtual bool IsPolicyControlled(const std::string
& user_id
) const;
333 // Called when a wallpaper policy has been set for |user_id|. Blocks user
334 // from changing the wallpaper.
335 virtual void OnPolicySet(const std::string
& policy
,
336 const std::string
& user_id
);
338 // Called when the wallpaper policy has been cleared for |user_id|.
339 virtual void OnPolicyCleared(const std::string
& policy
,
340 const std::string
& user_id
);
342 // Called when the policy-set wallpaper has been fetched. Initiates decoding
343 // of the JPEG |data| with a callback to SetPolicyControlledWallpaper().
344 virtual void OnPolicyFetched(const std::string
& policy
,
345 const std::string
& user_id
,
346 scoped_ptr
<std::string
> data
) = 0;
348 // This is called from CustomizationDocument.
349 // |resized_directory| is the directory where resized versions are stored and
351 virtual void SetCustomizedDefaultWallpaper(
352 const GURL
& wallpaper_url
,
353 const base::FilePath
& downloaded_file
,
354 const base::FilePath
& resized_directory
);
356 // Returns queue size.
357 virtual size_t GetPendingListSizeForTesting() const = 0;
360 friend class TestApi
;
361 friend class WallpaperManagerBrowserTest
;
362 friend class WallpaperManagerBrowserTestDefaultWallpaper
;
363 friend class WallpaperManagerPolicyTest
;
365 // The |CustomWallpaperElement| contains |first| the path of the image which
366 // is currently being loaded and or in progress of being loaded and |second|
368 typedef std::pair
<base::FilePath
, gfx::ImageSkia
> CustomWallpaperElement
;
369 typedef std::map
<std::string
, CustomWallpaperElement
> CustomWallpaperMap
;
371 // Saves original custom wallpaper to |path| (absolute path) on filesystem
372 // and starts resizing operation of the custom wallpaper if necessary.
373 static void SaveCustomWallpaper(const std::string
& user_id_hash
,
374 const base::FilePath
& path
,
375 WallpaperLayout layout
,
376 scoped_ptr
<gfx::ImageSkia
> image
);
378 // Moves custom wallpapers from |user_id| directory to |user_id_hash|
380 static void MoveCustomWallpapersOnWorker(
381 const std::string
& user_id
,
382 const std::string
& user_id_hash
,
383 base::WeakPtr
<WallpaperManagerBase
> weak_ptr
);
385 // Gets |user_id|'s custom wallpaper at |wallpaper_path|. Falls back on
386 // original custom wallpaper. When |update_wallpaper| is true, sets wallpaper
387 // to the loaded wallpaper. Must run on wallpaper sequenced worker thread.
388 static void GetCustomWallpaperInternal(
389 const std::string
& user_id
,
390 const WallpaperInfo
& info
,
391 const base::FilePath
& wallpaper_path
,
392 bool update_wallpaper
,
393 MovableOnDestroyCallbackHolder on_finish
,
394 base::WeakPtr
<WallpaperManagerBase
> weak_ptr
);
396 // Resize and save customized default wallpaper.
397 static void ResizeCustomizedDefaultWallpaper(
398 scoped_ptr
<gfx::ImageSkia
> image
,
399 const user_manager::UserImage::RawImage
& raw_image
,
400 const CustomizedWallpaperRescaledFiles
* rescaled_files
,
402 gfx::ImageSkia
* small_wallpaper_image
,
403 gfx::ImageSkia
* large_wallpaper_image
);
405 // Initialize wallpaper for the specified user to default and saves this
406 // settings in local state.
407 virtual void InitInitialUserWallpaper(const std::string
& user_id
,
410 // Set wallpaper to |user_image| controlled by policy. (Takes a UserImage
411 // because that's the callback interface provided by UserImageLoader.)
412 virtual void SetPolicyControlledWallpaper(
413 const std::string
& user_id
,
414 const user_manager::UserImage
& user_image
);
416 // Gets encoded wallpaper from cache. Returns true if success.
417 virtual bool GetWallpaperFromCache(const std::string
& user_id
,
418 gfx::ImageSkia
* image
);
420 // Gets path of encoded wallpaper from cache. Returns true if success.
421 virtual bool GetPathFromCache(const std::string
& user_id
,
422 base::FilePath
* path
);
424 // The number of wallpapers have loaded. For test only.
425 virtual int loaded_wallpapers_for_test() const;
427 // Cache some (or all) logged in users' wallpapers to memory at login
428 // screen. It should not compete with first wallpaper loading when boot
429 // up/initialize login WebUI page.
430 // There are two ways the first wallpaper might be loaded:
431 // 1. Loaded on boot. Login WebUI waits for it.
432 // 2. When flag --disable-boot-animation is passed. Login WebUI is loaded
433 // right away and in 500ms after. Wallpaper started to load.
434 // For case 2, should_cache_wallpaper_ is used to indicate if we need to
435 // cache wallpapers on wallpaper animation finished. The cache operation
436 // should be only executed once.
437 virtual void CacheUsersWallpapers();
439 // Caches |user_id|'s wallpaper to memory.
440 virtual void CacheUserWallpaper(const std::string
& user_id
);
442 // Clears disposable ONLINE and CUSTOM wallpaper cache. At multi profile
443 // world, logged in users' wallpaper cache is not disposable.
444 virtual void ClearDisposableWallpaperCache();
446 // Deletes all |user_id| related custom wallpapers and directories.
447 virtual void DeleteUserWallpapers(const std::string
& user_id
,
448 const std::string
& path_to_file
);
450 // Gets the CommandLine representing the current process's command line.
451 virtual base::CommandLine
* GetCommandLine();
453 // Initialize wallpaper of registered device after device policy is trusted.
454 // Note that before device is enrolled, it proceeds with untrusted setting.
455 virtual void InitializeRegisteredDeviceWallpaper() = 0;
457 // Loads |user_id|'s wallpaper. When |update_wallpaper| is true, sets
458 // wallpaper to the loaded wallpaper.
459 virtual void LoadWallpaper(const std::string
& user_id
,
460 const WallpaperInfo
& info
,
461 bool update_wallpaper
,
462 MovableOnDestroyCallbackHolder on_finish
);
464 // Called when the original custom wallpaper is moved to the new place.
465 // Updates the corresponding user wallpaper info.
466 virtual void MoveCustomWallpapersSuccess(const std::string
& user_id
,
467 const std::string
& user_id_hash
);
469 // Moves custom wallpaper to a new place. Email address was used as directory
470 // name in the old system, this is not safe. New directory system uses
471 // user_id_hash instead of user_id. This must be called after user_id_hash is
473 virtual void MoveLoggedInUserCustomWallpaper();
475 // Gets wallpaper information of |user_id| from Local State or memory. Returns
476 // false if wallpaper information is not found.
477 virtual bool GetUserWallpaperInfo(const std::string
& user_id
,
478 WallpaperInfo
* info
) const = 0;
480 // Sets wallpaper to the decoded wallpaper if |update_wallpaper| is true.
481 // Otherwise, cache wallpaper to memory if not logged in. (Takes a UserImage
482 // because that's the callback interface provided by UserImageLoader.)
483 virtual void OnWallpaperDecoded(
484 const std::string
& user_id
,
485 WallpaperLayout layout
,
486 bool update_wallpaper
,
487 MovableOnDestroyCallbackHolder on_finish
,
488 const user_manager::UserImage
& user_image
) = 0;
490 // Creates new PendingWallpaper request (or updates currently pending).
491 virtual void ScheduleSetUserWallpaper(const std::string
& user_id
,
494 // Sets wallpaper to default.
495 virtual void DoSetDefaultWallpaper(
496 const std::string
& user_id
,
497 MovableOnDestroyCallbackHolder on_finish
) = 0;
499 // Starts to load wallpaper at |wallpaper_path|. If |wallpaper_path| is
500 // already loaded for that user, do nothing. Must be called on UI thread.
501 virtual void StartLoad(const std::string
& user_id
,
502 const WallpaperInfo
& info
,
503 bool update_wallpaper
,
504 const base::FilePath
& wallpaper_path
,
505 MovableOnDestroyCallbackHolder on_finish
) = 0;
507 // After completed load operation, update average load time.
508 virtual void SaveLastLoadTime(const base::TimeDelta elapsed
);
510 // Notify all registered observers.
511 virtual void NotifyAnimationFinished();
513 // Calculate delay for next wallpaper load.
514 // It is usually average wallpaper load time.
515 // If last wallpaper load happened long ago, timeout should be reduced by
516 // the time passed after last wallpaper load. So usual user experience results
518 virtual base::TimeDelta
GetWallpaperLoadDelay() const;
520 // This is called after we check that supplied default wallpaper files exist.
521 virtual void SetCustomizedDefaultWallpaperAfterCheck(
522 const GURL
& wallpaper_url
,
523 const base::FilePath
& downloaded_file
,
524 scoped_ptr
<CustomizedWallpaperRescaledFiles
> rescaled_files
) = 0;
526 // Starts rescaling of customized wallpaper.
527 virtual void OnCustomizedDefaultWallpaperDecoded(
528 const GURL
& wallpaper_url
,
529 scoped_ptr
<CustomizedWallpaperRescaledFiles
> rescaled_files
,
530 const user_manager::UserImage
& user_image
);
532 // Check the result of ResizeCustomizedDefaultWallpaper and finally
533 // apply Customized Default Wallpaper.
534 virtual void OnCustomizedDefaultWallpaperResized(
535 const GURL
& wallpaper_url
,
536 scoped_ptr
<CustomizedWallpaperRescaledFiles
> rescaled_files
,
537 scoped_ptr
<bool> success
,
538 scoped_ptr
<gfx::ImageSkia
> small_wallpaper_image
,
539 scoped_ptr
<gfx::ImageSkia
> large_wallpaper_image
) = 0;
541 // Init |*default_*_wallpaper_file_| from given command line and
542 // clear |default_wallpaper_image_|.
543 virtual void SetDefaultWallpaperPathsFromCommandLine(
544 base::CommandLine
* command_line
);
546 // Sets wallpaper to decoded default.
547 virtual void OnDefaultWallpaperDecoded(
548 const base::FilePath
& path
,
549 const WallpaperLayout layout
,
550 scoped_ptr
<user_manager::UserImage
>* result
,
551 MovableOnDestroyCallbackHolder on_finish
,
552 const user_manager::UserImage
& user_image
) = 0;
554 // Start decoding given default wallpaper.
555 virtual void StartLoadAndSetDefaultWallpaper(
556 const base::FilePath
& path
,
557 const WallpaperLayout layout
,
558 MovableOnDestroyCallbackHolder on_finish
,
559 scoped_ptr
<user_manager::UserImage
>* result_out
) = 0;
561 // Returns wallpaper subdirectory name for current resolution.
562 virtual const char* GetCustomWallpaperSubdirForCurrentResolution();
564 // Init default_wallpaper_image_ with 1x1 image of default color.
565 virtual void CreateSolidDefaultWallpaper();
567 // The number of loaded wallpapers.
568 int loaded_wallpapers_for_test_
;
570 // Sequence token associated with wallpaper operations.
571 base::SequencedWorkerPool::SequenceToken sequence_token_
;
573 // Wallpaper sequenced task runner.
574 scoped_refptr
<base::SequencedTaskRunner
> task_runner_
;
576 // Logged-in user wallpaper information.
577 WallpaperInfo current_user_wallpaper_info_
;
579 // If non-NULL, used in place of the real command line.
580 base::CommandLine
* command_line_for_testing_
;
582 // Caches wallpapers of users. Accessed only on UI thread.
583 CustomWallpaperMap wallpaper_cache_
;
585 // The last selected user on user pod row.
586 std::string last_selected_user_
;
588 bool should_cache_wallpaper_
;
590 content::NotificationRegistrar registrar_
;
592 base::ObserverList
<Observer
> observers_
;
594 // These members are for the scheduler:
596 // When last load attempt finished.
597 base::Time last_load_finished_at_
;
599 // last N wallpaper loads times.
600 std::deque
<base::TimeDelta
> last_load_times_
;
602 base::FilePath default_small_wallpaper_file_
;
603 base::FilePath default_large_wallpaper_file_
;
605 base::FilePath guest_small_wallpaper_file_
;
606 base::FilePath guest_large_wallpaper_file_
;
608 base::FilePath child_small_wallpaper_file_
;
609 base::FilePath child_large_wallpaper_file_
;
611 // Current decoded default image is stored in cache.
612 scoped_ptr
<user_manager::UserImage
> default_wallpaper_image_
;
614 base::WeakPtrFactory
<WallpaperManagerBase
> weak_factory_
;
617 DISALLOW_COPY_AND_ASSIGN(WallpaperManagerBase
);
620 } // namespace chromeos
622 #endif // COMPONENTS_WALLPAPER_WALLPAPER_MANAGER_BASE_H_