1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CHROME_BROWSER_THEMES_THEME_SERVICE_H_ 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CHROME_BROWSER_THEMES_THEME_SERVICE_H_ 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <map> 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <set> 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 143f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/threading/non_thread_safe.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/profiles/profile_keyed_service.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/theme_provider.h" 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass BrowserThemePack; 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ThemeServiceTest; 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass Extension; 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass FilePath; 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass Profile; 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace color_utils { 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstruct HSL; 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace ui { 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass ResourceBundle; 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenusing ui::ResourceBundle; 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifdef __OBJC__ 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen@class NSString; 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Sent whenever the browser theme changes. Object => NSValue wrapping the 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// ThemeService that changed. 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenextern "C" NSString* const kBrowserThemeDidChangeNotification; 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // __OBJC__ 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ThemeService : public base::NonThreadSafe, 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public NotificationObserver, 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public ProfileKeyedService, 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public ui::ThemeProvider { 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Public constants used in ThemeService and its subclasses: 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Strings used in alignment properties. 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const char* kAlignmentTop; 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const char* kAlignmentBottom; 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const char* kAlignmentLeft; 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const char* kAlignmentRight; 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Strings used in tiling properties. 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const char* kTilingNoRepeat; 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const char* kTilingRepeatX; 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const char* kTilingRepeatY; 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const char* kTilingRepeat; 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const char* kDefaultThemeID; 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns true if the image is themeable. Safe to call on any thread. 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static bool IsThemeableImage(int resource_id); 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ThemeService(); 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~ThemeService(); 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen enum { 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_FRAME, 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_FRAME_INACTIVE, 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_FRAME_INCOGNITO, 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_FRAME_INCOGNITO_INACTIVE, 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_TOOLBAR, 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_TAB_TEXT, 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_BACKGROUND_TAB_TEXT, 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_BOOKMARK_TEXT, 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_BACKGROUND, 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_TEXT, 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_LINK, 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_LINK_UNDERLINE, 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_HEADER, 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_SECTION, 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_SECTION_TEXT, 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_SECTION_LINK, 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_SECTION_LINK_UNDERLINE, 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_CONTROL_BACKGROUND, 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_BUTTON_BACKGROUND, 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // These colors don't have constant default values. They are derived from 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // the runtime value of other colors. 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_SECTION_HEADER_TEXT, 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_SECTION_HEADER_TEXT_HOVER, 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_SECTION_HEADER_RULE, 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_NTP_SECTION_HEADER_RULE_LIGHT, 96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick COLOR_NTP_TEXT_LIGHT, 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TINT_BUTTONS, 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TINT_FRAME, 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TINT_FRAME_INACTIVE, 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TINT_FRAME_INCOGNITO, 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TINT_FRAME_INCOGNITO_INACTIVE, 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TINT_BACKGROUND_TAB, 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NTP_BACKGROUND_ALIGNMENT, 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NTP_BACKGROUND_TILING, 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NTP_LOGO_ALTERNATE 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(OS_MACOSX) 108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen , 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_TOOLBAR_BEZEL = 1000, 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_TOOLBAR_STROKE, 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_TOOLBAR_STROKE_INACTIVE, 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_TOOLBAR_BUTTON_STROKE, 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE, 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GRADIENT_FRAME_INCOGNITO, 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GRADIENT_FRAME_INCOGNITO_INACTIVE, 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GRADIENT_TOOLBAR, 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GRADIENT_TOOLBAR_INACTIVE, 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GRADIENT_TOOLBAR_BUTTON, 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GRADIENT_TOOLBAR_BUTTON_INACTIVE, 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GRADIENT_TOOLBAR_BUTTON_PRESSED, 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GRADIENT_TOOLBAR_BUTTON_PRESSED_INACTIVE 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // OS_MACOSX 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // A bitfield mask for alignments. 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen typedef enum { 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ALIGN_CENTER = 0x0, 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ALIGN_LEFT = 0x1, 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ALIGN_TOP = 0x2, 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ALIGN_RIGHT = 0x4, 131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ALIGN_BOTTOM = 0x8, 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } AlignmentMasks; 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Background tiling choices. 135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen typedef enum { 136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen NO_REPEAT = 0, 137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen REPEAT_X = 1, 138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen REPEAT_Y = 2, 139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen REPEAT = 3 140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } Tiling; 141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // ui::ThemeProvider implementation. 143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void Init(Profile* profile); 144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual SkBitmap* GetBitmapNamed(int id) const; 145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual SkColor GetColor(int id) const; 146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool GetDisplayProperty(int id, int* result) const; 147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool ShouldUseNativeFrame() const; 148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool HasCustomImage(int id) const; 149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual RefCountedMemory* GetRawData(int id) const; 150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(TOOLKIT_USES_GTK) 151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // GdkPixbufs returned by GetPixbufNamed and GetRTLEnabledPixbufNamed are 152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // shared instances owned by the theme provider and should not be freed. 153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual GdkPixbuf* GetPixbufNamed(int id) const; 154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual GdkPixbuf* GetRTLEnabledPixbufNamed(int id) const; 155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#elif defined(OS_MACOSX) 156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual NSImage* GetNSImageNamed(int id, bool allow_default) const; 157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual NSColor* GetNSImageColorNamed(int id, bool allow_default) const; 158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual NSColor* GetNSColor(int id, bool allow_default) const; 159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual NSColor* GetNSColorTint(int id, bool allow_default) const; 160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual NSGradient* GetNSGradient(int id) const; 161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Set the current theme to the theme defined in |extension|. 164513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void SetTheme(const Extension* extension); 165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Reset the theme to default. 167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void UseDefaultTheme(); 168bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 169bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Set the current theme to the native theme. On some platforms, the native 170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // theme is the default theme. 17121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void SetNativeTheme(); 172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 173bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Whether we're using the chrome default theme. Virtual so linux can check 174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // if we're using the GTK theme. 175bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool UsingDefaultTheme(); 176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Gets the id of the last installed theme. (The theme may have been further 178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // locally customized.) 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual std::string GetThemeID() const; 180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This class needs to keep track of the number of theme infobars so that we 182bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // clean up unused themes. 183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void OnInfobarDisplayed(); 184bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Decrements the number of theme infobars. If the last infobar has been 186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // destroyed, uninstalls all themes that aren't the currently selected. 187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void OnInfobarDestroyed(); 188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Convert a bitfield alignment into a string like "top left". Public so that 190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // it can be used to generate CSS values. Takes a bitfield of AlignmentMasks. 191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static std::string AlignmentToString(int alignment); 192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 193bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Parse alignments from something like "top left" into a bitfield of 194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // AlignmentMasks 195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static int StringToAlignment(const std::string& alignment); 196bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 197bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Convert a tiling value into a string like "no-repeat". Public 198bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // so that it can be used to generate CSS values. Takes a Tiling. 199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static std::string TilingToString(int tiling); 200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Parse tiling values from something like "no-repeat" into a Tiling value. 202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static int StringToTiling(const std::string& tiling); 203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 204bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns the default tint for the given tint |id| TINT_* enum value. 205bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static color_utils::HSL GetDefaultTint(int id); 206bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 207bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns the default color for the given color |id| COLOR_* enum value. 208bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static SkColor GetDefaultColor(int id); 209bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 210bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns true and sets |result| to the requested default property, if |id| 211bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // is valid. 212bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static bool GetDefaultDisplayProperty(int id, int* result); 213bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 214bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns the set of IDR_* resources that should be tinted. 215bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen static const std::set<int>& GetTintableToolbarButtons(); 216bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Remove preference values for themes that are no longer in use. 2184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void RemoveUnusedThemes(); 2194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 220bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Save the images to be written to disk, mapping file path to id. 221bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen typedef std::map<FilePath, int> ImagesDiskCache; 222bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 223bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 224bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Get the specified tint - |id| is one of the TINT_* enum values. 225bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen color_utils::HSL GetTint(int id) const; 226bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 227bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Clears all the override fields and saves the dictionary. 228bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void ClearAllThemeData(); 229bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 230bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Load theme data from preferences. 231bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void LoadThemePrefs(); 232bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 233bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Let all the browser views know that themes have changed. 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void NotifyThemeChanged(); 235bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 236bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(OS_MACOSX) 237bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Let all the browser views know that themes have changed in a platform way. 238bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void NotifyPlatformThemeChanged(); 239bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // OS_MACOSX 240bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 241bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Clears the platform-specific caches. Do not call directly; it's called 242bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // from ClearCaches(). 243bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void FreePlatformCaches(); 244bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 245bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Profile* profile() { return profile_; } 246bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // NotificationObserver: 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Observe(NotificationType type, 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const NotificationSource& source, 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const NotificationDetails& details); 251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 252bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend class ThemeServiceTest; 254bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 255bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Saves the filename of the cached theme pack. 256bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void SavePackName(const FilePath& pack_path); 257bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 258bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Save the id of the last theme installed. 259bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void SaveThemeID(const std::string& id); 260bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 261bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Implementation of SetTheme() (and the fallback from LoadThemePrefs() in 262bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // case we don't have a theme pack). 263513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void BuildFromExtension(const Extension* extension); 264bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 265bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(TOOLKIT_USES_GTK) 266bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Loads an image and flips it horizontally if |rtl_enabled| is true. 267bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen GdkPixbuf* GetPixbufImpl(int id, bool rtl_enabled) const; 268bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 269bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 270bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(TOOLKIT_USES_GTK) 271bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen typedef std::map<int, GdkPixbuf*> GdkPixbufMap; 272bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mutable GdkPixbufMap gdk_pixbufs_; 273bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#elif defined(OS_MACOSX) 274bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen typedef std::map<int, NSImage*> NSImageMap; 275bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mutable NSImageMap nsimage_cache_; 276bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 277bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The bool member of the pair is whether the color is a default color. 278bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen typedef std::map<int, std::pair<NSColor*, bool> > NSColorMap; 279bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mutable NSColorMap nscolor_cache_; 280bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 281bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen typedef std::map<int, NSGradient*> NSGradientMap; 282bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen mutable NSGradientMap nsgradient_cache_; 283bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 284bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 285bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ResourceBundle& rb_; 286bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen Profile* profile_; 287bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 288bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_refptr<BrowserThemePack> theme_pack_; 289bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 290bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The number of infobars currently displayed. 291bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen int number_of_infobars_; 292bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 293ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NotificationRegistrar registrar_; 294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(ThemeService); 296bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 297bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 298ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // CHROME_BROWSER_THEMES_THEME_SERVICE_H_ 299