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

Side by Side Diff: chrome/browser/themes/theme_service.cc

Issue 566573004: Remove deprecated extension notification from themeservice. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix the review comments Created 6 years, 3 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
« no previous file with comments | « chrome/browser/themes/theme_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "chrome/browser/themes/theme_service.h" 5 #include "chrome/browser/themes/theme_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/ref_counted_memory.h" 8 #include "base/memory/ref_counted_memory.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 ThemeService::ThemeService() 83 ThemeService::ThemeService()
84 : ready_(false), 84 : ready_(false),
85 rb_(ResourceBundle::GetSharedInstance()), 85 rb_(ResourceBundle::GetSharedInstance()),
86 profile_(NULL), 86 profile_(NULL),
87 installed_pending_load_id_(kDefaultThemeID), 87 installed_pending_load_id_(kDefaultThemeID),
88 number_of_infobars_(0), 88 number_of_infobars_(0),
89 weak_ptr_factory_(this) { 89 weak_ptr_factory_(this) {
90 } 90 }
91 91
92 ThemeService::~ThemeService() { 92 ThemeService::~ThemeService() {
93 extension_registry_->RemoveObserver(this);
Bernhard Bauer 2014/09/24 13:06:41 There is no guarantee that |extension_registry_| w
93 FreePlatformCaches(); 94 FreePlatformCaches();
94 } 95 }
95 96
96 void ThemeService::Init(Profile* profile) { 97 void ThemeService::Init(Profile* profile) {
97 DCHECK(CalledOnValidThread()); 98 DCHECK(CalledOnValidThread());
98 profile_ = profile; 99 profile_ = profile;
99 100
100 LoadThemePrefs(); 101 LoadThemePrefs();
101 102
103 extension_registry_ = extensions::ExtensionRegistry::Get(profile_);
104 extension_registry_->AddObserver(this);
105
102 registrar_.Add(this, 106 registrar_.Add(this,
103 extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED, 107 extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED,
104 content::Source<Profile>(profile_)); 108 content::Source<Profile>(profile_));
105 109
106 theme_syncable_service_.reset(new ThemeSyncableService(profile_, this)); 110 theme_syncable_service_.reset(new ThemeSyncableService(profile_, this));
107 } 111 }
108 112
109 gfx::Image ThemeService::GetImageNamed(int id) const { 113 gfx::Image ThemeService::GetImageNamed(int id) const {
110 DCHECK(CalledOnValidThread()); 114 DCHECK(CalledOnValidThread());
111 115
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 const content::NotificationSource& source, 249 const content::NotificationSource& source,
246 const content::NotificationDetails& details) { 250 const content::NotificationDetails& details) {
247 using content::Details; 251 using content::Details;
248 switch (type) { 252 switch (type) {
249 case extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED: 253 case extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED:
250 registrar_.Remove(this, 254 registrar_.Remove(this,
251 extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED, 255 extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED,
252 content::Source<Profile>(profile_)); 256 content::Source<Profile>(profile_));
253 OnExtensionServiceReady(); 257 OnExtensionServiceReady();
254 break; 258 break;
255 case extensions::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED: {
256 // The theme may be initially disabled. Wait till it is loaded (if ever).
257 Details<const extensions::InstalledExtensionInfo> installed_details(
258 details);
259 if (installed_details->extension->is_theme())
260 installed_pending_load_id_ = installed_details->extension->id();
261 break;
262 }
263 case extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
264 const Extension* extension = Details<const Extension>(details).ptr();
265 if (extension->is_theme() &&
266 installed_pending_load_id_ != kDefaultThemeID &&
267 installed_pending_load_id_ == extension->id()) {
268 SetTheme(extension);
269 }
270 installed_pending_load_id_ = kDefaultThemeID;
271 break;
272 }
273 case extensions::NOTIFICATION_EXTENSION_ENABLED: { 259 case extensions::NOTIFICATION_EXTENSION_ENABLED: {
274 const Extension* extension = Details<const Extension>(details).ptr(); 260 const Extension* extension = Details<const Extension>(details).ptr();
275 if (extension->is_theme()) 261 if (extension->is_theme())
276 SetTheme(extension); 262 SetTheme(extension);
277 break; 263 break;
278 } 264 }
279 case extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
280 Details<const UnloadedExtensionInfo> unloaded_details(details);
281 if (unloaded_details->reason != UnloadedExtensionInfo::REASON_UPDATE &&
282 unloaded_details->extension->is_theme() &&
283 unloaded_details->extension->id() == GetThemeID()) {
284 UseDefaultTheme();
285 }
286 break;
287 }
288 } 265 }
289 } 266 }
290 267
268 void ThemeService::OnExtensionLoaded(content::BrowserContext* browser_context,
269 const extensions::Extension* extension) {
270 if (extension->is_theme() &&
271 installed_pending_load_id_ != kDefaultThemeID &&
272 installed_pending_load_id_ == extension->id()) {
273 SetTheme(extension);
274 }
275 installed_pending_load_id_ = kDefaultThemeID;
276 }
277
278 void ThemeService::OnExtensionUnloaded(
279 content::BrowserContext* browser_context,
280 const extensions::Extension* extension,
281 extensions::UnloadedExtensionInfo::Reason reason) {
282 if (reason != UnloadedExtensionInfo::REASON_UPDATE && extension->is_theme() &&
283 extension->id() == GetThemeID()) {
284 UseDefaultTheme();
285 }
286 }
287
288 void ThemeService::OnExtensionWillBeInstalled(
289 content::BrowserContext* browser_context,
290 const extensions::Extension* extension,
291 bool is_update,
292 bool from_ephemeral,
293 const std::string& old_name) {
294 // The theme may be initially disabled. Wait till it is loaded (if ever).
295 if (extension->is_theme())
296 installed_pending_load_id_ = extension->id();
297 }
298
291 void ThemeService::SetTheme(const Extension* extension) { 299 void ThemeService::SetTheme(const Extension* extension) {
292 DCHECK(extension->is_theme()); 300 DCHECK(extension->is_theme());
293 ExtensionService* service = 301 ExtensionService* service =
294 extensions::ExtensionSystem::Get(profile_)->extension_service(); 302 extensions::ExtensionSystem::Get(profile_)->extension_service();
295 if (!service->IsExtensionEnabled(extension->id())) { 303 if (!service->IsExtensionEnabled(extension->id())) {
296 // |extension| is disabled when reverting to the previous theme via an 304 // |extension| is disabled when reverting to the previous theme via an
297 // infobar. 305 // infobar.
298 service->EnableExtension(extension->id()); 306 service->EnableExtension(extension->id());
299 // Enabling the extension will call back to SetTheme(). 307 // Enabling the extension will call back to SetTheme().
300 return; 308 return;
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 // If the ThemeService is not ready yet, the custom theme data pack needs to 506 // If the ThemeService is not ready yet, the custom theme data pack needs to
499 // be recreated from the extension. 507 // be recreated from the extension.
500 MigrateTheme(); 508 MigrateTheme();
501 set_ready(); 509 set_ready();
502 510
503 // Send notification in case anyone requested data and cached it when the 511 // Send notification in case anyone requested data and cached it when the
504 // theme service was not ready yet. 512 // theme service was not ready yet.
505 NotifyThemeChanged(); 513 NotifyThemeChanged();
506 } 514 }
507 515
508 registrar_.Add( 516 extension_registry_->AddObserver(this);
509 this,
510 extensions::NOTIFICATION_EXTENSION_WILL_BE_INSTALLED_DEPRECATED,
511 content::Source<Profile>(profile_));
512 registrar_.Add(this,
513 extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
514 content::Source<Profile>(profile_));
515 registrar_.Add(this, 517 registrar_.Add(this,
516 extensions::NOTIFICATION_EXTENSION_ENABLED, 518 extensions::NOTIFICATION_EXTENSION_ENABLED,
517 content::Source<Profile>(profile_)); 519 content::Source<Profile>(profile_));
518 registrar_.Add(this,
519 extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
520 content::Source<Profile>(profile_));
521 520
522 base::MessageLoop::current()->PostDelayedTask(FROM_HERE, 521 base::MessageLoop::current()->PostDelayedTask(FROM_HERE,
523 base::Bind(&ThemeService::RemoveUnusedThemes, 522 base::Bind(&ThemeService::RemoveUnusedThemes,
524 weak_ptr_factory_.GetWeakPtr(), 523 weak_ptr_factory_.GetWeakPtr(),
525 false), 524 false),
526 base::TimeDelta::FromSeconds(kRemoveUnusedThemesStartupDelay)); 525 base::TimeDelta::FromSeconds(kRemoveUnusedThemesStartupDelay));
527 } 526 }
528 527
529 void ThemeService::MigrateTheme() { 528 void ThemeService::MigrateTheme() {
530 // TODO(erg): We need to pop up a dialog informing the user that their 529 // TODO(erg): We need to pop up a dialog informing the user that their
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 void ThemeService::OnInfobarDestroyed() { 602 void ThemeService::OnInfobarDestroyed() {
604 number_of_infobars_--; 603 number_of_infobars_--;
605 604
606 if (number_of_infobars_ == 0) 605 if (number_of_infobars_ == 0)
607 RemoveUnusedThemes(false); 606 RemoveUnusedThemes(false);
608 } 607 }
609 608
610 ThemeSyncableService* ThemeService::GetThemeSyncableService() const { 609 ThemeSyncableService* ThemeService::GetThemeSyncableService() const {
611 return theme_syncable_service_.get(); 610 return theme_syncable_service_.get();
612 } 611 }
OLDNEW
« no previous file with comments | « chrome/browser/themes/theme_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698