| OLD | NEW |
| 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/notifications/desktop_notification_service.h" | 5 #include "chrome/browser/notifications/desktop_notification_service.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/prefs/scoped_user_pref_update.h" | 9 #include "base/prefs/scoped_user_pref_update.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 #include "net/base/escape.h" | 46 #include "net/base/escape.h" |
| 47 #include "ui/base/l10n/l10n_util.h" | 47 #include "ui/base/l10n/l10n_util.h" |
| 48 #include "ui/base/resource/resource_bundle.h" | 48 #include "ui/base/resource/resource_bundle.h" |
| 49 #include "ui/base/webui/web_ui_util.h" | 49 #include "ui/base/webui/web_ui_util.h" |
| 50 #include "ui/message_center/notifier_settings.h" | 50 #include "ui/message_center/notifier_settings.h" |
| 51 | 51 |
| 52 #if defined(ENABLE_EXTENSIONS) | 52 #if defined(ENABLE_EXTENSIONS) |
| 53 #include "chrome/browser/extensions/api/notifications/notifications_api.h" | 53 #include "chrome/browser/extensions/api/notifications/notifications_api.h" |
| 54 #include "chrome/browser/extensions/extension_service.h" | 54 #include "chrome/browser/extensions/extension_service.h" |
| 55 #include "extensions/browser/event_router.h" | 55 #include "extensions/browser/event_router.h" |
| 56 #include "extensions/browser/extension_registry.h" |
| 56 #include "extensions/browser/extension_system.h" | 57 #include "extensions/browser/extension_system.h" |
| 57 #include "extensions/browser/extension_util.h" | 58 #include "extensions/browser/extension_util.h" |
| 58 #include "extensions/browser/info_map.h" | 59 #include "extensions/browser/info_map.h" |
| 59 #include "extensions/common/constants.h" | 60 #include "extensions/common/constants.h" |
| 60 #include "extensions/common/extension.h" | 61 #include "extensions/common/extension.h" |
| 61 #include "extensions/common/extension_set.h" | 62 #include "extensions/common/extension_set.h" |
| 62 #endif | 63 #endif |
| 63 | 64 |
| 64 using blink::WebTextDirection; | 65 using blink::WebTextDirection; |
| 65 using content::BrowserThread; | 66 using content::BrowserThread; |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 blink::WebTextDirectionDefault, | 381 blink::WebTextDirectionDefault, |
| 381 base::string16(), replace_id, delegate); | 382 base::string16(), replace_id, delegate); |
| 382 g_browser_process->notification_ui_manager()->Add(notification, profile); | 383 g_browser_process->notification_ui_manager()->Add(notification, profile); |
| 383 return notification.delegate_id(); | 384 return notification.delegate_id(); |
| 384 } | 385 } |
| 385 | 386 |
| 386 DesktopNotificationService::DesktopNotificationService( | 387 DesktopNotificationService::DesktopNotificationService( |
| 387 Profile* profile, | 388 Profile* profile, |
| 388 NotificationUIManager* ui_manager) | 389 NotificationUIManager* ui_manager) |
| 389 : profile_(profile), | 390 : profile_(profile), |
| 390 ui_manager_(ui_manager) { | 391 ui_manager_(ui_manager), |
| 392 extension_registry_observer_(this) { |
| 391 OnStringListPrefChanged( | 393 OnStringListPrefChanged( |
| 392 prefs::kMessageCenterDisabledExtensionIds, &disabled_extension_ids_); | 394 prefs::kMessageCenterDisabledExtensionIds, &disabled_extension_ids_); |
| 393 OnStringListPrefChanged( | 395 OnStringListPrefChanged( |
| 394 prefs::kMessageCenterDisabledSystemComponentIds, | 396 prefs::kMessageCenterDisabledSystemComponentIds, |
| 395 &disabled_system_component_ids_); | 397 &disabled_system_component_ids_); |
| 396 disabled_extension_id_pref_.Init( | 398 disabled_extension_id_pref_.Init( |
| 397 prefs::kMessageCenterDisabledExtensionIds, | 399 prefs::kMessageCenterDisabledExtensionIds, |
| 398 profile_->GetPrefs(), | 400 profile_->GetPrefs(), |
| 399 base::Bind( | 401 base::Bind( |
| 400 &DesktopNotificationService::OnStringListPrefChanged, | 402 &DesktopNotificationService::OnStringListPrefChanged, |
| 401 base::Unretained(this), | 403 base::Unretained(this), |
| 402 base::Unretained(prefs::kMessageCenterDisabledExtensionIds), | 404 base::Unretained(prefs::kMessageCenterDisabledExtensionIds), |
| 403 base::Unretained(&disabled_extension_ids_))); | 405 base::Unretained(&disabled_extension_ids_))); |
| 404 disabled_system_component_id_pref_.Init( | 406 disabled_system_component_id_pref_.Init( |
| 405 prefs::kMessageCenterDisabledSystemComponentIds, | 407 prefs::kMessageCenterDisabledSystemComponentIds, |
| 406 profile_->GetPrefs(), | 408 profile_->GetPrefs(), |
| 407 base::Bind( | 409 base::Bind( |
| 408 &DesktopNotificationService::OnStringListPrefChanged, | 410 &DesktopNotificationService::OnStringListPrefChanged, |
| 409 base::Unretained(this), | 411 base::Unretained(this), |
| 410 base::Unretained(prefs::kMessageCenterDisabledSystemComponentIds), | 412 base::Unretained(prefs::kMessageCenterDisabledSystemComponentIds), |
| 411 base::Unretained(&disabled_system_component_ids_))); | 413 base::Unretained(&disabled_system_component_ids_))); |
| 412 registrar_.Add(this, | 414 extension_registry_observer_.Add( |
| 413 chrome::NOTIFICATION_EXTENSION_UNINSTALLED_DEPRECATED, | 415 extensions::ExtensionRegistry::Get(profile_)); |
| 414 content::Source<Profile>(profile_)); | |
| 415 } | 416 } |
| 416 | 417 |
| 417 DesktopNotificationService::~DesktopNotificationService() { | 418 DesktopNotificationService::~DesktopNotificationService() { |
| 418 } | 419 } |
| 419 | 420 |
| 420 void DesktopNotificationService::GrantPermission(const GURL& origin) { | 421 void DesktopNotificationService::GrantPermission(const GURL& origin) { |
| 421 ContentSettingsPattern primary_pattern = | 422 ContentSettingsPattern primary_pattern = |
| 422 ContentSettingsPattern::FromURLNoWildcard(origin); | 423 ContentSettingsPattern::FromURLNoWildcard(origin); |
| 423 profile_->GetHostContentSettingsMap()->SetContentSetting( | 424 profile_->GetHostContentSettingsMap()->SetContentSetting( |
| 424 primary_pattern, | 425 primary_pattern, |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 const base::ListValue* pref_list = pref_service->GetList(pref_name); | 684 const base::ListValue* pref_list = pref_service->GetList(pref_name); |
| 684 for (size_t i = 0; i < pref_list->GetSize(); ++i) { | 685 for (size_t i = 0; i < pref_list->GetSize(); ++i) { |
| 685 std::string element; | 686 std::string element; |
| 686 if (pref_list->GetString(i, &element) && !element.empty()) | 687 if (pref_list->GetString(i, &element) && !element.empty()) |
| 687 ids_field->insert(element); | 688 ids_field->insert(element); |
| 688 else | 689 else |
| 689 LOG(WARNING) << i << "-th element is not a string for " << pref_name; | 690 LOG(WARNING) << i << "-th element is not a string for " << pref_name; |
| 690 } | 691 } |
| 691 } | 692 } |
| 692 | 693 |
| 693 void DesktopNotificationService::Observe( | 694 void DesktopNotificationService::OnExtensionUninstalled( |
| 694 int type, | 695 content::BrowserContext* browser_context, |
| 695 const content::NotificationSource& source, | 696 const extensions::Extension* extension, |
| 696 const content::NotificationDetails& details) { | 697 extensions::UninstallReason reason) { |
| 697 #if defined(ENABLE_EXTENSIONS) | 698 #if defined(ENABLE_EXTENSIONS) |
| 698 DCHECK_EQ(chrome::NOTIFICATION_EXTENSION_UNINSTALLED_DEPRECATED, type); | |
| 699 | |
| 700 extensions::Extension* extension = | |
| 701 content::Details<extensions::Extension>(details).ptr(); | |
| 702 NotifierId notifier_id(NotifierId::APPLICATION, extension->id()); | 699 NotifierId notifier_id(NotifierId::APPLICATION, extension->id()); |
| 703 if (IsNotifierEnabled(notifier_id)) | 700 if (IsNotifierEnabled(notifier_id)) |
| 704 return; | 701 return; |
| 705 | 702 |
| 706 // The settings for ephemeral apps will be persisted across cache evictions. | 703 // The settings for ephemeral apps will be persisted across cache evictions. |
| 707 if (extensions::util::IsEphemeralApp(extension->id(), profile_)) | 704 if (extensions::util::IsEphemeralApp(extension->id(), profile_)) |
| 708 return; | 705 return; |
| 709 | 706 |
| 710 SetNotifierEnabled(notifier_id, true); | 707 SetNotifierEnabled(notifier_id, true); |
| 711 #endif | 708 #endif |
| (...skipping 18 matching lines...) Expand all Loading... |
| 730 // Tell the IO thread that this extension's permission for notifications | 727 // Tell the IO thread that this extension's permission for notifications |
| 731 // has changed. | 728 // has changed. |
| 732 extensions::InfoMap* extension_info_map = | 729 extensions::InfoMap* extension_info_map = |
| 733 extensions::ExtensionSystem::Get(profile_)->info_map(); | 730 extensions::ExtensionSystem::Get(profile_)->info_map(); |
| 734 BrowserThread::PostTask( | 731 BrowserThread::PostTask( |
| 735 BrowserThread::IO, FROM_HERE, | 732 BrowserThread::IO, FROM_HERE, |
| 736 base::Bind(&extensions::InfoMap::SetNotificationsDisabled, | 733 base::Bind(&extensions::InfoMap::SetNotificationsDisabled, |
| 737 extension_info_map, notifier_id.id, !enabled)); | 734 extension_info_map, notifier_id.id, !enabled)); |
| 738 #endif | 735 #endif |
| 739 } | 736 } |
| OLD | NEW |