Chromium Code Reviews| OLD | NEW |
|---|---|
| (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_notification_controller.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 NetworkPortalNotificationController::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_; } | |
| 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_; | |
| 57 | |
| 58 DISALLOW_COPY_AND_ASSIGN(NotificationObserver); | |
| 59 }; | |
| 60 | |
| 61 } // namespace | |
| 62 | |
| 63 class NetworkPortalNotificationControllerTest : public testing::Test { | |
| 64 public: | |
| 65 NetworkPortalNotificationControllerTest() {} | |
| 66 virtual ~NetworkPortalNotificationControllerTest() {} | |
| 67 | |
| 68 virtual void SetUp() OVERRIDE { | |
| 69 CommandLine* cl = CommandLine::ForCurrentProcess(); | |
| 70 cl->AppendSwitch(switches::kEnableNetworkPortalNotification); | |
| 71 MessageCenter::Initialize(); | |
| 72 MessageCenter::Get()->AddObserver(&observer_); | |
|
Jun Mukai
2014/02/20 18:30:15
What I wanted to say is putting into constructor a
oshima
2014/02/20 19:00:54
I still think it's good practice to use SetUp/Tear
| |
| 73 } | |
| 74 | |
| 75 virtual void TearDown() OVERRIDE { | |
| 76 MessageCenter::Get()->RemoveObserver(&observer_); | |
| 77 MessageCenter::Shutdown(); | |
| 78 } | |
| 79 | |
| 80 protected: | |
| 81 void OnPortalDetectionCompleted( | |
| 82 const NetworkState* network, | |
| 83 const NetworkPortalDetector::CaptivePortalState& state) { | |
| 84 controller_.OnPortalDetectionCompleted(network, state); | |
| 85 } | |
| 86 | |
| 87 NotificationObserver& observer() { return observer_; } | |
| 88 | |
| 89 private: | |
| 90 NetworkPortalNotificationController controller_; | |
| 91 NotificationObserver observer_; | |
| 92 | |
| 93 DISALLOW_COPY_AND_ASSIGN(NetworkPortalNotificationControllerTest); | |
| 94 }; | |
| 95 | |
| 96 TEST_F(NetworkPortalNotificationControllerTest, NetworkStateChanged) { | |
| 97 NetworkState wifi("wifi"); | |
| 98 NetworkPortalDetector::CaptivePortalState wifi_state; | |
| 99 | |
| 100 // Notification is not displayed for online state. | |
| 101 wifi_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; | |
| 102 wifi_state.response_code = 204; | |
| 103 OnPortalDetectionCompleted(&wifi, wifi_state); | |
| 104 ASSERT_FALSE(HasNotification()); | |
| 105 | |
| 106 // Notification is displayed for portal state | |
| 107 wifi_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; | |
| 108 wifi_state.response_code = 200; | |
| 109 OnPortalDetectionCompleted(&wifi, wifi_state); | |
| 110 ASSERT_TRUE(HasNotification()); | |
| 111 | |
| 112 // Notification is closed for online state. | |
| 113 wifi_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; | |
| 114 wifi_state.response_code = 204; | |
| 115 OnPortalDetectionCompleted(&wifi, wifi_state); | |
| 116 ASSERT_FALSE(HasNotification()); | |
| 117 } | |
| 118 | |
| 119 TEST_F(NetworkPortalNotificationControllerTest, NetworkChanged) { | |
| 120 NetworkState wifi1("wifi1"); | |
| 121 NetworkPortalDetector::CaptivePortalState wifi1_state; | |
| 122 wifi1_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; | |
| 123 wifi1_state.response_code = 200; | |
| 124 OnPortalDetectionCompleted(&wifi1, wifi1_state); | |
| 125 ASSERT_TRUE(HasNotification()); | |
| 126 | |
| 127 MessageCenter::Get()->RemoveNotification(kNotificationId, true /* by_user */); | |
| 128 ASSERT_FALSE(HasNotification()); | |
| 129 | |
| 130 // User already closed notification about portal state for this network, | |
| 131 // so notification shouldn't be displayed second time. | |
| 132 OnPortalDetectionCompleted(&wifi1, wifi1_state); | |
| 133 ASSERT_FALSE(HasNotification()); | |
| 134 | |
| 135 NetworkState wifi2("wifi2"); | |
| 136 NetworkPortalDetector::CaptivePortalState wifi2_state; | |
| 137 wifi2_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; | |
| 138 wifi2_state.response_code = 204; | |
| 139 | |
| 140 // Second network is in online state, so there shouldn't be any | |
| 141 // notifications. | |
| 142 OnPortalDetectionCompleted(&wifi2, wifi2_state); | |
| 143 ASSERT_FALSE(HasNotification()); | |
| 144 | |
| 145 // User switches back to the first network, so notification should | |
| 146 // be displayed. | |
| 147 OnPortalDetectionCompleted(&wifi1, wifi1_state); | |
| 148 ASSERT_TRUE(HasNotification()); | |
| 149 } | |
| 150 | |
| 151 TEST_F(NetworkPortalNotificationControllerTest, NotificationUpdated) { | |
| 152 NetworkPortalDetector::CaptivePortalState portal_state; | |
| 153 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; | |
| 154 portal_state.response_code = 200; | |
| 155 | |
| 156 // First network is behind a captive portal, so notification should | |
| 157 // be displayed. | |
| 158 NetworkState wifi1("wifi1"); | |
| 159 OnPortalDetectionCompleted(&wifi1, portal_state); | |
| 160 ASSERT_TRUE(HasNotification()); | |
| 161 EXPECT_EQ(1u, observer().add_count()); | |
| 162 EXPECT_EQ(0u, observer().remove_count()); | |
| 163 EXPECT_EQ(0u, observer().update_count()); | |
| 164 | |
| 165 // Second network is also behind a captive portal, so notification | |
| 166 // should be updated. | |
| 167 NetworkState wifi2("wifi2"); | |
| 168 OnPortalDetectionCompleted(&wifi2, portal_state); | |
| 169 ASSERT_TRUE(HasNotification()); | |
| 170 EXPECT_EQ(1u, observer().add_count()); | |
| 171 EXPECT_EQ(0u, observer().remove_count()); | |
| 172 EXPECT_EQ(1u, observer().update_count()); | |
| 173 | |
| 174 // User closes the notification. | |
| 175 MessageCenter::Get()->RemoveNotification(kNotificationId, true /* by_user */); | |
| 176 ASSERT_FALSE(HasNotification()); | |
| 177 EXPECT_EQ(1u, observer().add_count()); | |
| 178 EXPECT_EQ(1u, observer().remove_count()); | |
| 179 EXPECT_EQ(1u, observer().update_count()); | |
| 180 | |
| 181 // Portal detector notified that second network is still behind captive | |
| 182 // portal, but user already closed the notification, so there should | |
| 183 // not be any notifications. | |
| 184 OnPortalDetectionCompleted(&wifi2, portal_state); | |
| 185 ASSERT_FALSE(HasNotification()); | |
| 186 EXPECT_EQ(1u, observer().add_count()); | |
| 187 EXPECT_EQ(1u, observer().remove_count()); | |
| 188 EXPECT_EQ(1u, observer().update_count()); | |
| 189 | |
| 190 // Network was switched (by shill or by user) to wifi1. Notification | |
| 191 // should be displayed. | |
| 192 OnPortalDetectionCompleted(&wifi1, portal_state); | |
| 193 ASSERT_TRUE(HasNotification()); | |
| 194 EXPECT_EQ(2u, observer().add_count()); | |
| 195 EXPECT_EQ(1u, observer().remove_count()); | |
| 196 EXPECT_EQ(1u, observer().update_count()); | |
| 197 } | |
| 198 | |
| 199 } // namespace chromeos | |
| OLD | NEW |