| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/notifications/notification_system_observer.h" |
| |
| #include "base/logging.h" |
| #include "chrome/browser/chrome_notification_types.h" |
| #include "chrome/browser/notifications/notification_ui_manager.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "content/public/browser/notification_service.h" |
| #include "extensions/common/extension.h" |
| |
| NotificationSystemObserver::NotificationSystemObserver( |
| NotificationUIManager* ui_manager) |
| : ui_manager_(ui_manager) { |
| DCHECK(ui_manager_); |
| registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING, |
| content::NotificationService::AllSources()); |
| registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, |
| content::NotificationService::AllSources()); |
| registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED, |
| content::NotificationService::AllSources()); |
| } |
| |
| NotificationSystemObserver::~NotificationSystemObserver() { |
| } |
| |
| void NotificationSystemObserver::Observe( |
| int type, |
| const content::NotificationSource& source, |
| const content::NotificationDetails& details) { |
| if (type == chrome::NOTIFICATION_APP_TERMINATING) { |
| ui_manager_->CancelAll(); |
| } else if (type == chrome::NOTIFICATION_EXTENSION_UNLOADED) { |
| if (!content::Source<Profile>(source)->IsOffTheRecord()) { |
| extensions::UnloadedExtensionInfo* extension_info = |
| content::Details<extensions::UnloadedExtensionInfo>(details).ptr(); |
| const extensions::Extension* extension = extension_info->extension; |
| ui_manager_->CancelAllBySourceOrigin(extension->url()); |
| } |
| } else if (type == chrome::NOTIFICATION_PROFILE_DESTROYED) { |
| // We only want to remove the incognito notifications. |
| if (content::Source<Profile>(source)->IsOffTheRecord()) |
| ui_manager_->CancelAllByProfile(content::Source<Profile>(source).ptr()); |
| } else { |
| NOTREACHED(); |
| } |
| } |