Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(372)

Side by Side Diff: chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h

Issue 2413503002: Cleanup mojo Wallpaper interfaces for mash. (Closed)
Patch Set: Sync and rebase; do *not* use mojo in classic ash. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USERS_WALLPAPER_WALLPAPER_MANAGER_H_ 5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USERS_WALLPAPER_WALLPAPER_MANAGER_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_WALLPAPER_WALLPAPER_MANAGER_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_WALLPAPER_WALLPAPER_MANAGER_H_
7 7
8 #include <stddef.h>
9
10 #include <deque>
11 #include <memory> 8 #include <memory>
12 #include <string> 9 #include <string>
13 #include <vector> 10 #include <vector>
14 11
15 #include "base/files/file_path.h" 12 #include "ash/public/interfaces/wallpaper.mojom.h"
16 #include "base/macros.h" 13 #include "base/macros.h"
17 #include "base/memory/ref_counted_memory.h" 14 #include "base/memory/ref_counted_memory.h"
18 #include "base/memory/weak_ptr.h" 15 #include "base/memory/weak_ptr.h"
19 #include "base/observer_list.h"
20 #include "base/threading/sequenced_worker_pool.h"
21 #include "base/time/time.h"
22 #include "chrome/browser/chromeos/login/users/avatar/user_image_loader.h"
23 #include "chrome/browser/chromeos/settings/cros_settings.h" 16 #include "chrome/browser/chromeos/settings/cros_settings.h"
24 #include "components/user_manager/user.h" 17 #include "components/user_manager/user.h"
25 #include "components/user_manager/user_image/user_image.h" 18 #include "components/user_manager/user_image/user_image.h"
26 #include "components/user_manager/user_manager.h" 19 #include "components/user_manager/user_manager.h"
27 #include "components/wallpaper/wallpaper_layout.h" 20 #include "components/wallpaper/wallpaper_layout.h"
28 #include "components/wallpaper/wallpaper_manager_base.h" 21 #include "components/wallpaper/wallpaper_manager_base.h"
29 #include "content/public/browser/notification_observer.h" 22 #include "content/public/browser/notification_observer.h"
30 #include "content/public/browser/notification_registrar.h" 23 #include "content/public/browser/notification_registrar.h"
24 #include "mojo/public/cpp/bindings/binding_set.h"
31 #include "ui/gfx/image/image_skia.h" 25 #include "ui/gfx/image/image_skia.h"
32 26
33 namespace chromeos { 27 namespace chromeos {
34 28
35 class WallpaperManager 29 class WallpaperManager
36 : public wallpaper::WallpaperManagerBase, 30 : public wallpaper::WallpaperManagerBase,
31 public ash::mojom::WallpaperManager,
37 public content::NotificationObserver, 32 public content::NotificationObserver,
38 public user_manager::UserManager::UserSessionStateObserver { 33 public user_manager::UserManager::UserSessionStateObserver {
39 public: 34 public:
40 class PendingWallpaper; 35 class PendingWallpaper;
41 36
42 ~WallpaperManager() override; 37 ~WallpaperManager() override;
43 38
44 // Creates an instance of Wallpaper Manager. If there is no instance, create 39 // Creates an instance of Wallpaper Manager. If there is no instance, create
45 // one. Otherwise, returns the existing instance. 40 // one. Otherwise, returns the existing instance.
46 static void Initialize(); 41 static void Initialize();
47 42
48 // Gets pointer to singleton WallpaperManager instance. 43 // Gets pointer to singleton WallpaperManager instance.
49 static WallpaperManager* Get(); 44 static WallpaperManager* Get();
50 45
51 // Deletes the existing instance of WallpaperManager. Allows the 46 // Deletes the existing instance of WallpaperManager. Allows the
52 // WallpaperManager to remove any observers it has registered. 47 // WallpaperManager to remove any observers it has registered.
53 static void Shutdown(); 48 static void Shutdown();
54 49
55 // Returns the appropriate wallpaper resolution for all root windows. 50 // Binds the mojom::WallpaperManager interface request to this object.
51 void BindRequest(ash::mojom::WallpaperManagerRequest request);
52
53 // wallpaper::WallpaperManagerBase:
56 WallpaperResolution GetAppropriateResolution() override; 54 WallpaperResolution GetAppropriateResolution() override;
57
58 // Adds PowerManagerClient, TimeZoneSettings and CrosSettings observers.
59 void AddObservers() override; 55 void AddObservers() override;
60
61 // Loads wallpaper asynchronously if the current wallpaper is not the
62 // wallpaper of logged in user.
63 void EnsureLoggedInUserWallpaperLoaded() override; 56 void EnsureLoggedInUserWallpaperLoaded() override;
64
65 // Initializes wallpaper. If logged in, loads user's wallpaper. If not logged
66 // in, uses a solid color wallpaper. If logged in as a stub user, uses an
67 // empty wallpaper.
68 void InitializeWallpaper() override; 57 void InitializeWallpaper() override;
69
70 // NotificationObserver overrides:
71 void Observe(int type,
72 const content::NotificationSource& source,
73 const content::NotificationDetails& details) override;
74
75 // Removes all |account_id| related wallpaper info and saved wallpapers.
76 void RemoveUserWallpaperInfo(const AccountId& account_id) override; 58 void RemoveUserWallpaperInfo(const AccountId& account_id) override;
77
78 // Called when the policy-set wallpaper has been fetched. Initiates decoding
79 // of the JPEG |data| with a callback to SetPolicyControlledWallpaper().
80 void OnPolicyFetched(const std::string& policy, 59 void OnPolicyFetched(const std::string& policy,
81 const AccountId& account_id, 60 const AccountId& account_id,
82 std::unique_ptr<std::string> data) override; 61 std::unique_ptr<std::string> data) override;
83
84 // Saves custom wallpaper to file, post task to generate thumbnail and updates
85 // local state preferences. If |update_wallpaper| is false, don't change
86 // wallpaper but only update cache.
87 void SetCustomWallpaper(const AccountId& account_id, 62 void SetCustomWallpaper(const AccountId& account_id,
88 const wallpaper::WallpaperFilesId& wallpaper_files_id, 63 const wallpaper::WallpaperFilesId& wallpaper_files_id,
89 const std::string& file, 64 const std::string& file,
90 wallpaper::WallpaperLayout layout, 65 wallpaper::WallpaperLayout layout,
91 user_manager::User::WallpaperType type, 66 user_manager::User::WallpaperType type,
92 const gfx::ImageSkia& image, 67 const gfx::ImageSkia& image,
93 bool update_wallpaper) override; 68 bool update_wallpaper) override;
94
95 // Sets wallpaper to default wallpaper (asynchronously with zero delay).
96 void SetDefaultWallpaperNow(const AccountId& account_id) override; 69 void SetDefaultWallpaperNow(const AccountId& account_id) override;
97
98 // Sets wallpaper to default wallpaper (asynchronously with default delay).
99 void SetDefaultWallpaperDelayed(const AccountId& account_id) override; 70 void SetDefaultWallpaperDelayed(const AccountId& account_id) override;
100
101 // Sets wallpaper to default.
102 void DoSetDefaultWallpaper( 71 void DoSetDefaultWallpaper(
103 const AccountId& account_id, 72 const AccountId& account_id,
104 wallpaper::MovableOnDestroyCallbackHolder on_finish) override; 73 wallpaper::MovableOnDestroyCallbackHolder on_finish) override;
105
106 // Sets selected wallpaper information for |account_id| and saves it to Local
107 // State if |is_persistent| is true.
108 void SetUserWallpaperInfo(const AccountId& account_id, 74 void SetUserWallpaperInfo(const AccountId& account_id,
109 const wallpaper::WallpaperInfo& info, 75 const wallpaper::WallpaperInfo& info,
110 bool is_persistent) override; 76 bool is_persistent) override;
111
112 // Creates new PendingWallpaper request (or updates currently pending).
113 void ScheduleSetUserWallpaper(const AccountId& account_id, 77 void ScheduleSetUserWallpaper(const AccountId& account_id,
114 bool delayed) override; 78 bool delayed) override;
115
116 // Sets wallpaper to |image| (asynchronously with zero delay). If
117 // |update_wallpaper| is false, skip change wallpaper but only update cache.
118 void SetWallpaperFromImageSkia(const AccountId& account_id, 79 void SetWallpaperFromImageSkia(const AccountId& account_id,
119 const gfx::ImageSkia& image, 80 const gfx::ImageSkia& image,
120 wallpaper::WallpaperLayout layout, 81 wallpaper::WallpaperLayout layout,
121 bool update_wallpaper) override; 82 bool update_wallpaper) override;
122
123 // Updates current wallpaper. It may switch the size of wallpaper based on the
124 // current display's resolution. (asynchronously with zero delay)
125 void UpdateWallpaper(bool clear_cache) override; 83 void UpdateWallpaper(bool clear_cache) override;
126
127 // Returns queue size.
128 size_t GetPendingListSizeForTesting() const override; 84 size_t GetPendingListSizeForTesting() const override;
129
130 // Returns wallpaper files id for the |account_id|.
131 wallpaper::WallpaperFilesId GetFilesId( 85 wallpaper::WallpaperFilesId GetFilesId(
132 const AccountId& account_id) const override; 86 const AccountId& account_id) const override;
133 87
134 // Overridden from user_manager::UserManager::UserSessionStateObserver: 88 // ash::mojom::WallpaperManager:
89 void Open() override;
90
91 // content::NotificationObserver:
92 void Observe(int type,
93 const content::NotificationSource& source,
94 const content::NotificationDetails& details) override;
95
96 // user_manager::UserManager::UserSessionStateObserver:
135 void UserChangedChildStatus(user_manager::User* user) override; 97 void UserChangedChildStatus(user_manager::User* user) override;
136 98
137 private: 99 private:
138 friend class TestApi; 100 friend class TestApi;
139 friend class WallpaperManagerBrowserTest; 101 friend class WallpaperManagerBrowserTest;
140 friend class WallpaperManagerBrowserTestDefaultWallpaper; 102 friend class WallpaperManagerBrowserTestDefaultWallpaper;
141 friend class WallpaperManagerPolicyTest; 103 friend class WallpaperManagerPolicyTest;
142 104
143 WallpaperManager(); 105 WallpaperManager();
144 106
145 // Returns modifiable PendingWallpaper. 107 // Returns modifiable PendingWallpaper.
146 // Returns pending_inactive_ or creates new PendingWallpaper if necessary. 108 // Returns pending_inactive_ or creates new PendingWallpaper if necessary.
147 PendingWallpaper* GetPendingWallpaper(const AccountId& account_id, 109 PendingWallpaper* GetPendingWallpaper(const AccountId& account_id,
148 bool delayed); 110 bool delayed);
149 111
150 // This is called by PendingWallpaper when load is finished. 112 // This is called by PendingWallpaper when load is finished.
151 void RemovePendingWallpaperFromList(PendingWallpaper* pending); 113 void RemovePendingWallpaperFromList(PendingWallpaper* pending);
152 114
153 // Set wallpaper to |user_image| controlled by policy. (Takes a UserImage 115 // Set wallpaper to |user_image| controlled by policy. (Takes a UserImage
154 // because that's the callback interface provided by UserImageLoader.) 116 // because that's the callback interface provided by UserImageLoader.)
155 void SetPolicyControlledWallpaper( 117 void SetPolicyControlledWallpaper(
156 const AccountId& account_id, 118 const AccountId& account_id,
157 std::unique_ptr<user_manager::UserImage> user_image); 119 std::unique_ptr<user_manager::UserImage> user_image);
158 120
159 // WallpaperManagerBase overrides: 121 // wallpaper::WallpaperManagerBase:
160 void InitializeRegisteredDeviceWallpaper() override; 122 void InitializeRegisteredDeviceWallpaper() override;
161 bool GetUserWallpaperInfo(const AccountId& account_id, 123 bool GetUserWallpaperInfo(const AccountId& account_id,
162 wallpaper::WallpaperInfo* info) const override; 124 wallpaper::WallpaperInfo* info) const override;
163 void OnWallpaperDecoded( 125 void OnWallpaperDecoded(
164 const AccountId& account_id, 126 const AccountId& account_id,
165 wallpaper::WallpaperLayout layout, 127 wallpaper::WallpaperLayout layout,
166 bool update_wallpaper, 128 bool update_wallpaper,
167 wallpaper::MovableOnDestroyCallbackHolder on_finish, 129 wallpaper::MovableOnDestroyCallbackHolder on_finish,
168 std::unique_ptr<user_manager::UserImage> user_image) override; 130 std::unique_ptr<user_manager::UserImage> user_image) override;
169 void StartLoad(const AccountId& account_id, 131 void StartLoad(const AccountId& account_id,
(...skipping 24 matching lines...) Expand all
194 const base::FilePath& path, 156 const base::FilePath& path,
195 const wallpaper::WallpaperLayout layout, 157 const wallpaper::WallpaperLayout layout,
196 wallpaper::MovableOnDestroyCallbackHolder on_finish, 158 wallpaper::MovableOnDestroyCallbackHolder on_finish,
197 std::unique_ptr<user_manager::UserImage>* result_out) override; 159 std::unique_ptr<user_manager::UserImage>* result_out) override;
198 void SetDefaultWallpaperPath( 160 void SetDefaultWallpaperPath(
199 const base::FilePath& customized_default_wallpaper_file_small, 161 const base::FilePath& customized_default_wallpaper_file_small,
200 std::unique_ptr<gfx::ImageSkia> small_wallpaper_image, 162 std::unique_ptr<gfx::ImageSkia> small_wallpaper_image,
201 const base::FilePath& customized_default_wallpaper_file_large, 163 const base::FilePath& customized_default_wallpaper_file_large,
202 std::unique_ptr<gfx::ImageSkia> large_wallpaper_image) override; 164 std::unique_ptr<gfx::ImageSkia> large_wallpaper_image) override;
203 165
166 mojo::BindingSet<ash::mojom::WallpaperManager> bindings_;
167
204 std::unique_ptr<CrosSettings::ObserverSubscription> 168 std::unique_ptr<CrosSettings::ObserverSubscription>
205 show_user_name_on_signin_subscription_; 169 show_user_name_on_signin_subscription_;
206 170
207 // Pointer to last inactive (waiting) entry of 'loading_' list. 171 // Pointer to last inactive (waiting) entry of 'loading_' list.
208 // NULL when there is no inactive request. 172 // NULL when there is no inactive request.
209 PendingWallpaper* pending_inactive_; 173 PendingWallpaper* pending_inactive_;
210 174
211 // Owns PendingWallpaper. 175 // Owns PendingWallpaper.
212 // PendingWallpaper deletes itself from here on load complete. 176 // PendingWallpaper deletes itself from here on load complete.
213 // All pending will be finally deleted on destroy. 177 // All pending will be finally deleted on destroy.
214 typedef std::vector<scoped_refptr<PendingWallpaper> > PendingList; 178 typedef std::vector<scoped_refptr<PendingWallpaper>> PendingList;
215 PendingList loading_; 179 PendingList loading_;
216 180
217 content::NotificationRegistrar registrar_; 181 content::NotificationRegistrar registrar_;
218 182
219 base::WeakPtrFactory<WallpaperManager> weak_factory_; 183 base::WeakPtrFactory<WallpaperManager> weak_factory_;
184
220 DISALLOW_COPY_AND_ASSIGN(WallpaperManager); 185 DISALLOW_COPY_AND_ASSIGN(WallpaperManager);
221 }; 186 };
222 187
223 } // namespace chromeos 188 } // namespace chromeos
224 189
225 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_WALLPAPER_WALLPAPER_MANAGER_H_ 190 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_WALLPAPER_WALLPAPER_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698