// 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_DEPRECATED, 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_DEPRECATED) { 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(); } }