Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / notifications / notification_system_observer.cc
blobb36b15096c3045d3a0011da0bf9f760cdd34d99b
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/notifications/notification_system_observer.h"
7 #include "base/logging.h"
8 #include "chrome/browser/chrome_notification_types.h"
9 #include "chrome/browser/notifications/notification_ui_manager.h"
10 #include "chrome/browser/profiles/profile.h"
11 #include "content/public/browser/notification_service.h"
12 #include "extensions/common/extension.h"
14 NotificationSystemObserver::NotificationSystemObserver(
15 NotificationUIManager* ui_manager)
16 : ui_manager_(ui_manager) {
17 DCHECK(ui_manager_);
18 registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING,
19 content::NotificationService::AllSources());
20 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
21 content::NotificationService::AllSources());
22 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED,
23 content::NotificationService::AllSources());
26 NotificationSystemObserver::~NotificationSystemObserver() {
29 void NotificationSystemObserver::Observe(
30 int type,
31 const content::NotificationSource& source,
32 const content::NotificationDetails& details) {
33 if (type == chrome::NOTIFICATION_APP_TERMINATING) {
34 ui_manager_->CancelAll();
35 } else if (type == chrome::NOTIFICATION_EXTENSION_UNLOADED) {
36 if (!content::Source<Profile>(source)->IsOffTheRecord()) {
37 extensions::UnloadedExtensionInfo* extension_info =
38 content::Details<extensions::UnloadedExtensionInfo>(details).ptr();
39 const extensions::Extension* extension = extension_info->extension;
40 ui_manager_->CancelAllBySourceOrigin(extension->url());
42 } else if (type == chrome::NOTIFICATION_PROFILE_DESTROYED) {
43 // We only want to remove the incognito notifications.
44 if (content::Source<Profile>(source)->IsOffTheRecord())
45 ui_manager_->CancelAllByProfile(content::Source<Profile>(source).ptr());
46 } else {
47 NOTREACHED();