Index: chrome/browser/notifications/platform_notification_service_impl.cc |
diff --git a/chrome/browser/notifications/platform_notification_service_impl.cc b/chrome/browser/notifications/platform_notification_service_impl.cc |
index 4c60c08daae8000ad58f8de373444e782274bc8e..0f0186f81fcb5a7fb540f2e581d8fcc4dfc9e175 100644 |
--- a/chrome/browser/notifications/platform_notification_service_impl.cc |
+++ b/chrome/browser/notifications/platform_notification_service_impl.cc |
@@ -11,6 +11,7 @@ |
#include "base/metrics/user_metrics.h" |
#include "base/metrics/user_metrics_action.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "base/time/time.h" |
#include "build/build_config.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
@@ -18,6 +19,7 @@ |
#include "chrome/browser/notifications/notification_display_service_factory.h" |
#include "chrome/browser/notifications/notification_object_proxy.h" |
#include "chrome/browser/notifications/persistent_notification_delegate.h" |
+#include "chrome/browser/permissions/permission_decision_auto_blocker.h" |
#include "chrome/browser/permissions/permission_manager.h" |
#include "chrome/browser/permissions/permission_result.h" |
#include "chrome/browser/profiles/profile.h" |
@@ -287,7 +289,18 @@ PlatformNotificationServiceImpl::CheckPermissionOnIOThread( |
if (setting == CONTENT_SETTING_BLOCK) |
return blink::mojom::PermissionStatus::DENIED; |
- return blink::mojom::PermissionStatus::ASK; |
+ // Check whether the permission has been embargoed (automatically blocked). |
+ // TODO(crbug.com/658020): make PermissionManager::GetPermissionStatus thread |
+ // safe so it isn't necessary to do this HostContentSettingsMap and embargo |
+ // check outside of the permissions code. |
+ PermissionResult result = PermissionDecisionAutoBlocker::GetEmbargoResult( |
+ host_content_settings_map, origin, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, |
+ base::Time::Now()); |
+ DCHECK(result.content_setting == CONTENT_SETTING_ASK || |
+ result.content_setting == CONTENT_SETTING_BLOCK); |
+ return result.content_setting == CONTENT_SETTING_ASK |
+ ? blink::mojom::PermissionStatus::ASK |
+ : blink::mojom::PermissionStatus::DENIED; |
} |
void PlatformNotificationServiceImpl::DisplayNotification( |