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

Unified Diff: chrome/browser/themes/theme_service.cc

Issue 19471005: Add custom default theme support and create a managed user default theme. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Don't call NotifyThemeChanged if not ready. Created 7 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/themes/theme_service.h ('k') | chrome/browser/themes/theme_service_aurax11.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/themes/theme_service.cc
diff --git a/chrome/browser/themes/theme_service.cc b/chrome/browser/themes/theme_service.cc
index d7fe33bd290520c6da71f222a288f2fe1bd3adbf..22e9e281713b5cdb01f4d4f8e3e4aab339b3db56 100644
--- a/chrome/browser/themes/theme_service.cc
+++ b/chrome/browser/themes/theme_service.cc
@@ -15,6 +15,7 @@
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/themes/browser_theme_pack.h"
+#include "chrome/browser/themes/custom_theme_supplier.h"
#include "chrome/browser/themes/theme_properties.h"
#include "chrome/browser/themes/theme_syncable_service.h"
#include "chrome/common/chrome_constants.h"
@@ -34,6 +35,7 @@
#if defined(ENABLE_MANAGED_USERS)
#include "chrome/browser/managed_mode/managed_user_service.h"
+#include "chrome/browser/managed_mode/managed_user_theme.h"
#endif
using content::BrowserThread;
@@ -104,20 +106,9 @@ void ThemeService::Init(Profile* profile) {
gfx::Image ThemeService::GetImageNamed(int id) const {
DCHECK(CalledOnValidThread());
- // For a managed user, use the special frame instead of the default one.
- // TODO(akuegel): Remove this once we have the default managed user theme.
- if (IsManagedUser()) {
- if (id == IDR_THEME_FRAME)
- id = IDR_MANAGED_USER_THEME_FRAME;
- else if (id == IDR_THEME_FRAME_INACTIVE)
- id = IDR_MANAGED_USER_THEME_FRAME_INACTIVE;
- else if (id == IDR_THEME_TAB_BACKGROUND || id == IDR_THEME_TAB_BACKGROUND_V)
- id = IDR_MANAGED_USER_THEME_TAB_BACKGROUND;
- }
-
gfx::Image image;
- if (theme_pack_.get())
- image = theme_pack_->GetImageNamed(id);
+ if (theme_supplier_.get())
+ image = theme_supplier_->GetImageNamed(id);
if (image.IsEmpty())
image = rb_.GetNativeImageNamed(id);
@@ -136,17 +127,8 @@ gfx::ImageSkia* ThemeService::GetImageSkiaNamed(int id) const {
SkColor ThemeService::GetColor(int id) const {
DCHECK(CalledOnValidThread());
-
- // TODO(akuegel): Remove this once we have the default managed user theme.
- if (IsManagedUser()) {
- if (id == Properties::COLOR_FRAME)
- id = Properties::COLOR_FRAME_MANAGED_USER;
- else if (id == Properties::COLOR_FRAME_INACTIVE)
- id = Properties::COLOR_FRAME_MANAGED_USER_INACTIVE;
- }
-
SkColor color;
- if (theme_pack_.get() && theme_pack_->GetColor(id, &color))
+ if (theme_supplier_.get() && theme_supplier_->GetColor(id, &color))
return color;
// For backward compat with older themes, some newer colors are generated from
@@ -163,22 +145,20 @@ SkColor ThemeService::GetColor(int id) const {
case Properties::COLOR_NTP_TEXT_LIGHT:
return IncreaseLightness(GetColor(Properties::COLOR_NTP_TEXT), 0.40);
case Properties::COLOR_MANAGED_USER_LABEL:
- // TODO(akuegel): Use GetReadableColor() once we want to support other
- // themes as well.
- return SkColorSetRGB(231, 245, 255);
+ return color_utils::GetReadableColor(
+ SK_ColorWHITE,
+ GetColor(Properties::COLOR_MANAGED_USER_LABEL_BACKGROUND));
case Properties::COLOR_MANAGED_USER_LABEL_BACKGROUND:
- // TODO(akuegel): Replace this constant by a color calculated from the
- // frame color once the default managed user theme is finished and we
- // allow managed users to install other themes.
- return SkColorSetRGB(108, 167, 210);
+ return color_utils::BlendTowardOppositeLuminance(
+ GetColor(Properties::COLOR_FRAME), 0x80);
}
return Properties::GetDefaultColor(id);
}
bool ThemeService::GetDisplayProperty(int id, int* result) const {
- if (theme_pack_.get())
- return theme_pack_->GetDisplayProperty(id, result);
+ if (theme_supplier_.get())
+ return theme_supplier_->GetDisplayProperty(id, result);
return Properties::GetDefaultDisplayProperty(id, result);
}
@@ -197,13 +177,8 @@ bool ThemeService::HasCustomImage(int id) const {
if (!Properties::IsThemeableImage(id))
return false;
- if (theme_pack_.get())
- return theme_pack_->HasCustomImage(id);
-
- if (IsManagedUser() &&
- (id == IDR_THEME_FRAME || id == IDR_THEME_FRAME_INACTIVE ||
- id == IDR_THEME_TAB_BACKGROUND || id == IDR_THEME_TAB_BACKGROUND_V))
- return true;
+ if (theme_supplier_.get())
+ return theme_supplier_->HasCustomImage(id);
return false;
}
@@ -218,8 +193,8 @@ base::RefCountedMemory* ThemeService::GetRawData(
id = IDR_PRODUCT_LOGO_WHITE;
base::RefCountedMemory* data = NULL;
- if (theme_pack_.get())
- data = theme_pack_->GetRawData(id, scale_factor);
+ if (theme_supplier_.get())
+ data = theme_supplier_->GetRawData(id, scale_factor);
if (!data)
data = rb_.LoadDataResourceBytesForScale(id, ui::SCALE_FACTOR_100P);
@@ -261,9 +236,24 @@ void ThemeService::SetTheme(const Extension* extension) {
content::RecordAction(UserMetricsAction("Themes_Installed"));
}
+void ThemeService::SetCustomDefaultTheme(
+ scoped_refptr<CustomThemeSupplier> theme_supplier) {
+ ClearAllThemeData();
+ SwapThemeSupplier(theme_supplier);
+ NotifyThemeChanged();
+}
+
+bool ThemeService::ShouldInitWithNativeTheme() const {
+ return false;
+}
+
void ThemeService::RemoveUnusedThemes() {
- if (!profile_)
+ // We do not want to garbage collect themes on startup (|ready_| is false).
+ // Themes will get garbage collected once
+ // ExtensionService::GarbageCollectExtensions() runs.
+ if (!profile_ || !ready_)
return;
+
ExtensionService* service = profile_->GetExtensionService();
if (!service)
return;
@@ -281,9 +271,16 @@ void ThemeService::RemoveUnusedThemes() {
}
void ThemeService::UseDefaultTheme() {
- ClearAllThemeData();
- NotifyThemeChanged();
- content::RecordAction(UserMetricsAction("Themes_Reset"));
+ if (ready_)
+ content::RecordAction(UserMetricsAction("Themes_Reset"));
+ if (IsManagedUser()) {
+ SetManagedUserTheme();
+ return;
+ }
+ if (ready_) {
+ ClearAllThemeData();
+ NotifyThemeChanged();
+ }
}
void ThemeService::SetNativeTheme() {
@@ -293,7 +290,7 @@ void ThemeService::SetNativeTheme() {
bool ThemeService::UsingDefaultTheme() const {
std::string id = GetThemeID();
return id == ThemeService::kDefaultThemeID ||
- id == kDefaultThemeGalleryID;
+ (id == kDefaultThemeGalleryID && !IsManagedUser());
}
bool ThemeService::UsingNativeTheme() const {
@@ -308,16 +305,17 @@ color_utils::HSL ThemeService::GetTint(int id) const {
DCHECK(CalledOnValidThread());
color_utils::HSL hsl;
- if (theme_pack_.get() && theme_pack_->GetTint(id, &hsl))
+ if (theme_supplier_.get() && theme_supplier_->GetTint(id, &hsl))
return hsl;
return ThemeProperties::GetDefaultTint(id);
}
void ThemeService::ClearAllThemeData() {
+ SwapThemeSupplier(NULL);
+
// Clear our image cache.
FreePlatformCaches();
- theme_pack_ = NULL;
profile_->GetPrefs()->ClearPref(prefs::kCurrentThemePackFilename);
SaveThemeID(kDefaultThemeID);
@@ -330,6 +328,13 @@ void ThemeService::LoadThemePrefs() {
std::string current_id = GetThemeID();
if (current_id == kDefaultThemeID) {
+ // Managed users have a different default theme.
+ if (IsManagedUser())
+ SetManagedUserTheme();
+ else if (ShouldInitWithNativeTheme())
+ SetNativeTheme();
+ else
+ UseDefaultTheme();
set_ready();
return;
}
@@ -339,8 +344,8 @@ void ThemeService::LoadThemePrefs() {
// If we don't have a file pack, we're updating from an old version.
base::FilePath path = prefs->GetFilePath(prefs::kCurrentThemePackFilename);
if (path != base::FilePath()) {
- theme_pack_ = BrowserThemePack::BuildFromDataPack(path, current_id);
- loaded_pack = theme_pack_.get() != NULL;
+ SwapThemeSupplier(BrowserThemePack::BuildFromDataPack(path, current_id));
+ loaded_pack = theme_supplier_.get() != NULL;
}
if (loaded_pack) {
@@ -359,6 +364,9 @@ void ThemeService::LoadThemePrefs() {
}
void ThemeService::NotifyThemeChanged() {
+ if (!ready_)
+ return;
+
DVLOG(1) << "Sending BROWSER_THEME_CHANGED";
// Redraw!
content::NotificationService* service =
@@ -382,6 +390,15 @@ void ThemeService::FreePlatformCaches() {
}
#endif
+void ThemeService::SwapThemeSupplier(
+ scoped_refptr<CustomThemeSupplier> theme_supplier) {
+ if (theme_supplier_.get())
+ theme_supplier_->StopUsingTheme();
+ theme_supplier_ = theme_supplier;
+ if (theme_supplier_.get())
+ theme_supplier_->StartUsingTheme();
+}
+
void ThemeService::MigrateTheme() {
ExtensionService* service =
extensions::ExtensionSystem::Get(profile_)->extension_service();
@@ -430,7 +447,7 @@ void ThemeService::BuildFromExtension(const Extension* extension) {
base::Bind(&WritePackToDiskCallback, pack, pack_path));
SavePackName(pack_path);
- theme_pack_ = pack;
+ SwapThemeSupplier(pack);
}
bool ThemeService::IsManagedUser() const {
@@ -440,6 +457,12 @@ bool ThemeService::IsManagedUser() const {
return false;
}
+void ThemeService::SetManagedUserTheme() {
+#if defined(ENABLE_MANAGED_USERS)
+ SetCustomDefaultTheme(new ManagedUserTheme);
+#endif
+}
+
void ThemeService::OnInfobarDisplayed() {
number_of_infobars_++;
}
« no previous file with comments | « chrome/browser/themes/theme_service.h ('k') | chrome/browser/themes/theme_service_aurax11.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698