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..fe625898ace573a1d88aeaa7032c4f173939abe2 |
--- /dev/null |
+++ b/chrome/browser/services/gcm/push_messaging_permission_context_unittest.cc |
@@ -0,0 +1,173 @@ |
+// 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"; |
Bernhard Bauer
2014/11/14 12:31:33
This is going to create a static constructor, whic
Miguel Garcia
2014/11/17 11:43:23
All done, thanks for the long explanation!
On 201
|
+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_; } |
Bernhard Bauer
2014/11/14 12:31:34
Make this unix_hacker_style?
Miguel Garcia
2014/11/17 11:43:23
Done.
|
+ bool PermissionGranted() { return permission_granted_; } |
+ |
+ // PushMessagingPermissionContext: |
+ void DecidePermission(content::WebContents* web_contents, |
+ 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: |
+ // PushMessagingPermissionContext: |
+ void NotifyPermissionSet(const PermissionRequestID& id, |
+ 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_; |
Bernhard Bauer
2014/11/14 12:31:33
Use a TestBrowserThreadBundle? It's one less line,
|
+ content::TestBrowserThread ui_thread_; |
+ |
+ private: |
+ virtual void SetUp() { |
Bernhard Bauer
2014/11/14 12:31:34
I think this method overrides testing::Test::SetUp
Miguel Garcia
2014/11/17 11:43:22
Done.
|
+ 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 |