Chromium Code Reviews| Index: chrome/browser/services/gcm/push_messaging_permission_context_unittest.cc |
| diff --git a/chrome/browser/services/gcm/push_messaging_permission_context_unittest.cc b/chrome/browser/services/gcm/push_messaging_permission_context_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3d6f5fc7d7d90feb55cbd90eb7e7614be49a1e72 |
| --- /dev/null |
| +++ b/chrome/browser/services/gcm/push_messaging_permission_context_unittest.cc |
| @@ -0,0 +1,171 @@ |
| +// Copyright 2014 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/services/gcm/push_messaging_permission_context.h" |
| +#include "chrome/test/base/testing_profile.h" |
| +#include "components/content_settings/core/browser/host_content_settings_map.h" |
| +#include "components/content_settings/core/common/content_settings.h" |
| +#include "components/content_settings/core/common/content_settings_types.h" |
| +#include "components/content_settings/core/common/permission_request_id.h" |
| +#include "content/public/test/test_browser_thread.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace { |
| +static std::string EMBEDDER = "https://example.org"; |
| +static GURL EMBEDDER_URL(EMBEDDER); |
| +} |
| + |
| +namespace gcm { |
| + |
| +class TestPushMessagingPermissionContext |
| + : public PushMessagingPermissionContext { |
| + public: |
| + explicit TestPushMessagingPermissionContext(Profile* profile) |
| + : PushMessagingPermissionContext(profile), |
| + was_persisted_(false), |
| + permission_granted_(false) {} |
| + |
| + bool WasPersisted() { return was_persisted_; } |
| + bool PermissionGranted() { return permission_granted_; } |
| + |
| + void DecidePermission(content::WebContents* web_contents, |
|
johnme
2014/11/13 18:50:06
Nit: Similarly "// PushMessagingPermissionContext
Miguel Garcia
2014/11/14 11:34:36
Done.
|
| + const PermissionRequestID& id, |
| + const GURL& requesting_origin, |
| + const GURL& embedder_origin, |
| + bool user_gesture, |
| + const BrowserPermissionCallback& callback) override { |
| + PushMessagingPermissionContext::DecidePermission( |
| + web_contents, id, requesting_origin, embedder_origin, user_gesture, |
| + callback); |
| + } |
| + |
| + private: |
| + void NotifyPermissionSet(const PermissionRequestID& id, |
|
johnme
2014/11/13 18:50:06
Nit: Ditto "// PermissionContextBase implementatio
Miguel Garcia
2014/11/14 11:34:36
I've gone with // PushMessagingPermissionContext:
|
| + const GURL& requesting_origin, |
| + const GURL& embedder_origin, |
| + const BrowserPermissionCallback& callback, |
| + bool persist, |
| + bool allowed) override { |
| + was_persisted_ = persist; |
| + permission_granted_ = allowed; |
| + } |
| + |
| + bool was_persisted_; |
| + bool permission_granted_; |
| +}; |
| + |
| +class PushMessagingPermissionContextTest : public testing::Test { |
| + public: |
| + PushMessagingPermissionContextTest() |
| + : ui_thread_(content::BrowserThread::UI, &message_loop_) {} |
| + |
| + protected: |
| + void SetContentSetting(ContentSettingsType setting, ContentSetting value) { |
| + ContentSettingsPattern pattern = |
| + ContentSettingsPattern::FromString(EMBEDDER); |
| + HostContentSettingsMap* host_content_settings_map = |
| + profile_.GetHostContentSettingsMap(); |
| + host_content_settings_map->SetContentSetting(pattern, pattern, setting, |
| + std::string(), value); |
| + } |
| + TestingProfile profile_; |
| + base::MessageLoop message_loop_; |
| + content::TestBrowserThread ui_thread_; |
| + |
| + private: |
| + virtual void SetUp() { |
| + HostContentSettingsMap* host_content_settings_map = |
| + profile_.GetHostContentSettingsMap(); |
| + host_content_settings_map->SetDefaultContentSetting( |
| + CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ASK); |
| + host_content_settings_map->SetDefaultContentSetting( |
| + CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, CONTENT_SETTING_ASK); |
| + } |
| +}; |
| + |
| +TEST_F(PushMessagingPermissionContextTest, HasPermissionPrompt) { |
| + PushMessagingPermissionContext context(&profile_); |
| + EXPECT_EQ(CONTENT_SETTING_ASK, |
| + context.GetPermissionStatus(EMBEDDER_URL, EMBEDDER_URL)); |
| + |
| + // Just granting notifications should still prompt |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW); |
| + |
| + EXPECT_EQ(CONTENT_SETTING_ASK, |
| + context.GetPermissionStatus(EMBEDDER_URL, EMBEDDER_URL)); |
| + |
| + // Just granting push should still prompt |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ASK); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, |
| + CONTENT_SETTING_ALLOW); |
| + |
| + EXPECT_EQ(CONTENT_SETTING_ASK, |
| + context.GetPermissionStatus(EMBEDDER_URL, EMBEDDER_URL)); |
| +} |
| + |
| +TEST_F(PushMessagingPermissionContextTest, HasPermissionDeny) { |
| + PushMessagingPermissionContext context(&profile_); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_BLOCK); |
| + EXPECT_EQ(CONTENT_SETTING_BLOCK, |
| + context.GetPermissionStatus(EMBEDDER_URL, EMBEDDER_URL)); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ASK); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, |
| + CONTENT_SETTING_BLOCK); |
| + EXPECT_EQ(CONTENT_SETTING_BLOCK, |
| + context.GetPermissionStatus(EMBEDDER_URL, EMBEDDER_URL)); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW); |
| + EXPECT_EQ(CONTENT_SETTING_BLOCK, |
| + context.GetPermissionStatus(EMBEDDER_URL, EMBEDDER_URL)); |
| + |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ASK); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, |
| + CONTENT_SETTING_BLOCK); |
| + EXPECT_EQ(CONTENT_SETTING_BLOCK, |
| + context.GetPermissionStatus(EMBEDDER_URL, EMBEDDER_URL)); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, |
| + CONTENT_SETTING_BLOCK); |
| + EXPECT_EQ(CONTENT_SETTING_BLOCK, |
| + context.GetPermissionStatus(EMBEDDER_URL, EMBEDDER_URL)); |
| +} |
| + |
| +TEST_F(PushMessagingPermissionContextTest, HasPermissionAccept) { |
| + PushMessagingPermissionContext context(&profile_); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, |
| + CONTENT_SETTING_ALLOW); |
| + EXPECT_EQ(CONTENT_SETTING_ALLOW, |
| + context.GetPermissionStatus(EMBEDDER_URL, EMBEDDER_URL)); |
| +} |
| + |
| +TEST_F(PushMessagingPermissionContextTest, DecidePermission) { |
| + TestPushMessagingPermissionContext context(&profile_); |
| + PermissionRequestID request_id(-1, -1, -1, EMBEDDER_URL); |
| + BrowserPermissionCallback callback; |
| + |
| + context.DecidePermission(NULL, request_id, EMBEDDER_URL, EMBEDDER_URL, true, |
| + callback); |
| + EXPECT_EQ(false, context.WasPersisted()); |
| + EXPECT_EQ(false, context.PermissionGranted()); |
| + |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_BLOCK); |
| + context.DecidePermission(NULL, request_id, EMBEDDER_URL, EMBEDDER_URL, true, |
| + callback); |
| + EXPECT_EQ(false, context.WasPersisted()); |
| + EXPECT_EQ(false, context.PermissionGranted()); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_ALLOW); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, |
| + CONTENT_SETTING_BLOCK); |
| + context.DecidePermission(NULL, request_id, EMBEDDER_URL, EMBEDDER_URL, true, |
| + callback); |
| + EXPECT_EQ(false, context.WasPersisted()); |
| + EXPECT_EQ(false, context.PermissionGranted()); |
| + SetContentSetting(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, CONTENT_SETTING_ASK); |
| + context.DecidePermission(NULL, request_id, EMBEDDER_URL, EMBEDDER_URL, true, |
| + callback); |
| + EXPECT_EQ(true, context.WasPersisted()); |
| + EXPECT_EQ(true, context.PermissionGranted()); |
| +} |
| + |
| +} // namespace gcm |