OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_THEMES_THEME_SERVICE_H_ | 5 #ifndef CHROME_BROWSER_THEMES_THEME_SERVICE_H_ |
6 #define CHROME_BROWSER_THEMES_THEME_SERVICE_H_ | 6 #define CHROME_BROWSER_THEMES_THEME_SERVICE_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
11 #include <utility> | 11 #include <utility> |
12 | 12 |
13 #include "base/compiler_specific.h" | 13 #include "base/compiler_specific.h" |
14 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
15 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
16 #include "base/threading/non_thread_safe.h" | 16 #include "base/threading/non_thread_safe.h" |
17 #include "chrome/browser/profiles/profile_keyed_service.h" | 17 #include "chrome/browser/profiles/profile_keyed_service.h" |
| 18 #include "content/public/browser/notification_observer.h" |
| 19 #include "content/public/browser/notification_registrar.h" |
18 #include "ui/base/theme_provider.h" | 20 #include "ui/base/theme_provider.h" |
19 | 21 |
20 class BrowserThemePack; | 22 class BrowserThemePack; |
21 class ThemeServiceTest; | 23 class ThemeServiceTest; |
22 class ThemeSyncableService; | 24 class ThemeSyncableService; |
23 class FilePath; | 25 class FilePath; |
24 class Profile; | 26 class Profile; |
25 | 27 |
26 namespace color_utils { | 28 namespace color_utils { |
27 struct HSL; | 29 struct HSL; |
(...skipping 12 matching lines...) Expand all Loading... |
40 } | 42 } |
41 | 43 |
42 #ifdef __OBJC__ | 44 #ifdef __OBJC__ |
43 @class NSString; | 45 @class NSString; |
44 // Sent whenever the browser theme changes. Object => NSValue wrapping the | 46 // Sent whenever the browser theme changes. Object => NSValue wrapping the |
45 // ThemeService that changed. | 47 // ThemeService that changed. |
46 extern "C" NSString* const kBrowserThemeDidChangeNotification; | 48 extern "C" NSString* const kBrowserThemeDidChangeNotification; |
47 #endif // __OBJC__ | 49 #endif // __OBJC__ |
48 | 50 |
49 class ThemeService : public base::NonThreadSafe, | 51 class ThemeService : public base::NonThreadSafe, |
| 52 public content::NotificationObserver, |
50 public ProfileKeyedService, | 53 public ProfileKeyedService, |
51 public ui::ThemeProvider { | 54 public ui::ThemeProvider { |
52 public: | 55 public: |
53 // Public constants used in ThemeService and its subclasses: | 56 // Public constants used in ThemeService and its subclasses: |
54 | 57 |
55 // Strings used in alignment properties. | 58 // Strings used in alignment properties. |
56 static const char* kAlignmentCenter; | 59 static const char* kAlignmentCenter; |
57 static const char* kAlignmentTop; | 60 static const char* kAlignmentTop; |
58 static const char* kAlignmentBottom; | 61 static const char* kAlignmentBottom; |
59 static const char* kAlignmentLeft; | 62 static const char* kAlignmentLeft; |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 virtual void SetNativeTheme(); | 193 virtual void SetNativeTheme(); |
191 | 194 |
192 // Whether we're using the chrome default theme. Virtual so linux can check | 195 // Whether we're using the chrome default theme. Virtual so linux can check |
193 // if we're using the GTK theme. | 196 // if we're using the GTK theme. |
194 virtual bool UsingDefaultTheme() const; | 197 virtual bool UsingDefaultTheme() const; |
195 | 198 |
196 // Whether we're using the native theme (which may or may not be the | 199 // Whether we're using the native theme (which may or may not be the |
197 // same as the default theme). | 200 // same as the default theme). |
198 virtual bool UsingNativeTheme() const; | 201 virtual bool UsingNativeTheme() const; |
199 | 202 |
| 203 // Gets the id of the last installed theme. (The theme may have been further |
| 204 // locally customized.) |
| 205 virtual std::string GetThemeID() const; |
| 206 |
200 // This class needs to keep track of the number of theme infobars so that we | 207 // This class needs to keep track of the number of theme infobars so that we |
201 // clean up unused themes. | 208 // clean up unused themes. |
202 void OnInfobarDisplayed(); | 209 void OnInfobarDisplayed(); |
203 | 210 |
204 // Decrements the number of theme infobars. If the last infobar has been | 211 // Decrements the number of theme infobars. If the last infobar has been |
205 // destroyed, uninstalls all themes that aren't the currently selected. | 212 // destroyed, uninstalls all themes that aren't the currently selected. |
206 void OnInfobarDestroyed(); | 213 void OnInfobarDestroyed(); |
207 | 214 |
208 // Gets the id of the last installed theme for |profile|. (The theme | |
209 // may have been further locally customized.) | |
210 static std::string GetThemeIDForProfile(Profile* profile); | |
211 | |
212 // Save the id of the last theme installed. If the theme service | |
213 // already exists, SetTheme() must be used instead. | |
214 static void SaveThemeIDForProfile(Profile* profile, const std::string& id); | |
215 | |
216 // Uninstall extensions for themes that are no longer in use. | |
217 static void RemoveUnusedThemesForProfile(Profile* profile); | |
218 | |
219 // Gets the id of the last installed theme. (The theme may have been | |
220 // further locally customized.) | |
221 // | |
222 // TODO(akalin): Make everything use GetThemeIDForProfile(). | |
223 virtual std::string GetThemeID() const; | |
224 | |
225 // Convert a bitfield alignment into a string like "top left". Public so that | 215 // Convert a bitfield alignment into a string like "top left". Public so that |
226 // it can be used to generate CSS values. Takes a bitmask of Alignment. | 216 // it can be used to generate CSS values. Takes a bitmask of Alignment. |
227 static std::string AlignmentToString(int alignment); | 217 static std::string AlignmentToString(int alignment); |
228 | 218 |
229 // Parse alignments from something like "top left" into a bitmask of | 219 // Parse alignments from something like "top left" into a bitmask of |
230 // Alignment. | 220 // Alignment. |
231 static int StringToAlignment(const std::string& alignment); | 221 static int StringToAlignment(const std::string& alignment); |
232 | 222 |
233 // Convert a tiling value into a string like "no-repeat". Public | 223 // Convert a tiling value into a string like "no-repeat". Public |
234 // so that it can be used to generate CSS values. Takes a Tiling. | 224 // so that it can be used to generate CSS values. Takes a Tiling. |
235 static std::string TilingToString(int tiling); | 225 static std::string TilingToString(int tiling); |
236 | 226 |
237 // Parse tiling values from something like "no-repeat" into a Tiling value. | 227 // Parse tiling values from something like "no-repeat" into a Tiling value. |
238 static int StringToTiling(const std::string& tiling); | 228 static int StringToTiling(const std::string& tiling); |
239 | 229 |
240 // Returns the default tint for the given tint |id| TINT_* enum value. | 230 // Returns the default tint for the given tint |id| TINT_* enum value. |
241 static color_utils::HSL GetDefaultTint(int id); | 231 static color_utils::HSL GetDefaultTint(int id); |
242 | 232 |
243 // Returns the default color for the given color |id| COLOR_* enum value. | 233 // Returns the default color for the given color |id| COLOR_* enum value. |
244 static SkColor GetDefaultColor(int id); | 234 static SkColor GetDefaultColor(int id); |
245 | 235 |
246 // Returns true and sets |result| to the requested default property, if |id| | 236 // Returns true and sets |result| to the requested default property, if |id| |
247 // is valid. | 237 // is valid. |
248 static bool GetDefaultDisplayProperty(int id, int* result); | 238 static bool GetDefaultDisplayProperty(int id, int* result); |
249 | 239 |
250 // Returns the set of IDR_* resources that should be tinted. | 240 // Returns the set of IDR_* resources that should be tinted. |
251 static const std::set<int>& GetTintableToolbarButtons(); | 241 static const std::set<int>& GetTintableToolbarButtons(); |
252 | 242 |
| 243 // Remove preference values for themes that are no longer in use. |
| 244 void RemoveUnusedThemes(); |
| 245 |
253 // Returns the syncable service for syncing theme. The returned service is | 246 // Returns the syncable service for syncing theme. The returned service is |
254 // owned by |this| object. | 247 // owned by |this| object. |
255 virtual ThemeSyncableService* GetThemeSyncableService() const; | 248 virtual ThemeSyncableService* GetThemeSyncableService() const; |
256 | 249 |
257 // Save the images to be written to disk, mapping file path to id. | 250 // Save the images to be written to disk, mapping file path to id. |
258 typedef std::map<FilePath, int> ImagesDiskCache; | 251 typedef std::map<FilePath, int> ImagesDiskCache; |
259 | 252 |
260 protected: | 253 protected: |
261 // Get the specified tint - |id| is one of the TINT_* enum values. | 254 // Get the specified tint - |id| is one of the TINT_* enum values. |
262 color_utils::HSL GetTint(int id) const; | 255 color_utils::HSL GetTint(int id) const; |
(...skipping 11 matching lines...) Expand all Loading... |
274 // Let all the browser views know that themes have changed in a platform way. | 267 // Let all the browser views know that themes have changed in a platform way. |
275 virtual void NotifyPlatformThemeChanged(); | 268 virtual void NotifyPlatformThemeChanged(); |
276 #endif // OS_MACOSX | 269 #endif // OS_MACOSX |
277 | 270 |
278 // Clears the platform-specific caches. Do not call directly; it's called | 271 // Clears the platform-specific caches. Do not call directly; it's called |
279 // from ClearCaches(). | 272 // from ClearCaches(). |
280 virtual void FreePlatformCaches(); | 273 virtual void FreePlatformCaches(); |
281 | 274 |
282 Profile* profile() { return profile_; } | 275 Profile* profile() { return profile_; } |
283 | 276 |
| 277 // content::NotificationObserver: |
| 278 virtual void Observe(int type, |
| 279 const content::NotificationSource& source, |
| 280 const content::NotificationDetails& details) OVERRIDE; |
| 281 |
284 private: | 282 private: |
285 friend class ThemeServiceTest; | 283 friend class ThemeServiceTest; |
286 | 284 |
287 // Saves the filename of the cached theme pack. | 285 // Saves the filename of the cached theme pack. |
288 void SavePackName(const FilePath& pack_path); | 286 void SavePackName(const FilePath& pack_path); |
289 | 287 |
| 288 // Save the id of the last theme installed. |
| 289 void SaveThemeID(const std::string& id); |
| 290 |
290 // Implementation of SetTheme() (and the fallback from LoadThemePrefs() in | 291 // Implementation of SetTheme() (and the fallback from LoadThemePrefs() in |
291 // case we don't have a theme pack). | 292 // case we don't have a theme pack). |
292 void BuildFromExtension(const extensions::Extension* extension); | 293 void BuildFromExtension(const extensions::Extension* extension); |
293 | 294 |
294 #if defined(TOOLKIT_GTK) | 295 #if defined(TOOLKIT_GTK) |
295 // Loads an image and flips it horizontally if |rtl_enabled| is true. | 296 // Loads an image and flips it horizontally if |rtl_enabled| is true. |
296 GdkPixbuf* GetPixbufImpl(int id, bool rtl_enabled) const; | 297 GdkPixbuf* GetPixbufImpl(int id, bool rtl_enabled) const; |
297 #endif | 298 #endif |
298 | 299 |
299 #if defined(TOOLKIT_GTK) | 300 #if defined(TOOLKIT_GTK) |
(...skipping 12 matching lines...) Expand all Loading... |
312 #endif | 313 #endif |
313 | 314 |
314 ui::ResourceBundle& rb_; | 315 ui::ResourceBundle& rb_; |
315 Profile* profile_; | 316 Profile* profile_; |
316 | 317 |
317 scoped_refptr<BrowserThemePack> theme_pack_; | 318 scoped_refptr<BrowserThemePack> theme_pack_; |
318 | 319 |
319 // The number of infobars currently displayed. | 320 // The number of infobars currently displayed. |
320 int number_of_infobars_; | 321 int number_of_infobars_; |
321 | 322 |
| 323 content::NotificationRegistrar registrar_; |
| 324 |
322 scoped_ptr<ThemeSyncableService> theme_syncable_service_; | 325 scoped_ptr<ThemeSyncableService> theme_syncable_service_; |
323 | 326 |
324 DISALLOW_COPY_AND_ASSIGN(ThemeService); | 327 DISALLOW_COPY_AND_ASSIGN(ThemeService); |
325 }; | 328 }; |
326 | 329 |
327 #endif // CHROME_BROWSER_THEMES_THEME_SERVICE_H_ | 330 #endif // CHROME_BROWSER_THEMES_THEME_SERVICE_H_ |
OLD | NEW |