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

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 unittest error and review comments Created 6 years, 2 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
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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 } 79 }
80 80
81 } // namespace 81 } // namespace
82 82
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 extension_registry_(NULL),
89 weak_ptr_factory_(this) { 90 weak_ptr_factory_(this) {
90 } 91 }
91 92
92 ThemeService::~ThemeService() { 93 ThemeService::~ThemeService() {
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
102 registrar_.Add(this, 105 registrar_.Add(this,
103 extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED, 106 extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED,
104 content::Source<Profile>(profile_)); 107 content::Source<Profile>(profile_));
105 108
106 theme_syncable_service_.reset(new ThemeSyncableService(profile_, this)); 109 theme_syncable_service_.reset(new ThemeSyncableService(profile_, this));
107 } 110 }
108 111
109 gfx::Image ThemeService::GetImageNamed(int id) const { 112 gfx::Image ThemeService::GetImageNamed(int id) const {
110 DCHECK(CalledOnValidThread()); 113 DCHECK(CalledOnValidThread());
111 114
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 const content::NotificationSource& source, 248 const content::NotificationSource& source,
246 const content::NotificationDetails& details) { 249 const content::NotificationDetails& details) {
247 using content::Details; 250 using content::Details;
248 switch (type) { 251 switch (type) {
249 case extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED: 252 case extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED:
250 registrar_.Remove(this, 253 registrar_.Remove(this,
251 extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED, 254 extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED,
252 content::Source<Profile>(profile_)); 255 content::Source<Profile>(profile_));
253 OnExtensionServiceReady(); 256 OnExtensionServiceReady();
254 break; 257 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: { 258 case extensions::NOTIFICATION_EXTENSION_ENABLED: {
274 const Extension* extension = Details<const Extension>(details).ptr(); 259 const Extension* extension = Details<const Extension>(details).ptr();
275 if (extension->is_theme()) 260 if (extension->is_theme())
276 SetTheme(extension); 261 SetTheme(extension);
277 break; 262 break;
278 } 263 }
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 } 264 }
289 } 265 }
290 266
267 void ThemeService::OnExtensionLoaded(content::BrowserContext* browser_context,
268 const extensions::Extension* extension) {
269 if (extension->is_theme() && installed_pending_load_id_ != kDefaultThemeID &&
Bernhard Bauer 2014/10/15 12:32:45 Please put each of these conditions on a separate
Jitu( very slow this week) 2014/10/15 13:01:12 Done.
270 installed_pending_load_id_ == extension->id()) {
271 SetTheme(extension);
272 }
273 installed_pending_load_id_ = kDefaultThemeID;
274 }
275
276 void ThemeService::OnExtensionUnloaded(
277 content::BrowserContext* browser_context,
278 const extensions::Extension* extension,
279 extensions::UnloadedExtensionInfo::Reason reason) {
280 if (reason != UnloadedExtensionInfo::REASON_UPDATE && extension->is_theme() &&
281 extension->id() == GetThemeID()) {
282 UseDefaultTheme();
283 }
284 }
285
286 void ThemeService::OnExtensionWillBeInstalled(
287 content::BrowserContext* browser_context,
288 const extensions::Extension* extension,
289 bool is_update,
290 bool from_ephemeral,
291 const std::string& old_name) {
292 // The theme may be initially disabled. Wait till it is loaded (if ever).
293 if (extension->is_theme())
294 installed_pending_load_id_ = extension->id();
295 }
296
297 void ThemeService::Shutdown() {
298 if (extension_registry_) {
Bernhard Bauer 2014/10/15 12:32:45 When is this NULL?
Jitu( very slow this week) 2014/10/15 13:01:12 This was added for safer side. Let say we created
Bernhard Bauer 2014/10/15 13:21:04 That would be a bug. If we silently accept NULL he
299 extension_registry_->RemoveObserver(this);
300 extension_registry_ = NULL;
301 }
302 }
303
291 void ThemeService::SetTheme(const Extension* extension) { 304 void ThemeService::SetTheme(const Extension* extension) {
292 DCHECK(extension->is_theme()); 305 DCHECK(extension->is_theme());
293 ExtensionService* service = 306 ExtensionService* service =
294 extensions::ExtensionSystem::Get(profile_)->extension_service(); 307 extensions::ExtensionSystem::Get(profile_)->extension_service();
295 if (!service->IsExtensionEnabled(extension->id())) { 308 if (!service->IsExtensionEnabled(extension->id())) {
296 // |extension| is disabled when reverting to the previous theme via an 309 // |extension| is disabled when reverting to the previous theme via an
297 // infobar. 310 // infobar.
298 service->EnableExtension(extension->id()); 311 service->EnableExtension(extension->id());
299 // Enabling the extension will call back to SetTheme(). 312 // Enabling the extension will call back to SetTheme().
300 return; 313 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 511 // If the ThemeService is not ready yet, the custom theme data pack needs to
499 // be recreated from the extension. 512 // be recreated from the extension.
500 MigrateTheme(); 513 MigrateTheme();
501 set_ready(); 514 set_ready();
502 515
503 // Send notification in case anyone requested data and cached it when the 516 // Send notification in case anyone requested data and cached it when the
504 // theme service was not ready yet. 517 // theme service was not ready yet.
505 NotifyThemeChanged(); 518 NotifyThemeChanged();
506 } 519 }
507 520
508 registrar_.Add( 521 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, 522 registrar_.Add(this,
516 extensions::NOTIFICATION_EXTENSION_ENABLED, 523 extensions::NOTIFICATION_EXTENSION_ENABLED,
517 content::Source<Profile>(profile_)); 524 content::Source<Profile>(profile_));
518 registrar_.Add(this,
519 extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
520 content::Source<Profile>(profile_));
521 525
522 base::MessageLoop::current()->PostDelayedTask(FROM_HERE, 526 base::MessageLoop::current()->PostDelayedTask(FROM_HERE,
523 base::Bind(&ThemeService::RemoveUnusedThemes, 527 base::Bind(&ThemeService::RemoveUnusedThemes,
524 weak_ptr_factory_.GetWeakPtr(), 528 weak_ptr_factory_.GetWeakPtr(),
525 false), 529 false),
526 base::TimeDelta::FromSeconds(kRemoveUnusedThemesStartupDelay)); 530 base::TimeDelta::FromSeconds(kRemoveUnusedThemesStartupDelay));
527 } 531 }
528 532
529 void ThemeService::MigrateTheme() { 533 void ThemeService::MigrateTheme() {
530 // TODO(erg): We need to pop up a dialog informing the user that their 534 // 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() { 607 void ThemeService::OnInfobarDestroyed() {
604 number_of_infobars_--; 608 number_of_infobars_--;
605 609
606 if (number_of_infobars_ == 0) 610 if (number_of_infobars_ == 0)
607 RemoveUnusedThemes(false); 611 RemoveUnusedThemes(false);
608 } 612 }
609 613
610 ThemeSyncableService* ThemeService::GetThemeSyncableService() const { 614 ThemeSyncableService* ThemeService::GetThemeSyncableService() const {
611 return theme_syncable_service_.get(); 615 return theme_syncable_service_.get();
612 } 616 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698