Index: chrome/browser/notifications/notification_permission_context_unittest.cc |
diff --git a/chrome/browser/notifications/notification_permission_context_unittest.cc b/chrome/browser/notifications/notification_permission_context_unittest.cc |
index 6ae74b526918de636d79377bd890d53dd7032dfc..1c878d943b4b4d093036d789e8cd698cfff8aa22 100644 |
--- a/chrome/browser/notifications/notification_permission_context_unittest.cc |
+++ b/chrome/browser/notifications/notification_permission_context_unittest.cc |
@@ -34,7 +34,8 @@ void DoNothing2(blink::mojom::PermissionStatus status) {} |
class TestNotificationPermissionContext : public NotificationPermissionContext { |
public: |
explicit TestNotificationPermissionContext(Profile* profile) |
- : NotificationPermissionContext(profile), |
+ : NotificationPermissionContext(profile, |
+ content::PermissionType::NOTIFICATIONS), |
permission_set_count_(0), |
last_permission_set_persisted_(false), |
last_permission_set_setting_(CONTENT_SETTING_DEFAULT) {} |
@@ -75,6 +76,8 @@ class TestNotificationPermissionContext : public NotificationPermissionContext { |
ContentSetting last_permission_set_setting_; |
}; |
+} // namespace |
+ |
class NotificationPermissionContextTest |
: public ChromeRenderViewHostTestHarness { |
public: |
@@ -95,12 +98,18 @@ class NotificationPermissionContextTest |
ChromeRenderViewHostTestHarness::TearDown(); |
} |
+ protected: |
+ void UpdateContentSetting(NotificationPermissionContext* context, |
+ const GURL& requesting_origin, |
+ const GURL& embedding_origin, |
+ ContentSetting setting) { |
+ context->UpdateContentSetting(requesting_origin, embedding_origin, setting); |
+ } |
+ |
private: |
scoped_refptr<base::SingleThreadTaskRunner> old_task_runner_; |
}; |
-} // namespace |
- |
// Web Notification permission requests will completely ignore the embedder |
// origin. See https://crbug.com/416894. |
TEST_F(NotificationPermissionContextTest, IgnoresEmbedderOrigin) { |
@@ -108,10 +117,10 @@ TEST_F(NotificationPermissionContextTest, IgnoresEmbedderOrigin) { |
GURL embedding_origin("https://chrome.com"); |
GURL different_origin("https://foobar.com"); |
- NotificationPermissionContext context(profile()); |
- context.UpdateContentSetting(requesting_origin, |
- embedding_origin, |
- CONTENT_SETTING_ALLOW); |
+ NotificationPermissionContext context(profile(), |
+ content::PermissionType::NOTIFICATIONS); |
+ UpdateContentSetting(&context, requesting_origin, embedding_origin, |
+ CONTENT_SETTING_ALLOW); |
EXPECT_EQ(CONTENT_SETTING_ALLOW, |
context.GetPermissionStatus(requesting_origin, embedding_origin)); |
@@ -128,21 +137,73 @@ TEST_F(NotificationPermissionContextTest, IgnoresEmbedderOrigin) { |
context.GetPermissionStatus(requesting_origin, different_origin)); |
} |
+// Push messaging permission requests should only succeed for top level origins |
+// (embedding origin == requesting origin). |
+TEST_F(NotificationPermissionContextTest, PushTopLevelOriginOnly) { |
+ GURL requesting_origin("https://example.com"); |
+ GURL embedding_origin("https://chrome.com"); |
+ |
+ NotificationPermissionContext context( |
+ profile(), content::PermissionType::PUSH_MESSAGING); |
+ UpdateContentSetting(&context, requesting_origin, embedding_origin, |
+ CONTENT_SETTING_ALLOW); |
+ |
+ EXPECT_EQ(CONTENT_SETTING_BLOCK, |
+ context.GetPermissionStatus(requesting_origin, embedding_origin)); |
+ |
+ context.ResetPermission(requesting_origin, embedding_origin); |
+ |
+ UpdateContentSetting(&context, embedding_origin, embedding_origin, |
+ CONTENT_SETTING_ALLOW); |
+ |
+ EXPECT_EQ(CONTENT_SETTING_ALLOW, |
+ context.GetPermissionStatus(embedding_origin, embedding_origin)); |
+ |
+ context.ResetPermission(embedding_origin, embedding_origin); |
+ |
+ EXPECT_EQ(CONTENT_SETTING_ASK, |
+ context.GetPermissionStatus(embedding_origin, embedding_origin)); |
+} |
+ |
// Web Notifications do not require a secure origin when requesting permission. |
// See https://crbug.com/404095. |
TEST_F(NotificationPermissionContextTest, NoSecureOriginRequirement) { |
GURL origin("http://example.com"); |
- NotificationPermissionContext context(profile()); |
+ NotificationPermissionContext context(profile(), |
+ content::PermissionType::NOTIFICATIONS); |
EXPECT_EQ(CONTENT_SETTING_ASK, |
context.GetPermissionStatus(origin, origin)); |
- context.UpdateContentSetting(origin, origin, CONTENT_SETTING_ALLOW); |
+ UpdateContentSetting(&context, origin, origin, CONTENT_SETTING_ALLOW); |
EXPECT_EQ(CONTENT_SETTING_ALLOW, |
context.GetPermissionStatus(origin, origin)); |
} |
+// Push notifications requires a secure origin to acquire permission. |
+TEST_F(NotificationPermissionContextTest, PushSecureOriginRequirement) { |
+ GURL origin("http://example.com"); |
+ GURL secure_origin("https://example.com"); |
+ |
+ NotificationPermissionContext context( |
+ profile(), content::PermissionType::PUSH_MESSAGING); |
+ EXPECT_EQ(CONTENT_SETTING_BLOCK, context.GetPermissionStatus(origin, origin)); |
+ |
+ UpdateContentSetting(&context, origin, origin, CONTENT_SETTING_ALLOW); |
+ |
+ EXPECT_EQ(CONTENT_SETTING_BLOCK, context.GetPermissionStatus(origin, origin)); |
+ |
+ EXPECT_EQ(CONTENT_SETTING_ASK, |
+ context.GetPermissionStatus(secure_origin, secure_origin)); |
+ |
+ UpdateContentSetting(&context, secure_origin, secure_origin, |
+ CONTENT_SETTING_ALLOW); |
+ |
+ EXPECT_EQ(CONTENT_SETTING_ALLOW, |
+ context.GetPermissionStatus(secure_origin, secure_origin)); |
+} |
+ |
// Tests auto-denial after a time delay in incognito. |
TEST_F(NotificationPermissionContextTest, TestDenyInIncognitoAfterDelay) { |
TestNotificationPermissionContext permission_context( |