Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(365)

Unified Diff: content/browser/notifications/notification_id_generator_unittest.cc

Issue 1116693002: [NOT FOR REVIEW] Significantly simplify the PlatformNotificationService //content API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/notifications/notification_id_generator_unittest.cc
diff --git a/content/browser/notifications/notification_id_generator_unittest.cc b/content/browser/notifications/notification_id_generator_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..67b65aadf2dd6099d5c3b1fd67c0f6cdecd04994
--- /dev/null
+++ b/content/browser/notifications/notification_id_generator_unittest.cc
@@ -0,0 +1,259 @@
+// Copyright 2015 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 "base/strings/string_number_conversions.h"
+#include "content/browser/notifications/notification_id_generator.h"
+#include "content/public/test/test_browser_context.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace content {
+namespace {
+
+class TestBrowserContextConfigurableIncognito : public TestBrowserContext {
+ public:
+ TestBrowserContextConfigurableIncognito() {}
+ ~TestBrowserContextConfigurableIncognito() override {}
+
+ void set_incognito(bool incognito) { incognito_ = incognito; }
+
+ // TestBrowserContext implementation.
+ bool IsOffTheRecord() const override { return incognito_; }
+
+ private:
+ bool incognito_ = false;
+
+ DISALLOW_COPY_AND_ASSIGN(TestBrowserContextConfigurableIncognito);
+};
+
+} // namespace
+
+const int kRenderProcessId = 42;
+const int64_t kPersistentNotificationId = 430;
+const int kNonPersistentNotificationId = 5400;
+
+const char kExampleTag[] = "example";
+const char kDifferentTag[] = "different";
+
+TEST(NotificationIdGeneratorTest, PersistentNotifications) {
+ TestBrowserContextConfigurableIncognito browser_context;
+ TestBrowserContext second_browser_context;
+
+ NotificationIdGenerator generator(&browser_context, kRenderProcessId);
+
+ NotificationIdGenerator different_browser_context_generator(
+ &second_browser_context, kRenderProcessId);
+ NotificationIdGenerator different_render_process_generator(
+ &browser_context, kRenderProcessId + 1);
+
+ GURL origin("https://example.com");
+ GURL different_origin("https://example.com:81");
+
+ // Notification ids are unique for persistent notifications given a browser
+ // context, incognito state, origin and either the tag when non-empty, or the
+ // persistent notification id when the tag is empty. The render process id
+ // does not matter, as the persistent notification ids are owned by the
+ // browser process orthogonal to the renderer that created the notification.
+
+ // Uniqueness of notification ids will be impacted by the browser context.
+ EXPECT_NE(
+ generator.GenerateForPersistentNotification(
+ origin, kExampleTag, kPersistentNotificationId),
+ different_browser_context_generator.GenerateForPersistentNotification(
+ origin, kExampleTag, kPersistentNotificationId));
+
+ EXPECT_NE(
+ generator.GenerateForPersistentNotification(
+ origin, "" /* tag */, kPersistentNotificationId),
+ different_browser_context_generator.GenerateForPersistentNotification(
+ origin, "" /* tag */, kPersistentNotificationId));
+
+ // Uniqueness of notification ids will be impacted by the fact whether the
+ // browser context is in Incognito mode.
+ EXPECT_FALSE(browser_context.IsOffTheRecord());
+ std::string normal_notification_id =
+ generator.GenerateForPersistentNotification(
+ origin, kExampleTag, kPersistentNotificationId);
+
+ browser_context.set_incognito(true);
+
+ EXPECT_TRUE(browser_context.IsOffTheRecord());
+ std::string incognito_notification_id =
+ generator.GenerateForPersistentNotification(
+ origin, kExampleTag, kPersistentNotificationId);
+
+ EXPECT_NE(normal_notification_id, incognito_notification_id);
+
+ browser_context.set_incognito(false);
+
+ // Uniqueness of notification ids does not depend on render process id that is
+ // creating the notification for persistent notifications.
+ EXPECT_EQ(
+ generator.GenerateForPersistentNotification(
+ origin, kExampleTag, kPersistentNotificationId),
+ different_render_process_generator.GenerateForPersistentNotification(
+ origin, kExampleTag, kPersistentNotificationId));
+
+ EXPECT_EQ(
+ generator.GenerateForPersistentNotification(
+ origin, "" /* tag */, kPersistentNotificationId),
+ different_render_process_generator.GenerateForPersistentNotification(
+ origin, "" /* tag */, kPersistentNotificationId));
+
+ // The origin of the notification will impact the generated notification id.
+ EXPECT_NE(
+ generator.GenerateForPersistentNotification(
+ origin, kExampleTag, kPersistentNotificationId),
+ generator.GenerateForPersistentNotification(
+ different_origin, kExampleTag, kPersistentNotificationId));
+
+ // The tag, when empty, will impact the generated notification id.
+ EXPECT_NE(
+ generator.GenerateForPersistentNotification(
+ origin, kExampleTag, kPersistentNotificationId),
+ generator.GenerateForPersistentNotification(
+ origin, kDifferentTag, kPersistentNotificationId));
+
+ // The persistent notification id will impact the generated notification id
+ // when the given tag is empty.
+ EXPECT_NE(
+ generator.GenerateForPersistentNotification(
+ origin, "" /* tag */, kPersistentNotificationId),
+ generator.GenerateForPersistentNotification(
+ origin, "" /* tag */, kPersistentNotificationId + 1));
+
+ // Using a numeric tag that could resemble a persistent notification id should
+ // not be equal to a notification without a tag, but with that id.
+ EXPECT_NE(
+ generator.GenerateForPersistentNotification(
+ origin,
+ base::IntToString(kPersistentNotificationId),
+ kPersistentNotificationId),
+ generator.GenerateForPersistentNotification(
+ origin, "" /* tag */, kPersistentNotificationId));
+
+ // Two notification ids given exactly the same information should be equal.
+ EXPECT_EQ(
+ generator.GenerateForPersistentNotification(
+ origin, kExampleTag, kPersistentNotificationId),
+ generator.GenerateForPersistentNotification(
+ origin, kExampleTag, kPersistentNotificationId));
+
+ EXPECT_EQ(
+ generator.GenerateForPersistentNotification(
+ origin, "" /* tag */, kPersistentNotificationId),
+ generator.GenerateForPersistentNotification(
+ origin, "" /* tag */, kPersistentNotificationId));
+}
+
+TEST(NotificationIdGeneratorTest, NonPersistentNotifications) {
+ TestBrowserContextConfigurableIncognito browser_context;
+ TestBrowserContext second_browser_context;
+
+ NotificationIdGenerator generator(&browser_context, kRenderProcessId);
+
+ NotificationIdGenerator different_browser_context_generator(
+ &second_browser_context, kRenderProcessId);
+ NotificationIdGenerator different_render_process_generator(
+ &browser_context, kRenderProcessId + 1);
+
+ GURL origin("https://example.com");
+ GURL different_origin("https://example.com:81");
+
+ // Notification ids are unique for non-persistent notifications given a
+ // browser context, incognito state, origin, render process id and either the
+ // tag when non-empty, or the non-persistent notification id when it is empty.
+
+ // Uniqueness of notification ids will be impacted by the browser context.
+ EXPECT_NE(
+ generator.GenerateForNonPersistentNotification(
+ origin, kExampleTag, kNonPersistentNotificationId),
+ different_browser_context_generator.GenerateForNonPersistentNotification(
+ origin, kExampleTag, kNonPersistentNotificationId));
+
+ EXPECT_NE(
+ generator.GenerateForNonPersistentNotification(
+ origin, "" /* tag */, kNonPersistentNotificationId),
+ different_browser_context_generator.GenerateForNonPersistentNotification(
+ origin, "" /* tag */, kNonPersistentNotificationId));
+
+ // Uniqueness of notification ids will be impacted by the fact whether the
+ // browser context is in Incognito mode.
+ EXPECT_FALSE(browser_context.IsOffTheRecord());
+ std::string normal_notification_id =
+ generator.GenerateForNonPersistentNotification(
+ origin, kExampleTag, kNonPersistentNotificationId);
+
+ browser_context.set_incognito(true);
+
+ EXPECT_TRUE(browser_context.IsOffTheRecord());
+ std::string incognito_notification_id =
+ generator.GenerateForNonPersistentNotification(
+ origin, kExampleTag, kNonPersistentNotificationId);
+
+ EXPECT_NE(normal_notification_id, incognito_notification_id);
+
+ browser_context.set_incognito(false);
+
+ // Uniqueness of notification ids does depend on render process id, as each
+ // of the render processes will generate their own incrementing id.
+ EXPECT_NE(
+ generator.GenerateForNonPersistentNotification(
+ origin, kExampleTag, kNonPersistentNotificationId),
+ different_render_process_generator.GenerateForNonPersistentNotification(
+ origin, kExampleTag, kNonPersistentNotificationId));
+
+ EXPECT_NE(
+ generator.GenerateForNonPersistentNotification(
+ origin, "" /* tag */, kNonPersistentNotificationId),
+ different_render_process_generator.GenerateForNonPersistentNotification(
+ origin, "" /* tag */, kNonPersistentNotificationId));
+
+ // The origin of the notification will impact the generated notification id.
+ EXPECT_NE(
+ generator.GenerateForNonPersistentNotification(
+ origin, kExampleTag, kNonPersistentNotificationId),
+ generator.GenerateForNonPersistentNotification(
+ different_origin, kExampleTag, kNonPersistentNotificationId));
+
+ // The tag, when empty, will impact the generated notification id.
+ EXPECT_NE(
+ generator.GenerateForNonPersistentNotification(
+ origin, kExampleTag, kNonPersistentNotificationId),
+ generator.GenerateForNonPersistentNotification(
+ origin, kDifferentTag, kNonPersistentNotificationId));
+
+ // The non-persistent notification id will impact the generated notification
+ // id when the given tag is empty.
+ EXPECT_NE(
+ generator.GenerateForNonPersistentNotification(
+ origin, "" /* tag */, kNonPersistentNotificationId),
+ generator.GenerateForNonPersistentNotification(
+ origin, "" /* tag */, kNonPersistentNotificationId + 1));
+
+ // Using a numeric tag that could resemble a non-persistent notification id
+ // should not be equal to a notification without a tag, but with that id.
+ EXPECT_NE(
+ generator.GenerateForNonPersistentNotification(
+ origin,
+ base::IntToString(kNonPersistentNotificationId),
+ kNonPersistentNotificationId),
+ generator.GenerateForNonPersistentNotification(
+ origin, "" /* tag */, kNonPersistentNotificationId));
+
+ // Two notification ids given exactly the same information should be equal.
+ EXPECT_EQ(
+ generator.GenerateForNonPersistentNotification(
+ origin, kExampleTag, kNonPersistentNotificationId),
+ generator.GenerateForNonPersistentNotification(
+ origin, kExampleTag, kNonPersistentNotificationId));
+
+ EXPECT_EQ(
+ generator.GenerateForNonPersistentNotification(
+ origin, "" /* tag */, kNonPersistentNotificationId),
+ generator.GenerateForNonPersistentNotification(
+ origin, "" /* tag */, kNonPersistentNotificationId));
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698