| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014, Google Inc. All rights reserved. | 2 * Copyright (c) 2014, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #include "core/page/NetworkStateNotifier.h" | 31 #include "platform/network/NetworkStateNotifier.h" |
| 32 | 32 |
| 33 #include "core/dom/Document.h" | 33 #include "platform/scheduler/test/fake_web_task_runner.h" |
| 34 #include "core/dom/TaskRunnerHelper.h" | |
| 35 #include "platform/testing/UnitTestHelpers.h" | 34 #include "platform/testing/UnitTestHelpers.h" |
| 36 #include "public/platform/Platform.h" | 35 #include "public/platform/Platform.h" |
| 37 #include "public/platform/WebConnectionType.h" | 36 #include "public/platform/WebConnectionType.h" |
| 38 #include "public/platform/WebThread.h" | 37 #include "public/platform/WebThread.h" |
| 39 #include "testing/gtest/include/gtest/gtest.h" | 38 #include "testing/gtest/include/gtest/gtest.h" |
| 40 #include "wtf/Functional.h" | 39 #include "wtf/Functional.h" |
| 41 | 40 |
| 42 namespace blink { | 41 namespace blink { |
| 43 | 42 |
| 43 using scheduler::FakeWebTaskRunner; |
| 44 |
| 44 namespace { | 45 namespace { |
| 45 const double kNoneMaxBandwidthMbps = 0.0; | 46 const double kNoneMaxBandwidthMbps = 0.0; |
| 46 const double kBluetoothMaxBandwidthMbps = 1.0; | 47 const double kBluetoothMaxBandwidthMbps = 1.0; |
| 47 const double kEthernetMaxBandwidthMbps = 2.0; | 48 const double kEthernetMaxBandwidthMbps = 2.0; |
| 48 } | 49 } |
| 49 | 50 |
| 50 class StateObserver : public NetworkStateNotifier::NetworkStateObserver { | 51 class StateObserver : public NetworkStateNotifier::NetworkStateObserver { |
| 51 public: | 52 public: |
| 52 StateObserver() | 53 StateObserver() |
| 53 : m_observedType(WebConnectionTypeNone), | 54 : m_observedType(WebConnectionTypeNone), |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 std::unique_ptr<WTF::Closure> m_closure; | 87 std::unique_ptr<WTF::Closure> m_closure; |
| 87 WebConnectionType m_observedType; | 88 WebConnectionType m_observedType; |
| 88 double m_observedMaxBandwidthMbps; | 89 double m_observedMaxBandwidthMbps; |
| 89 bool m_observedOnLineState; | 90 bool m_observedOnLineState; |
| 90 int m_callbackCount; | 91 int m_callbackCount; |
| 91 }; | 92 }; |
| 92 | 93 |
| 93 class NetworkStateNotifierTest : public ::testing::Test { | 94 class NetworkStateNotifierTest : public ::testing::Test { |
| 94 public: | 95 public: |
| 95 NetworkStateNotifierTest() | 96 NetworkStateNotifierTest() |
| 96 : m_document(Document::create()), m_document2(Document::create()) { | 97 : m_taskRunner(adoptRef(new FakeWebTaskRunner())), |
| 98 m_taskRunner2(adoptRef(new FakeWebTaskRunner())) { |
| 97 // Initialize connection, so that future calls to setWebConnection issue | 99 // Initialize connection, so that future calls to setWebConnection issue |
| 98 // notifications. | 100 // notifications. |
| 99 m_notifier.setWebConnection(WebConnectionTypeUnknown, 0.0); | 101 m_notifier.setWebConnection(WebConnectionTypeUnknown, 0.0); |
| 100 m_notifier.setOnLine(false); | 102 m_notifier.setOnLine(false); |
| 101 } | 103 } |
| 102 | 104 |
| 103 WebTaskRunner* getTaskRunner() { | 105 WebTaskRunner* getTaskRunner() { return m_taskRunner.get(); } |
| 104 return TaskRunnerHelper::get(TaskType::Networking, m_document.get()).get(); | 106 WebTaskRunner* getTaskRunner2() { return m_taskRunner2.get(); } |
| 105 } | |
| 106 | 107 |
| 107 WebTaskRunner* getTaskRunner2() { | 108 void TearDown() override { |
| 108 return TaskRunnerHelper::get(TaskType::Networking, m_document2.get()).get(); | 109 runPendingTasks(); |
| 110 m_taskRunner = nullptr; |
| 111 m_taskRunner2 = nullptr; |
| 109 } | 112 } |
| 110 | 113 |
| 111 protected: | 114 protected: |
| 115 void runPendingTasks() { |
| 116 m_taskRunner->runUntilIdle(); |
| 117 m_taskRunner2->runUntilIdle(); |
| 118 } |
| 119 |
| 112 void setConnection(WebConnectionType type, double maxBandwidthMbps) { | 120 void setConnection(WebConnectionType type, double maxBandwidthMbps) { |
| 113 m_notifier.setWebConnection(type, maxBandwidthMbps); | 121 m_notifier.setWebConnection(type, maxBandwidthMbps); |
| 114 testing::runPendingTasks(); | 122 runPendingTasks(); |
| 115 } | 123 } |
| 116 void setOnLine(bool onLine) { | 124 void setOnLine(bool onLine) { |
| 117 m_notifier.setOnLine(onLine); | 125 m_notifier.setOnLine(onLine); |
| 118 testing::runPendingTasks(); | 126 runPendingTasks(); |
| 119 } | 127 } |
| 120 | 128 |
| 121 void addObserverOnNotification(StateObserver* observer, | 129 void addObserverOnNotification(StateObserver* observer, |
| 122 StateObserver* observerToAdd) { | 130 StateObserver* observerToAdd) { |
| 123 observer->setNotificationCallback( | 131 observer->setNotificationCallback( |
| 124 bind(&NetworkStateNotifier::addConnectionObserver, | 132 bind(&NetworkStateNotifier::addConnectionObserver, |
| 125 WTF::unretained(&m_notifier), WTF::unretained(observerToAdd), | 133 WTF::unretained(&m_notifier), WTF::unretained(observerToAdd), |
| 126 WTF::unretained(getTaskRunner()))); | 134 WTF::unretained(getTaskRunner()))); |
| 127 } | 135 } |
| 128 | 136 |
| 129 void removeObserverOnNotification(StateObserver* observer, | 137 void removeObserverOnNotification(StateObserver* observer, |
| 130 StateObserver* observerToRemove) { | 138 StateObserver* observerToRemove) { |
| 131 observer->setNotificationCallback( | 139 observer->setNotificationCallback( |
| 132 bind(&NetworkStateNotifier::removeConnectionObserver, | 140 bind(&NetworkStateNotifier::removeConnectionObserver, |
| 133 WTF::unretained(&m_notifier), WTF::unretained(observerToRemove), | 141 WTF::unretained(&m_notifier), WTF::unretained(observerToRemove), |
| 134 WTF::unretained(getTaskRunner()))); | 142 WTF::unretained(getTaskRunner()))); |
| 135 } | 143 } |
| 136 | 144 |
| 137 bool verifyObservations(const StateObserver& observer, | 145 bool verifyObservations(const StateObserver& observer, |
| 138 WebConnectionType type, | 146 WebConnectionType type, |
| 139 double maxBandwidthMbps) { | 147 double maxBandwidthMbps) { |
| 140 EXPECT_EQ(observer.observedType(), type); | 148 EXPECT_EQ(observer.observedType(), type); |
| 141 EXPECT_EQ(observer.observedMaxBandwidth(), maxBandwidthMbps); | 149 EXPECT_EQ(observer.observedMaxBandwidth(), maxBandwidthMbps); |
| 142 return observer.observedType() == type && | 150 return observer.observedType() == type && |
| 143 observer.observedMaxBandwidth() == maxBandwidthMbps; | 151 observer.observedMaxBandwidth() == maxBandwidthMbps; |
| 144 } | 152 } |
| 145 | 153 |
| 146 Persistent<Document> m_document; | 154 RefPtr<FakeWebTaskRunner> m_taskRunner; |
| 147 Persistent<Document> m_document2; | 155 RefPtr<FakeWebTaskRunner> m_taskRunner2; |
| 148 NetworkStateNotifier m_notifier; | 156 NetworkStateNotifier m_notifier; |
| 149 }; | 157 }; |
| 150 | 158 |
| 151 TEST_F(NetworkStateNotifierTest, AddObserver) { | 159 TEST_F(NetworkStateNotifierTest, AddObserver) { |
| 152 StateObserver observer; | 160 StateObserver observer; |
| 153 m_notifier.addConnectionObserver(&observer, getTaskRunner()); | 161 m_notifier.addConnectionObserver(&observer, getTaskRunner()); |
| 154 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeNone, | 162 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeNone, |
| 155 kNoneMaxBandwidthMbps)); | 163 kNoneMaxBandwidthMbps)); |
| 156 | 164 |
| 157 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 165 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| 158 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeBluetooth, | 166 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeBluetooth, |
| 159 kBluetoothMaxBandwidthMbps)); | 167 kBluetoothMaxBandwidthMbps)); |
| 160 EXPECT_EQ(observer.callbackCount(), 1); | 168 EXPECT_EQ(observer.callbackCount(), 1); |
| 169 m_notifier.removeConnectionObserver(&observer, getTaskRunner()); |
| 161 } | 170 } |
| 162 | 171 |
| 163 TEST_F(NetworkStateNotifierTest, RemoveObserver) { | 172 TEST_F(NetworkStateNotifierTest, RemoveObserver) { |
| 164 StateObserver observer1, observer2; | 173 StateObserver observer1, observer2; |
| 165 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); | 174 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); |
| 166 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); | 175 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); |
| 167 m_notifier.addConnectionObserver(&observer2, getTaskRunner()); | 176 m_notifier.addConnectionObserver(&observer2, getTaskRunner()); |
| 168 | 177 |
| 169 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 178 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| 170 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeNone, | 179 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeNone, |
| 171 kNoneMaxBandwidthMbps)); | 180 kNoneMaxBandwidthMbps)); |
| 172 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeBluetooth, | 181 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeBluetooth, |
| 173 kBluetoothMaxBandwidthMbps)); | 182 kBluetoothMaxBandwidthMbps)); |
| 183 m_notifier.removeConnectionObserver(&observer2, getTaskRunner()); |
| 174 } | 184 } |
| 175 | 185 |
| 176 TEST_F(NetworkStateNotifierTest, RemoveSoleObserver) { | 186 TEST_F(NetworkStateNotifierTest, RemoveSoleObserver) { |
| 177 StateObserver observer1; | 187 StateObserver observer1; |
| 178 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); | 188 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); |
| 179 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); | 189 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); |
| 180 | 190 |
| 181 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 191 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| 182 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeNone, | 192 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeNone, |
| 183 kNoneMaxBandwidthMbps)); | 193 kNoneMaxBandwidthMbps)); |
| 184 } | 194 } |
| 185 | 195 |
| 186 TEST_F(NetworkStateNotifierTest, AddObserverWhileNotifying) { | 196 TEST_F(NetworkStateNotifierTest, AddObserverWhileNotifying) { |
| 187 StateObserver observer1, observer2; | 197 StateObserver observer1, observer2; |
| 188 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); | 198 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); |
| 189 addObserverOnNotification(&observer1, &observer2); | 199 addObserverOnNotification(&observer1, &observer2); |
| 190 | 200 |
| 191 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 201 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| 192 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, | 202 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, |
| 193 kBluetoothMaxBandwidthMbps)); | 203 kBluetoothMaxBandwidthMbps)); |
| 194 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeBluetooth, | 204 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeBluetooth, |
| 195 kBluetoothMaxBandwidthMbps)); | 205 kBluetoothMaxBandwidthMbps)); |
| 206 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); |
| 207 m_notifier.removeConnectionObserver(&observer2, getTaskRunner()); |
| 196 } | 208 } |
| 197 | 209 |
| 198 TEST_F(NetworkStateNotifierTest, RemoveSoleObserverWhileNotifying) { | 210 TEST_F(NetworkStateNotifierTest, RemoveSoleObserverWhileNotifying) { |
| 199 StateObserver observer1; | 211 StateObserver observer1; |
| 200 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); | 212 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); |
| 201 removeObserverOnNotification(&observer1, &observer1); | 213 removeObserverOnNotification(&observer1, &observer1); |
| 202 | 214 |
| 203 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 215 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| 204 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, | 216 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, |
| 205 kBluetoothMaxBandwidthMbps)); | 217 kBluetoothMaxBandwidthMbps)); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 219 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, | 231 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, |
| 220 kBluetoothMaxBandwidthMbps)); | 232 kBluetoothMaxBandwidthMbps)); |
| 221 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeBluetooth, | 233 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeBluetooth, |
| 222 kBluetoothMaxBandwidthMbps)); | 234 kBluetoothMaxBandwidthMbps)); |
| 223 | 235 |
| 224 setConnection(WebConnectionTypeEthernet, kEthernetMaxBandwidthMbps); | 236 setConnection(WebConnectionTypeEthernet, kEthernetMaxBandwidthMbps); |
| 225 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, | 237 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, |
| 226 kBluetoothMaxBandwidthMbps)); | 238 kBluetoothMaxBandwidthMbps)); |
| 227 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeEthernet, | 239 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeEthernet, |
| 228 kEthernetMaxBandwidthMbps)); | 240 kEthernetMaxBandwidthMbps)); |
| 241 |
| 242 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); |
| 243 m_notifier.removeConnectionObserver(&observer2, getTaskRunner()); |
| 229 } | 244 } |
| 230 | 245 |
| 231 TEST_F(NetworkStateNotifierTest, RemovePastObserverWhileNotifying) { | 246 TEST_F(NetworkStateNotifierTest, RemovePastObserverWhileNotifying) { |
| 232 StateObserver observer1, observer2; | 247 StateObserver observer1, observer2; |
| 233 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); | 248 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); |
| 234 m_notifier.addConnectionObserver(&observer2, getTaskRunner()); | 249 m_notifier.addConnectionObserver(&observer2, getTaskRunner()); |
| 235 removeObserverOnNotification(&observer2, &observer1); | 250 removeObserverOnNotification(&observer2, &observer1); |
| 236 | 251 |
| 237 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 252 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| 238 EXPECT_EQ(observer1.observedType(), WebConnectionTypeBluetooth); | 253 EXPECT_EQ(observer1.observedType(), WebConnectionTypeBluetooth); |
| 239 EXPECT_EQ(observer2.observedType(), WebConnectionTypeBluetooth); | 254 EXPECT_EQ(observer2.observedType(), WebConnectionTypeBluetooth); |
| 240 | 255 |
| 241 setConnection(WebConnectionTypeEthernet, kEthernetMaxBandwidthMbps); | 256 setConnection(WebConnectionTypeEthernet, kEthernetMaxBandwidthMbps); |
| 242 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, | 257 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, |
| 243 kBluetoothMaxBandwidthMbps)); | 258 kBluetoothMaxBandwidthMbps)); |
| 244 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeEthernet, | 259 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeEthernet, |
| 245 kEthernetMaxBandwidthMbps)); | 260 kEthernetMaxBandwidthMbps)); |
| 261 |
| 262 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); |
| 263 m_notifier.removeConnectionObserver(&observer2, getTaskRunner()); |
| 246 } | 264 } |
| 247 | 265 |
| 248 TEST_F(NetworkStateNotifierTest, RemoveFutureObserverWhileNotifying) { | 266 TEST_F(NetworkStateNotifierTest, RemoveFutureObserverWhileNotifying) { |
| 249 StateObserver observer1, observer2, observer3; | 267 StateObserver observer1, observer2, observer3; |
| 250 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); | 268 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); |
| 251 m_notifier.addConnectionObserver(&observer2, getTaskRunner()); | 269 m_notifier.addConnectionObserver(&observer2, getTaskRunner()); |
| 252 m_notifier.addConnectionObserver(&observer3, getTaskRunner()); | 270 m_notifier.addConnectionObserver(&observer3, getTaskRunner()); |
| 253 removeObserverOnNotification(&observer1, &observer2); | 271 removeObserverOnNotification(&observer1, &observer2); |
| 254 | 272 |
| 255 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 273 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| 256 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, | 274 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, |
| 257 kBluetoothMaxBandwidthMbps)); | 275 kBluetoothMaxBandwidthMbps)); |
| 258 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeNone, | 276 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeNone, |
| 259 kNoneMaxBandwidthMbps)); | 277 kNoneMaxBandwidthMbps)); |
| 260 EXPECT_TRUE(verifyObservations(observer3, WebConnectionTypeBluetooth, | 278 EXPECT_TRUE(verifyObservations(observer3, WebConnectionTypeBluetooth, |
| 261 kBluetoothMaxBandwidthMbps)); | 279 kBluetoothMaxBandwidthMbps)); |
| 280 |
| 281 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); |
| 282 m_notifier.removeConnectionObserver(&observer2, getTaskRunner()); |
| 283 m_notifier.removeConnectionObserver(&observer3, getTaskRunner()); |
| 262 } | 284 } |
| 263 | 285 |
| 264 TEST_F(NetworkStateNotifierTest, MultipleContextsAddObserver) { | 286 TEST_F(NetworkStateNotifierTest, MultipleContextsAddObserver) { |
| 265 StateObserver observer1, observer2; | 287 StateObserver observer1, observer2; |
| 266 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); | 288 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); |
| 267 m_notifier.addConnectionObserver(&observer2, getTaskRunner2()); | 289 m_notifier.addConnectionObserver(&observer2, getTaskRunner2()); |
| 268 | 290 |
| 269 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 291 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| 270 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, | 292 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, |
| 271 kBluetoothMaxBandwidthMbps)); | 293 kBluetoothMaxBandwidthMbps)); |
| 272 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeBluetooth, | 294 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeBluetooth, |
| 273 kBluetoothMaxBandwidthMbps)); | 295 kBluetoothMaxBandwidthMbps)); |
| 296 |
| 297 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); |
| 298 m_notifier.removeConnectionObserver(&observer2, getTaskRunner2()); |
| 274 } | 299 } |
| 275 | 300 |
| 276 TEST_F(NetworkStateNotifierTest, RemoveContext) { | 301 TEST_F(NetworkStateNotifierTest, RemoveContext) { |
| 277 StateObserver observer1, observer2; | 302 StateObserver observer1, observer2; |
| 278 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); | 303 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); |
| 279 m_notifier.addConnectionObserver(&observer2, getTaskRunner2()); | 304 m_notifier.addConnectionObserver(&observer2, getTaskRunner2()); |
| 280 m_notifier.removeConnectionObserver(&observer2, getTaskRunner2()); | 305 m_notifier.removeConnectionObserver(&observer2, getTaskRunner2()); |
| 281 | 306 |
| 282 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 307 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| 283 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, | 308 EXPECT_TRUE(verifyObservations(observer1, WebConnectionTypeBluetooth, |
| 284 kBluetoothMaxBandwidthMbps)); | 309 kBluetoothMaxBandwidthMbps)); |
| 285 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeNone, | 310 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeNone, |
| 286 kNoneMaxBandwidthMbps)); | 311 kNoneMaxBandwidthMbps)); |
| 312 |
| 313 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); |
| 287 } | 314 } |
| 288 | 315 |
| 289 TEST_F(NetworkStateNotifierTest, RemoveAllContexts) { | 316 TEST_F(NetworkStateNotifierTest, RemoveAllContexts) { |
| 290 StateObserver observer1, observer2; | 317 StateObserver observer1, observer2; |
| 291 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); | 318 m_notifier.addConnectionObserver(&observer1, getTaskRunner()); |
| 292 m_notifier.addConnectionObserver(&observer2, getTaskRunner2()); | 319 m_notifier.addConnectionObserver(&observer2, getTaskRunner2()); |
| 293 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); | 320 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); |
| 294 m_notifier.removeConnectionObserver(&observer2, getTaskRunner2()); | 321 m_notifier.removeConnectionObserver(&observer2, getTaskRunner2()); |
| 295 | 322 |
| 296 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 323 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 307 m_notifier.setOnLine(true); | 334 m_notifier.setOnLine(true); |
| 308 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 335 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| 309 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeBluetooth, | 336 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeBluetooth, |
| 310 kBluetoothMaxBandwidthMbps)); | 337 kBluetoothMaxBandwidthMbps)); |
| 311 EXPECT_TRUE(m_notifier.onLine()); | 338 EXPECT_TRUE(m_notifier.onLine()); |
| 312 EXPECT_EQ(WebConnectionTypeBluetooth, m_notifier.connectionType()); | 339 EXPECT_EQ(WebConnectionTypeBluetooth, m_notifier.connectionType()); |
| 313 EXPECT_EQ(kBluetoothMaxBandwidthMbps, m_notifier.maxBandwidth()); | 340 EXPECT_EQ(kBluetoothMaxBandwidthMbps, m_notifier.maxBandwidth()); |
| 314 | 341 |
| 315 m_notifier.setOverride(true, WebConnectionTypeEthernet, | 342 m_notifier.setOverride(true, WebConnectionTypeEthernet, |
| 316 kEthernetMaxBandwidthMbps); | 343 kEthernetMaxBandwidthMbps); |
| 317 testing::runPendingTasks(); | 344 runPendingTasks(); |
| 318 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeEthernet, | 345 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeEthernet, |
| 319 kEthernetMaxBandwidthMbps)); | 346 kEthernetMaxBandwidthMbps)); |
| 320 EXPECT_TRUE(m_notifier.onLine()); | 347 EXPECT_TRUE(m_notifier.onLine()); |
| 321 EXPECT_EQ(WebConnectionTypeEthernet, m_notifier.connectionType()); | 348 EXPECT_EQ(WebConnectionTypeEthernet, m_notifier.connectionType()); |
| 322 EXPECT_EQ(kEthernetMaxBandwidthMbps, m_notifier.maxBandwidth()); | 349 EXPECT_EQ(kEthernetMaxBandwidthMbps, m_notifier.maxBandwidth()); |
| 323 | 350 |
| 324 // When override is active, calls to setOnLine and setConnection are temporary | 351 // When override is active, calls to setOnLine and setConnection are temporary |
| 325 // ignored. | 352 // ignored. |
| 326 m_notifier.setOnLine(false); | 353 m_notifier.setOnLine(false); |
| 327 setConnection(WebConnectionTypeNone, kNoneMaxBandwidthMbps); | 354 setConnection(WebConnectionTypeNone, kNoneMaxBandwidthMbps); |
| 328 testing::runPendingTasks(); | 355 runPendingTasks(); |
| 329 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeEthernet, | 356 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeEthernet, |
| 330 kEthernetMaxBandwidthMbps)); | 357 kEthernetMaxBandwidthMbps)); |
| 331 EXPECT_TRUE(m_notifier.onLine()); | 358 EXPECT_TRUE(m_notifier.onLine()); |
| 332 EXPECT_EQ(WebConnectionTypeEthernet, m_notifier.connectionType()); | 359 EXPECT_EQ(WebConnectionTypeEthernet, m_notifier.connectionType()); |
| 333 EXPECT_EQ(kEthernetMaxBandwidthMbps, m_notifier.maxBandwidth()); | 360 EXPECT_EQ(kEthernetMaxBandwidthMbps, m_notifier.maxBandwidth()); |
| 334 | 361 |
| 335 m_notifier.clearOverride(); | 362 m_notifier.clearOverride(); |
| 336 testing::runPendingTasks(); | 363 runPendingTasks(); |
| 337 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeNone, | 364 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeNone, |
| 338 kNoneMaxBandwidthMbps)); | 365 kNoneMaxBandwidthMbps)); |
| 339 EXPECT_FALSE(m_notifier.onLine()); | 366 EXPECT_FALSE(m_notifier.onLine()); |
| 340 EXPECT_EQ(WebConnectionTypeNone, m_notifier.connectionType()); | 367 EXPECT_EQ(WebConnectionTypeNone, m_notifier.connectionType()); |
| 341 EXPECT_EQ(kNoneMaxBandwidthMbps, m_notifier.maxBandwidth()); | 368 EXPECT_EQ(kNoneMaxBandwidthMbps, m_notifier.maxBandwidth()); |
| 342 | 369 |
| 343 m_notifier.removeConnectionObserver(&observer, getTaskRunner()); | 370 m_notifier.removeConnectionObserver(&observer, getTaskRunner()); |
| 344 } | 371 } |
| 345 | 372 |
| 346 TEST_F(NetworkStateNotifierTest, NoExtraNotifications) { | 373 TEST_F(NetworkStateNotifierTest, NoExtraNotifications) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 366 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); | 393 setConnection(WebConnectionTypeBluetooth, kBluetoothMaxBandwidthMbps); |
| 367 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeBluetooth, | 394 EXPECT_TRUE(verifyObservations(observer, WebConnectionTypeBluetooth, |
| 368 kBluetoothMaxBandwidthMbps)); | 395 kBluetoothMaxBandwidthMbps)); |
| 369 EXPECT_EQ(observer.callbackCount(), 3); | 396 EXPECT_EQ(observer.callbackCount(), 3); |
| 370 | 397 |
| 371 m_notifier.removeConnectionObserver(&observer, getTaskRunner()); | 398 m_notifier.removeConnectionObserver(&observer, getTaskRunner()); |
| 372 } | 399 } |
| 373 | 400 |
| 374 TEST_F(NetworkStateNotifierTest, NoNotificationOnInitialization) { | 401 TEST_F(NetworkStateNotifierTest, NoNotificationOnInitialization) { |
| 375 NetworkStateNotifier notifier; | 402 NetworkStateNotifier notifier; |
| 376 Persistent<Document> document(Document::create()); | |
| 377 StateObserver observer; | 403 StateObserver observer; |
| 378 | 404 |
| 379 notifier.addConnectionObserver(&observer, getTaskRunner()); | 405 notifier.addConnectionObserver(&observer, getTaskRunner()); |
| 380 notifier.addOnLineObserver(&observer, getTaskRunner()); | 406 notifier.addOnLineObserver(&observer, getTaskRunner()); |
| 381 testing::runPendingTasks(); | 407 runPendingTasks(); |
| 382 EXPECT_EQ(observer.callbackCount(), 0); | 408 EXPECT_EQ(observer.callbackCount(), 0); |
| 383 | 409 |
| 384 notifier.setWebConnection(WebConnectionTypeBluetooth, | 410 notifier.setWebConnection(WebConnectionTypeBluetooth, |
| 385 kBluetoothMaxBandwidthMbps); | 411 kBluetoothMaxBandwidthMbps); |
| 386 notifier.setOnLine(true); | 412 notifier.setOnLine(true); |
| 387 testing::runPendingTasks(); | 413 runPendingTasks(); |
| 388 EXPECT_EQ(observer.callbackCount(), 0); | 414 EXPECT_EQ(observer.callbackCount(), 0); |
| 389 | 415 |
| 390 notifier.setOnLine(true); | 416 notifier.setOnLine(true); |
| 391 notifier.setWebConnection(WebConnectionTypeBluetooth, | 417 notifier.setWebConnection(WebConnectionTypeBluetooth, |
| 392 kBluetoothMaxBandwidthMbps); | 418 kBluetoothMaxBandwidthMbps); |
| 393 testing::runPendingTasks(); | 419 runPendingTasks(); |
| 394 EXPECT_EQ(observer.callbackCount(), 0); | 420 EXPECT_EQ(observer.callbackCount(), 0); |
| 395 | 421 |
| 396 notifier.setWebConnection(WebConnectionTypeEthernet, | 422 notifier.setWebConnection(WebConnectionTypeEthernet, |
| 397 kEthernetMaxBandwidthMbps); | 423 kEthernetMaxBandwidthMbps); |
| 398 testing::runPendingTasks(); | 424 runPendingTasks(); |
| 399 EXPECT_EQ(observer.callbackCount(), 1); | 425 EXPECT_EQ(observer.callbackCount(), 1); |
| 400 EXPECT_EQ(observer.observedType(), WebConnectionTypeEthernet); | 426 EXPECT_EQ(observer.observedType(), WebConnectionTypeEthernet); |
| 401 EXPECT_EQ(observer.observedMaxBandwidth(), kEthernetMaxBandwidthMbps); | 427 EXPECT_EQ(observer.observedMaxBandwidth(), kEthernetMaxBandwidthMbps); |
| 402 | 428 |
| 403 notifier.setOnLine(false); | 429 notifier.setOnLine(false); |
| 404 testing::runPendingTasks(); | 430 runPendingTasks(); |
| 405 EXPECT_EQ(observer.callbackCount(), 2); | 431 EXPECT_EQ(observer.callbackCount(), 2); |
| 406 EXPECT_FALSE(observer.observedOnLineState()); | 432 EXPECT_FALSE(observer.observedOnLineState()); |
| 433 |
| 434 m_notifier.removeConnectionObserver(&observer, getTaskRunner()); |
| 435 m_notifier.removeOnLineObserver(&observer, getTaskRunner()); |
| 407 } | 436 } |
| 408 | 437 |
| 409 TEST_F(NetworkStateNotifierTest, OnLineNotification) { | 438 TEST_F(NetworkStateNotifierTest, OnLineNotification) { |
| 410 StateObserver observer; | 439 StateObserver observer; |
| 411 m_notifier.addOnLineObserver(&observer, getTaskRunner()); | 440 m_notifier.addOnLineObserver(&observer, getTaskRunner()); |
| 412 | 441 |
| 413 setOnLine(true); | 442 setOnLine(true); |
| 414 testing::runPendingTasks(); | 443 runPendingTasks(); |
| 415 EXPECT_TRUE(observer.observedOnLineState()); | 444 EXPECT_TRUE(observer.observedOnLineState()); |
| 416 EXPECT_EQ(observer.callbackCount(), 1); | 445 EXPECT_EQ(observer.callbackCount(), 1); |
| 417 | 446 |
| 418 setOnLine(false); | 447 setOnLine(false); |
| 419 testing::runPendingTasks(); | 448 runPendingTasks(); |
| 420 EXPECT_FALSE(observer.observedOnLineState()); | 449 EXPECT_FALSE(observer.observedOnLineState()); |
| 421 EXPECT_EQ(observer.callbackCount(), 2); | 450 EXPECT_EQ(observer.callbackCount(), 2); |
| 422 | 451 |
| 423 m_notifier.removeConnectionObserver(&observer, getTaskRunner()); | 452 m_notifier.removeConnectionObserver(&observer, getTaskRunner()); |
| 424 } | 453 } |
| 425 | 454 |
| 426 TEST_F(NetworkStateNotifierTest, MultipleObservers) { | 455 TEST_F(NetworkStateNotifierTest, MultipleObservers) { |
| 427 StateObserver observer1; | 456 StateObserver observer1; |
| 428 StateObserver observer2; | 457 StateObserver observer2; |
| 429 | 458 |
| 430 // Observer1 observes online state, Observer2 observes both. | 459 // Observer1 observes online state, Observer2 observes both. |
| 431 m_notifier.addOnLineObserver(&observer1, getTaskRunner()); | 460 m_notifier.addOnLineObserver(&observer1, getTaskRunner()); |
| 432 m_notifier.addConnectionObserver(&observer2, getTaskRunner()); | 461 m_notifier.addConnectionObserver(&observer2, getTaskRunner()); |
| 433 m_notifier.addOnLineObserver(&observer2, getTaskRunner()); | 462 m_notifier.addOnLineObserver(&observer2, getTaskRunner()); |
| 434 | 463 |
| 435 m_notifier.setOnLine(true); | 464 m_notifier.setOnLine(true); |
| 436 testing::runPendingTasks(); | 465 runPendingTasks(); |
| 437 EXPECT_TRUE(observer1.observedOnLineState()); | 466 EXPECT_TRUE(observer1.observedOnLineState()); |
| 438 EXPECT_TRUE(observer2.observedOnLineState()); | 467 EXPECT_TRUE(observer2.observedOnLineState()); |
| 439 EXPECT_EQ(observer1.callbackCount(), 1); | 468 EXPECT_EQ(observer1.callbackCount(), 1); |
| 440 EXPECT_EQ(observer2.callbackCount(), 1); | 469 EXPECT_EQ(observer2.callbackCount(), 1); |
| 441 | 470 |
| 442 m_notifier.setOnLine(false); | 471 m_notifier.setOnLine(false); |
| 443 testing::runPendingTasks(); | 472 runPendingTasks(); |
| 444 EXPECT_FALSE(observer1.observedOnLineState()); | 473 EXPECT_FALSE(observer1.observedOnLineState()); |
| 445 EXPECT_FALSE(observer2.observedOnLineState()); | 474 EXPECT_FALSE(observer2.observedOnLineState()); |
| 446 EXPECT_EQ(observer1.callbackCount(), 2); | 475 EXPECT_EQ(observer1.callbackCount(), 2); |
| 447 EXPECT_EQ(observer2.callbackCount(), 2); | 476 EXPECT_EQ(observer2.callbackCount(), 2); |
| 448 | 477 |
| 449 m_notifier.setOnLine(true); | 478 m_notifier.setOnLine(true); |
| 450 m_notifier.setWebConnection(WebConnectionTypeEthernet, | 479 m_notifier.setWebConnection(WebConnectionTypeEthernet, |
| 451 kEthernetMaxBandwidthMbps); | 480 kEthernetMaxBandwidthMbps); |
| 452 testing::runPendingTasks(); | 481 runPendingTasks(); |
| 453 EXPECT_TRUE(observer1.observedOnLineState()); | 482 EXPECT_TRUE(observer1.observedOnLineState()); |
| 454 EXPECT_TRUE(observer2.observedOnLineState()); | 483 EXPECT_TRUE(observer2.observedOnLineState()); |
| 455 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeEthernet, | 484 EXPECT_TRUE(verifyObservations(observer2, WebConnectionTypeEthernet, |
| 456 kEthernetMaxBandwidthMbps)); | 485 kEthernetMaxBandwidthMbps)); |
| 457 EXPECT_EQ(observer1.callbackCount(), 3); | 486 EXPECT_EQ(observer1.callbackCount(), 3); |
| 458 EXPECT_EQ(observer2.callbackCount(), 4); | 487 EXPECT_EQ(observer2.callbackCount(), 4); |
| 459 | 488 |
| 460 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); | 489 m_notifier.removeConnectionObserver(&observer1, getTaskRunner()); |
| 461 m_notifier.removeConnectionObserver(&observer2, getTaskRunner()); | 490 m_notifier.removeConnectionObserver(&observer2, getTaskRunner()); |
| 462 } | 491 } |
| 463 | 492 |
| 464 } // namespace blink | 493 } // namespace blink |
| OLD | NEW |