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

Side by Side Diff: chrome/browser/chromeos/net/network_portal_detector_notification_unittest.cc

Issue 171423005: Added in-session captive portal notification. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix. Created 6 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/command_line.h"
6 #include "chrome/browser/chromeos/net/network_portal_detector_notification.h"
7 #include "chromeos/chromeos_switches.h"
8 #include "chromeos/network/network_state.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/message_center/message_center.h"
11 #include "ui/message_center/message_center_observer.h"
12
13 using message_center::MessageCenter;
14
15 namespace chromeos {
16
17 namespace {
18
19 const char* kNotificationId =
20 NetworkPortalDetectorNotification::kNotificationId;
21
22 bool HasNotification() {
23 return MessageCenter::Get()->HasNotification(kNotificationId);
24 }
25
26 class NotificationObserver : public message_center::MessageCenterObserver {
27 public:
28 NotificationObserver() : add_count_(0), remove_count_(0), update_count_(0) {}
29
30 // Overridden from message_center::MessageCenterObserver:
31 virtual void OnNotificationAdded(
32 const std::string& notification_id) OVERRIDE {
33 if (notification_id == kNotificationId)
34 ++add_count_;
35 }
36
37 virtual void OnNotificationRemoved(const std::string& notification_id,
38 bool /* by_user */) OVERRIDE {
39 if (notification_id == kNotificationId)
40 ++remove_count_;
41 }
42
43 virtual void OnNotificationUpdated(
44 const std::string& notification_id) OVERRIDE {
45 if (notification_id == kNotificationId)
46 ++update_count_;
47 }
48
49 unsigned add_count() const { return add_count_; }
oshima 2014/02/19 18:59:41 size_t
ygorshenin1 2014/02/20 16:31:39 size_t values are usually arch-dependent sizes of
50 unsigned remove_count() const { return remove_count_; }
51 unsigned update_count() const { return update_count_; }
52
53 private:
54 unsigned add_count_;
55 unsigned remove_count_;
56 unsigned update_count_;
oshima 2014/02/19 18:59:41 DISALLOW_COPY_AND_ASSIGN
ygorshenin1 2014/02/20 16:31:39 Done.
57 };
58
59 } // namespace
60
61 class NetworkPortalDetectorNotificationTest : public testing::Test {
62 public:
63 NetworkPortalDetectorNotificationTest() {}
64 virtual ~NetworkPortalDetectorNotificationTest() {}
65
66 virtual void SetUp() OVERRIDE {
67 CommandLine* cl = CommandLine::ForCurrentProcess();
68 cl->AppendSwitch(switches::kEnableNetworkPortalNotification);
69 MessageCenter::Initialize();
70 }
71
72 virtual void TearDown() OVERRIDE { MessageCenter::Shutdown(); }
73
74 void OnPortalDetectionCompleted(
75 const NetworkState* network,
76 const NetworkPortalDetector::CaptivePortalState& state) {
77 notification_.OnPortalDetectionCompleted(network, state);
78 }
79
80 private:
81 NetworkPortalDetectorNotification notification_;
82
83 DISALLOW_COPY_AND_ASSIGN(NetworkPortalDetectorNotificationTest);
84 };
85
86 TEST_F(NetworkPortalDetectorNotificationTest, NetworkStateChanged) {
87 NetworkState wifi("wifi");
88 NetworkPortalDetector::CaptivePortalState wifi_state;
89
90 // Notification is not displayed for online state.
91 wifi_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE;
92 wifi_state.response_code = 204;
93 OnPortalDetectionCompleted(&wifi, wifi_state);
94 ASSERT_FALSE(HasNotification());
95
96 // Notification is displayed for portal state
97 wifi_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL;
98 wifi_state.response_code = 200;
99 OnPortalDetectionCompleted(&wifi, wifi_state);
100 ASSERT_TRUE(HasNotification());
101
102 // Notification is closed for online state.
103 wifi_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE;
104 wifi_state.response_code = 204;
105 OnPortalDetectionCompleted(&wifi, wifi_state);
106 ASSERT_FALSE(HasNotification());
107 }
108
109 TEST_F(NetworkPortalDetectorNotificationTest, NetworkChanged) {
110 NetworkState wifi1("wifi1");
111 NetworkPortalDetector::CaptivePortalState wifi1_state;
112 wifi1_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL;
113 wifi1_state.response_code = 200;
114 OnPortalDetectionCompleted(&wifi1, wifi1_state);
115 ASSERT_TRUE(HasNotification());
116
117 MessageCenter::Get()->RemoveNotification(kNotificationId, true /* by_user */);
118 ASSERT_FALSE(HasNotification());
119
120 // User already closed notification about portal state for this network,
121 // so notification shouldn't be displayed second time.
122 OnPortalDetectionCompleted(&wifi1, wifi1_state);
123 ASSERT_FALSE(HasNotification());
124
125 NetworkState wifi2("wifi2");
126 NetworkPortalDetector::CaptivePortalState wifi2_state;
127 wifi2_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE;
128 wifi2_state.response_code = 204;
129
130 // Second network is in online state, so there shouldn't be any
131 // notifications.
132 OnPortalDetectionCompleted(&wifi2, wifi2_state);
133 ASSERT_FALSE(HasNotification());
134
135 // User switches back to the first network, so notification should
136 // be displayed.
137 OnPortalDetectionCompleted(&wifi1, wifi1_state);
138 ASSERT_TRUE(HasNotification());
139 }
140
141 TEST_F(NetworkPortalDetectorNotificationTest, NotificationUpdated) {
142 NotificationObserver observer;
143 MessageCenter::Get()->AddObserver(&observer);
Jun Mukai 2014/02/19 19:17:25 I personally like to put this 'AddObserver/RemoveO
ygorshenin1 2014/02/20 16:31:39 Done.
144
145 NetworkPortalDetector::CaptivePortalState portal_state;
146 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL;
147 portal_state.response_code = 200;
148
149 // First network is behind a captive portal, so notification should
150 // be displayed.
151 NetworkState wifi1("wifi1");
152 OnPortalDetectionCompleted(&wifi1, portal_state);
153 ASSERT_TRUE(HasNotification());
154 EXPECT_EQ(1u, observer.add_count());
155 EXPECT_EQ(0u, observer.remove_count());
156 EXPECT_EQ(0u, observer.update_count());
157
158 // Second network is also behind a captive portal, so notification
159 // should be updated.
160 NetworkState wifi2("wifi2");
161 OnPortalDetectionCompleted(&wifi2, portal_state);
162 ASSERT_TRUE(HasNotification());
163 EXPECT_EQ(1u, observer.add_count());
164 EXPECT_EQ(0u, observer.remove_count());
165 EXPECT_EQ(1u, observer.update_count());
166
167 // User closes the notification.
168 MessageCenter::Get()->RemoveNotification(kNotificationId, true /* by_user */);
169 ASSERT_FALSE(HasNotification());
170 EXPECT_EQ(1u, observer.add_count());
171 EXPECT_EQ(1u, observer.remove_count());
172 EXPECT_EQ(1u, observer.update_count());
173
174 // Portal detector notified that second network is still behind captive
175 // portal, but user already closed the notification, so there should
176 // not be any notifications.
177 OnPortalDetectionCompleted(&wifi2, portal_state);
178 ASSERT_FALSE(HasNotification());
179 EXPECT_EQ(1u, observer.add_count());
180 EXPECT_EQ(1u, observer.remove_count());
181 EXPECT_EQ(1u, observer.update_count());
182
183 // Network was switched (by shill or by user) to wifi1. Notification
184 // should be displayed.
185 OnPortalDetectionCompleted(&wifi1, portal_state);
186 ASSERT_TRUE(HasNotification());
187 EXPECT_EQ(2u, observer.add_count());
188 EXPECT_EQ(1u, observer.remove_count());
189 EXPECT_EQ(1u, observer.update_count());
190
191 MessageCenter::Get()->RemoveObserver(&observer);
192 }
193
194 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698