blob: 1e71e64251d67c00633f5f3facced4b7290c57a1 [file] [log] [blame]
[email protected]652e16d2011-03-07 03:53:001// Copyright (c) 2011 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit09911bf2008-07-26 23:55:294
[email protected]ad50def52011-10-19 23:17:075#include "content/browser/notification_service_impl.h"
[email protected]1a816392012-10-30 00:30:096
[email protected]6c2381d2011-10-19 02:52:537#include "content/public/browser/notification_observer.h"
8#include "content/public/browser/notification_registrar.h"
[email protected]0d6e9bd2011-10-18 04:29:169#include "content/public/browser/notification_types.h"
initial.commit09911bf2008-07-26 23:55:2910#include "testing/gtest/include/gtest/gtest.h"
11
[email protected]1a816392012-10-30 00:30:0912namespace content {
13
initial.commit09911bf2008-07-26 23:55:2914namespace {
15
[email protected]31832fb2009-05-22 23:46:2616// Bogus class to act as a NotificationSource for the messages.
17class TestSource {};
initial.commit09911bf2008-07-26 23:55:2918
[email protected]1a816392012-10-30 00:30:0919class TestObserver : public NotificationObserver {
20 public:
initial.commit09911bf2008-07-26 23:55:2921 TestObserver() : notification_count_(0) {}
22
[email protected]1a816392012-10-30 00:30:0923 int notification_count() const { return notification_count_; }
initial.commit09911bf2008-07-26 23:55:2924
dchengc2282aa2014-10-21 12:07:5825 void Observe(int type,
26 const NotificationSource& source,
27 const NotificationDetails& details) override {
initial.commit09911bf2008-07-26 23:55:2928 ++notification_count_;
29 }
30
[email protected]1a816392012-10-30 00:30:0931 private:
initial.commit09911bf2008-07-26 23:55:2932 int notification_count_;
33};
34
[email protected]dd98f392013-02-04 13:03:2235const int kNotification1 = 1;
36const int kNotification2 = 2;
37
initial.commit09911bf2008-07-26 23:55:2938} // namespace
39
[email protected]d9c2e512012-10-25 18:54:3640
[email protected]ad50def52011-10-19 23:17:0741class NotificationServiceImplTest : public testing::Test {
[email protected]31832fb2009-05-22 23:46:2642 protected:
[email protected]1a816392012-10-30 00:30:0943 NotificationRegistrar registrar_;
[email protected]31832fb2009-05-22 23:46:2644};
45
[email protected]ad50def52011-10-19 23:17:0746TEST_F(NotificationServiceImplTest, Basic) {
initial.commit09911bf2008-07-26 23:55:2947 TestSource test_source;
48 TestSource other_source;
49
50 // Check the equality operators defined for NotificationSource
[email protected]1a816392012-10-30 00:30:0951 EXPECT_TRUE(Source<TestSource>(&test_source) ==
52 Source<TestSource>(&test_source));
53 EXPECT_TRUE(Source<TestSource>(&test_source) !=
54 Source<TestSource>(&other_source));
initial.commit09911bf2008-07-26 23:55:2955
56 TestObserver all_types_all_sources;
57 TestObserver idle_all_sources;
58 TestObserver all_types_test_source;
59 TestObserver idle_test_source;
60
initial.commit09911bf2008-07-26 23:55:2961 // Make sure it doesn't freak out when there are no observers.
[email protected]1a816392012-10-30 00:30:0962 NotificationService* service = NotificationService::current();
[email protected]dd98f392013-02-04 13:03:2263 service->Notify(kNotification1,
[email protected]1a816392012-10-30 00:30:0964 Source<TestSource>(&test_source),
65 NotificationService::NoDetails());
initial.commit09911bf2008-07-26 23:55:2966
[email protected]1a816392012-10-30 00:30:0967 registrar_.Add(&all_types_all_sources, NOTIFICATION_ALL,
68 NotificationService::AllSources());
[email protected]dd98f392013-02-04 13:03:2269 registrar_.Add(&idle_all_sources, kNotification1,
[email protected]1a816392012-10-30 00:30:0970 NotificationService::AllSources());
71 registrar_.Add(&all_types_test_source, NOTIFICATION_ALL,
72 Source<TestSource>(&test_source));
[email protected]dd98f392013-02-04 13:03:2273 registrar_.Add(&idle_test_source, kNotification1,
[email protected]1a816392012-10-30 00:30:0974 Source<TestSource>(&test_source));
initial.commit09911bf2008-07-26 23:55:2975
76 EXPECT_EQ(0, all_types_all_sources.notification_count());
77 EXPECT_EQ(0, idle_all_sources.notification_count());
78 EXPECT_EQ(0, all_types_test_source.notification_count());
79 EXPECT_EQ(0, idle_test_source.notification_count());
80
[email protected]dd98f392013-02-04 13:03:2281 service->Notify(kNotification1,
[email protected]1a816392012-10-30 00:30:0982 Source<TestSource>(&test_source),
83 NotificationService::NoDetails());
initial.commit09911bf2008-07-26 23:55:2984
85 EXPECT_EQ(1, all_types_all_sources.notification_count());
86 EXPECT_EQ(1, idle_all_sources.notification_count());
87 EXPECT_EQ(1, all_types_test_source.notification_count());
88 EXPECT_EQ(1, idle_test_source.notification_count());
89
[email protected]dd98f392013-02-04 13:03:2290 service->Notify(kNotification2,
[email protected]1a816392012-10-30 00:30:0991 Source<TestSource>(&test_source),
92 NotificationService::NoDetails());
initial.commit09911bf2008-07-26 23:55:2993
94 EXPECT_EQ(2, all_types_all_sources.notification_count());
95 EXPECT_EQ(1, idle_all_sources.notification_count());
96 EXPECT_EQ(2, all_types_test_source.notification_count());
97 EXPECT_EQ(1, idle_test_source.notification_count());
98
[email protected]dd98f392013-02-04 13:03:2299 service->Notify(kNotification1,
[email protected]1a816392012-10-30 00:30:09100 Source<TestSource>(&other_source),
101 NotificationService::NoDetails());
initial.commit09911bf2008-07-26 23:55:29102
103 EXPECT_EQ(3, all_types_all_sources.notification_count());
104 EXPECT_EQ(2, idle_all_sources.notification_count());
105 EXPECT_EQ(2, all_types_test_source.notification_count());
106 EXPECT_EQ(1, idle_test_source.notification_count());
107
[email protected]dd98f392013-02-04 13:03:22108 service->Notify(kNotification2,
[email protected]1a816392012-10-30 00:30:09109 Source<TestSource>(&other_source),
110 NotificationService::NoDetails());
initial.commit09911bf2008-07-26 23:55:29111
112 EXPECT_EQ(4, all_types_all_sources.notification_count());
113 EXPECT_EQ(2, idle_all_sources.notification_count());
114 EXPECT_EQ(2, all_types_test_source.notification_count());
115 EXPECT_EQ(1, idle_test_source.notification_count());
116
117 // Try send with NULL source.
[email protected]dd98f392013-02-04 13:03:22118 service->Notify(kNotification1,
[email protected]1a816392012-10-30 00:30:09119 NotificationService::AllSources(),
120 NotificationService::NoDetails());
initial.commit09911bf2008-07-26 23:55:29121
122 EXPECT_EQ(5, all_types_all_sources.notification_count());
123 EXPECT_EQ(3, idle_all_sources.notification_count());
124 EXPECT_EQ(2, all_types_test_source.notification_count());
125 EXPECT_EQ(1, idle_test_source.notification_count());
126
[email protected]4906598a2009-05-22 23:01:49127 registrar_.RemoveAll();
initial.commit09911bf2008-07-26 23:55:29128
[email protected]dd98f392013-02-04 13:03:22129 service->Notify(kNotification1,
[email protected]1a816392012-10-30 00:30:09130 Source<TestSource>(&test_source),
131 NotificationService::NoDetails());
initial.commit09911bf2008-07-26 23:55:29132
133 EXPECT_EQ(5, all_types_all_sources.notification_count());
134 EXPECT_EQ(3, idle_all_sources.notification_count());
135 EXPECT_EQ(2, all_types_test_source.notification_count());
136 EXPECT_EQ(1, idle_test_source.notification_count());
initial.commit09911bf2008-07-26 23:55:29137}
138
[email protected]ad50def52011-10-19 23:17:07139TEST_F(NotificationServiceImplTest, MultipleRegistration) {
initial.commit09911bf2008-07-26 23:55:29140 TestSource test_source;
141
142 TestObserver idle_test_source;
143
[email protected]1a816392012-10-30 00:30:09144 NotificationService* service = NotificationService::current();
initial.commit09911bf2008-07-26 23:55:29145
[email protected]dd98f392013-02-04 13:03:22146 registrar_.Add(&idle_test_source, kNotification1,
[email protected]1a816392012-10-30 00:30:09147 Source<TestSource>(&test_source));
148 registrar_.Add(&idle_test_source, NOTIFICATION_ALL,
149 Source<TestSource>(&test_source));
initial.commit09911bf2008-07-26 23:55:29150
[email protected]dd98f392013-02-04 13:03:22151 service->Notify(kNotification1,
[email protected]1a816392012-10-30 00:30:09152 Source<TestSource>(&test_source),
153 NotificationService::NoDetails());
initial.commit09911bf2008-07-26 23:55:29154 EXPECT_EQ(2, idle_test_source.notification_count());
155
[email protected]dd98f392013-02-04 13:03:22156 registrar_.Remove(&idle_test_source, kNotification1,
[email protected]1a816392012-10-30 00:30:09157 Source<TestSource>(&test_source));
initial.commit09911bf2008-07-26 23:55:29158
[email protected]dd98f392013-02-04 13:03:22159 service->Notify(kNotification1,
[email protected]1a816392012-10-30 00:30:09160 Source<TestSource>(&test_source),
161 NotificationService::NoDetails());
initial.commit09911bf2008-07-26 23:55:29162 EXPECT_EQ(3, idle_test_source.notification_count());
163
[email protected]1a816392012-10-30 00:30:09164 registrar_.Remove(&idle_test_source, NOTIFICATION_ALL,
165 Source<TestSource>(&test_source));
initial.commit09911bf2008-07-26 23:55:29166
[email protected]dd98f392013-02-04 13:03:22167 service->Notify(kNotification1,
[email protected]1a816392012-10-30 00:30:09168 Source<TestSource>(&test_source),
169 NotificationService::NoDetails());
initial.commit09911bf2008-07-26 23:55:29170 EXPECT_EQ(3, idle_test_source.notification_count());
171}
[email protected]1a816392012-10-30 00:30:09172
173} // namespace content