Index: chrome/browser/themes/theme_service.cc |
diff --git a/chrome/browser/themes/theme_service.cc b/chrome/browser/themes/theme_service.cc |
index fc5c4304a5e31b23549be5169539dc9a01e359e7..fdb02441bd95d939b16997e1ef599ae63302035f 100644 |
--- a/chrome/browser/themes/theme_service.cc |
+++ b/chrome/browser/themes/theme_service.cc |
@@ -13,6 +13,8 @@ |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/extension_system.h" |
+#include "chrome/browser/managed_mode/managed_user_service.h" |
+#include "chrome/browser/managed_mode/managed_user_service_factory.h" |
#include "chrome/browser/managed_mode/managed_user_theme.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/themes/browser_theme_pack.h" |
@@ -77,7 +79,8 @@ ThemeService::ThemeService() |
: ready_(false), |
rb_(ResourceBundle::GetSharedInstance()), |
profile_(NULL), |
- number_of_infobars_(0) { |
+ number_of_infobars_(0), |
+ weak_ptr_factory_(this) { |
} |
ThemeService::~ThemeService() { |
@@ -88,6 +91,9 @@ void ThemeService::Init(Profile* profile) { |
DCHECK(CalledOnValidThread()); |
profile_ = profile; |
+ ManagedUserServiceFactory::GetForProfile(profile)->AddInitCallback(base::Bind( |
+ &ThemeService::OnManagedUserInitialized, weak_ptr_factory_.GetWeakPtr())); |
+ |
LoadThemePrefs(); |
if (!ready_) { |
@@ -460,6 +466,20 @@ void ThemeService::SetManagedUserTheme() { |
SetCustomDefaultTheme(new ManagedUserTheme); |
} |
+void ThemeService::OnManagedUserInitialized() { |
+ // Currently when creating a supervised user, the ThemeService is initialized |
+ // before the boolean flag indicating the profile belongs to a supervised |
+ // user gets set. In order to get the custom managed user theme, we get a |
+ // callback when ManagedUserService is initialized, which happens some time |
+ // after the boolean flag has been set in |
+ // ProfileManager::InitProfileUserPrefs() and after the |
+ // NOTIFICATION_EXTENSIONS_READY notification is sent. |
+ if (theme_supplier_.get() || !IsManagedUser()) |
+ return; |
+ |
+ SetManagedUserTheme(); |
+} |
+ |
void ThemeService::OnInfobarDisplayed() { |
number_of_infobars_++; |
} |