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 26 matching lines...) Expand all Loading... |
37 #include "public/platform/WebConnectionType.h" | 37 #include "public/platform/WebConnectionType.h" |
38 #include "public/platform/WebThread.h" | 38 #include "public/platform/WebThread.h" |
39 #include "wtf/Functional.h" | 39 #include "wtf/Functional.h" |
40 #include <gtest/gtest.h> | 40 #include <gtest/gtest.h> |
41 | 41 |
42 namespace blink { | 42 namespace blink { |
43 | 43 |
44 class StateObserver : public NetworkStateNotifier::NetworkStateObserver { | 44 class StateObserver : public NetworkStateNotifier::NetworkStateObserver { |
45 public: | 45 public: |
46 StateObserver() | 46 StateObserver() |
47 : m_observedType(blink::ConnectionTypeNone) | 47 : m_observedType(ConnectionTypeNone) |
48 , m_callbackCount(0) | 48 , m_callbackCount(0) |
49 { | 49 { |
50 } | 50 } |
51 | 51 |
52 virtual void connectionTypeChange(blink::WebConnectionType type) | 52 virtual void connectionTypeChange(WebConnectionType type) |
53 { | 53 { |
54 m_observedType = type; | 54 m_observedType = type; |
55 m_callbackCount += 1; | 55 m_callbackCount += 1; |
56 | 56 |
57 if (m_closure && !m_closure->isNull()) | 57 if (m_closure && !m_closure->isNull()) |
58 (*m_closure)(); | 58 (*m_closure)(); |
59 } | 59 } |
60 | 60 |
61 blink::WebConnectionType observedType() const | 61 WebConnectionType observedType() const |
62 { | 62 { |
63 return m_observedType; | 63 return m_observedType; |
64 } | 64 } |
65 | 65 |
66 int callbackCount() const | 66 int callbackCount() const |
67 { | 67 { |
68 return m_callbackCount; | 68 return m_callbackCount; |
69 } | 69 } |
70 | 70 |
71 void setNotificationCallback(PassOwnPtr<Closure> closure) | 71 void setNotificationCallback(PassOwnPtr<Closure> closure) |
72 { | 72 { |
73 m_closure = closure; | 73 m_closure = closure; |
74 } | 74 } |
75 | 75 |
76 private: | 76 private: |
77 OwnPtr<Closure> m_closure; | 77 OwnPtr<Closure> m_closure; |
78 blink::WebConnectionType m_observedType; | 78 WebConnectionType m_observedType; |
79 int m_callbackCount; | 79 int m_callbackCount; |
80 }; | 80 }; |
81 | 81 |
82 class NetworkStateNotifierTest : public ::testing::Test { | 82 class NetworkStateNotifierTest : public ::testing::Test { |
83 public: | 83 public: |
84 NetworkStateNotifierTest() | 84 NetworkStateNotifierTest() |
85 : m_document(Document::create()) | 85 : m_document(Document::create()) |
86 , m_document2(Document::create()) | 86 , m_document2(Document::create()) |
87 { | 87 { |
88 } | 88 } |
89 | 89 |
90 ExecutionContext* executionContext() | 90 ExecutionContext* executionContext() |
91 { | 91 { |
92 return m_document.get(); | 92 return m_document.get(); |
93 } | 93 } |
94 | 94 |
95 ExecutionContext* executionContext2() | 95 ExecutionContext* executionContext2() |
96 { | 96 { |
97 return m_document2.get(); | 97 return m_document2.get(); |
98 } | 98 } |
99 | 99 |
100 protected: | 100 protected: |
101 void setType(blink::WebConnectionType type) | 101 void setType(WebConnectionType type) |
102 { | 102 { |
103 m_notifier.setWebConnectionType(type); | 103 m_notifier.setWebConnectionType(type); |
104 testing::runPendingTasks(); | 104 testing::runPendingTasks(); |
105 } | 105 } |
106 | 106 |
107 void addObserverOnNotification(StateObserver* observer, StateObserver* obser
verToAdd) | 107 void addObserverOnNotification(StateObserver* observer, StateObserver* obser
verToAdd) |
108 { | 108 { |
109 observer->setNotificationCallback(bind(&NetworkStateNotifier::addObserve
r, &m_notifier, observerToAdd, executionContext())); | 109 observer->setNotificationCallback(bind(&NetworkStateNotifier::addObserve
r, &m_notifier, observerToAdd, executionContext())); |
110 } | 110 } |
111 | 111 |
112 void removeObserverOnNotification(StateObserver* observer, StateObserver* ob
serverToRemove) | 112 void removeObserverOnNotification(StateObserver* observer, StateObserver* ob
serverToRemove) |
113 { | 113 { |
114 observer->setNotificationCallback(bind(&NetworkStateNotifier::removeObse
rver, &m_notifier, observerToRemove, executionContext())); | 114 observer->setNotificationCallback(bind(&NetworkStateNotifier::removeObse
rver, &m_notifier, observerToRemove, executionContext())); |
115 } | 115 } |
116 | 116 |
117 RefPtrWillBePersistent<Document> m_document; | 117 RefPtrWillBePersistent<Document> m_document; |
118 RefPtrWillBePersistent<Document> m_document2; | 118 RefPtrWillBePersistent<Document> m_document2; |
119 NetworkStateNotifier m_notifier; | 119 NetworkStateNotifier m_notifier; |
120 }; | 120 }; |
121 | 121 |
122 TEST_F(NetworkStateNotifierTest, AddObserver) | 122 TEST_F(NetworkStateNotifierTest, AddObserver) |
123 { | 123 { |
124 StateObserver observer; | 124 StateObserver observer; |
125 m_notifier.addObserver(&observer, executionContext()); | 125 m_notifier.addObserver(&observer, executionContext()); |
126 EXPECT_EQ(observer.observedType(), blink::ConnectionTypeNone); | 126 EXPECT_EQ(observer.observedType(), ConnectionTypeNone); |
127 | 127 |
128 setType(blink::ConnectionTypeBluetooth); | 128 setType(ConnectionTypeBluetooth); |
129 EXPECT_EQ(observer.observedType(), blink::ConnectionTypeBluetooth); | 129 EXPECT_EQ(observer.observedType(), ConnectionTypeBluetooth); |
130 EXPECT_EQ(observer.callbackCount(), 1); | 130 EXPECT_EQ(observer.callbackCount(), 1); |
131 } | 131 } |
132 | 132 |
133 TEST_F(NetworkStateNotifierTest, RemoveObserver) | 133 TEST_F(NetworkStateNotifierTest, RemoveObserver) |
134 { | 134 { |
135 StateObserver observer1, observer2; | 135 StateObserver observer1, observer2; |
136 m_notifier.addObserver(&observer1, executionContext()); | 136 m_notifier.addObserver(&observer1, executionContext()); |
137 m_notifier.removeObserver(&observer1, executionContext()); | 137 m_notifier.removeObserver(&observer1, executionContext()); |
138 m_notifier.addObserver(&observer2, executionContext()); | 138 m_notifier.addObserver(&observer2, executionContext()); |
139 | 139 |
140 setType(blink::ConnectionTypeBluetooth); | 140 setType(ConnectionTypeBluetooth); |
141 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeNone); | 141 EXPECT_EQ(observer1.observedType(), ConnectionTypeNone); |
142 EXPECT_EQ(observer2.observedType(), blink::ConnectionTypeBluetooth); | 142 EXPECT_EQ(observer2.observedType(), ConnectionTypeBluetooth); |
143 } | 143 } |
144 | 144 |
145 TEST_F(NetworkStateNotifierTest, RemoveSoleObserver) | 145 TEST_F(NetworkStateNotifierTest, RemoveSoleObserver) |
146 { | 146 { |
147 StateObserver observer1, observer2; | 147 StateObserver observer1, observer2; |
148 m_notifier.addObserver(&observer1, executionContext()); | 148 m_notifier.addObserver(&observer1, executionContext()); |
149 m_notifier.removeObserver(&observer1, executionContext()); | 149 m_notifier.removeObserver(&observer1, executionContext()); |
150 | 150 |
151 setType(blink::ConnectionTypeBluetooth); | 151 setType(ConnectionTypeBluetooth); |
152 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeNone); | 152 EXPECT_EQ(observer1.observedType(), ConnectionTypeNone); |
153 } | 153 } |
154 | 154 |
155 TEST_F(NetworkStateNotifierTest, AddObserverWhileNotifying) | 155 TEST_F(NetworkStateNotifierTest, AddObserverWhileNotifying) |
156 { | 156 { |
157 StateObserver observer1, observer2; | 157 StateObserver observer1, observer2; |
158 m_notifier.addObserver(&observer1, executionContext()); | 158 m_notifier.addObserver(&observer1, executionContext()); |
159 addObserverOnNotification(&observer1, &observer2); | 159 addObserverOnNotification(&observer1, &observer2); |
160 | 160 |
161 setType(blink::ConnectionTypeBluetooth); | 161 setType(ConnectionTypeBluetooth); |
162 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeBluetooth); | 162 EXPECT_EQ(observer1.observedType(), ConnectionTypeBluetooth); |
163 EXPECT_EQ(observer2.observedType(), blink::ConnectionTypeBluetooth); | 163 EXPECT_EQ(observer2.observedType(), ConnectionTypeBluetooth); |
164 } | 164 } |
165 | 165 |
166 TEST_F(NetworkStateNotifierTest, RemoveSoleObserverWhileNotifying) | 166 TEST_F(NetworkStateNotifierTest, RemoveSoleObserverWhileNotifying) |
167 { | 167 { |
168 StateObserver observer1; | 168 StateObserver observer1; |
169 m_notifier.addObserver(&observer1, executionContext()); | 169 m_notifier.addObserver(&observer1, executionContext()); |
170 removeObserverOnNotification(&observer1, &observer1); | 170 removeObserverOnNotification(&observer1, &observer1); |
171 | 171 |
172 setType(blink::ConnectionTypeBluetooth); | 172 setType(ConnectionTypeBluetooth); |
173 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeBluetooth); | 173 EXPECT_EQ(observer1.observedType(), ConnectionTypeBluetooth); |
174 | 174 |
175 setType(blink::ConnectionTypeEthernet); | 175 setType(ConnectionTypeEthernet); |
176 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeBluetooth); | 176 EXPECT_EQ(observer1.observedType(), ConnectionTypeBluetooth); |
177 } | 177 } |
178 | 178 |
179 TEST_F(NetworkStateNotifierTest, RemoveCurrentObserverWhileNotifying) | 179 TEST_F(NetworkStateNotifierTest, RemoveCurrentObserverWhileNotifying) |
180 { | 180 { |
181 StateObserver observer1, observer2; | 181 StateObserver observer1, observer2; |
182 m_notifier.addObserver(&observer1, executionContext()); | 182 m_notifier.addObserver(&observer1, executionContext()); |
183 m_notifier.addObserver(&observer2, executionContext()); | 183 m_notifier.addObserver(&observer2, executionContext()); |
184 removeObserverOnNotification(&observer1, &observer1); | 184 removeObserverOnNotification(&observer1, &observer1); |
185 | 185 |
186 setType(blink::ConnectionTypeBluetooth); | 186 setType(ConnectionTypeBluetooth); |
187 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeBluetooth); | 187 EXPECT_EQ(observer1.observedType(), ConnectionTypeBluetooth); |
188 EXPECT_EQ(observer2.observedType(), blink::ConnectionTypeBluetooth); | 188 EXPECT_EQ(observer2.observedType(), ConnectionTypeBluetooth); |
189 | 189 |
190 setType(blink::ConnectionTypeEthernet); | 190 setType(ConnectionTypeEthernet); |
191 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeBluetooth); | 191 EXPECT_EQ(observer1.observedType(), ConnectionTypeBluetooth); |
192 EXPECT_EQ(observer2.observedType(), blink::ConnectionTypeEthernet); | 192 EXPECT_EQ(observer2.observedType(), ConnectionTypeEthernet); |
193 } | 193 } |
194 | 194 |
195 TEST_F(NetworkStateNotifierTest, RemovePastObserverWhileNotifying) | 195 TEST_F(NetworkStateNotifierTest, RemovePastObserverWhileNotifying) |
196 { | 196 { |
197 StateObserver observer1, observer2; | 197 StateObserver observer1, observer2; |
198 m_notifier.addObserver(&observer1, executionContext()); | 198 m_notifier.addObserver(&observer1, executionContext()); |
199 m_notifier.addObserver(&observer2, executionContext()); | 199 m_notifier.addObserver(&observer2, executionContext()); |
200 removeObserverOnNotification(&observer2, &observer1); | 200 removeObserverOnNotification(&observer2, &observer1); |
201 | 201 |
202 setType(blink::ConnectionTypeBluetooth); | 202 setType(ConnectionTypeBluetooth); |
203 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeBluetooth); | 203 EXPECT_EQ(observer1.observedType(), ConnectionTypeBluetooth); |
204 EXPECT_EQ(observer2.observedType(), blink::ConnectionTypeBluetooth); | 204 EXPECT_EQ(observer2.observedType(), ConnectionTypeBluetooth); |
205 | 205 |
206 setType(blink::ConnectionTypeEthernet); | 206 setType(ConnectionTypeEthernet); |
207 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeBluetooth); | 207 EXPECT_EQ(observer1.observedType(), ConnectionTypeBluetooth); |
208 EXPECT_EQ(observer2.observedType(), blink::ConnectionTypeEthernet); | 208 EXPECT_EQ(observer2.observedType(), ConnectionTypeEthernet); |
209 } | 209 } |
210 | 210 |
211 TEST_F(NetworkStateNotifierTest, RemoveFutureObserverWhileNotifying) | 211 TEST_F(NetworkStateNotifierTest, RemoveFutureObserverWhileNotifying) |
212 { | 212 { |
213 StateObserver observer1, observer2, observer3; | 213 StateObserver observer1, observer2, observer3; |
214 m_notifier.addObserver(&observer1, executionContext()); | 214 m_notifier.addObserver(&observer1, executionContext()); |
215 m_notifier.addObserver(&observer2, executionContext()); | 215 m_notifier.addObserver(&observer2, executionContext()); |
216 m_notifier.addObserver(&observer3, executionContext()); | 216 m_notifier.addObserver(&observer3, executionContext()); |
217 removeObserverOnNotification(&observer1, &observer2); | 217 removeObserverOnNotification(&observer1, &observer2); |
218 | 218 |
219 setType(blink::ConnectionTypeBluetooth); | 219 setType(ConnectionTypeBluetooth); |
220 | 220 |
221 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeBluetooth); | 221 EXPECT_EQ(observer1.observedType(), ConnectionTypeBluetooth); |
222 EXPECT_EQ(observer2.observedType(), blink::ConnectionTypeNone); | 222 EXPECT_EQ(observer2.observedType(), ConnectionTypeNone); |
223 EXPECT_EQ(observer3.observedType(), blink::ConnectionTypeBluetooth); | 223 EXPECT_EQ(observer3.observedType(), ConnectionTypeBluetooth); |
224 } | 224 } |
225 | 225 |
226 TEST_F(NetworkStateNotifierTest, MultipleContextsAddObserver) | 226 TEST_F(NetworkStateNotifierTest, MultipleContextsAddObserver) |
227 { | 227 { |
228 StateObserver observer1, observer2; | 228 StateObserver observer1, observer2; |
229 m_notifier.addObserver(&observer1, executionContext()); | 229 m_notifier.addObserver(&observer1, executionContext()); |
230 m_notifier.addObserver(&observer2, executionContext2()); | 230 m_notifier.addObserver(&observer2, executionContext2()); |
231 | 231 |
232 setType(blink::ConnectionTypeBluetooth); | 232 setType(ConnectionTypeBluetooth); |
233 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeBluetooth); | 233 EXPECT_EQ(observer1.observedType(), ConnectionTypeBluetooth); |
234 EXPECT_EQ(observer2.observedType(), blink::ConnectionTypeBluetooth); | 234 EXPECT_EQ(observer2.observedType(), ConnectionTypeBluetooth); |
235 } | 235 } |
236 | 236 |
237 TEST_F(NetworkStateNotifierTest, RemoveContext) | 237 TEST_F(NetworkStateNotifierTest, RemoveContext) |
238 { | 238 { |
239 StateObserver observer1, observer2; | 239 StateObserver observer1, observer2; |
240 m_notifier.addObserver(&observer1, executionContext()); | 240 m_notifier.addObserver(&observer1, executionContext()); |
241 m_notifier.addObserver(&observer2, executionContext2()); | 241 m_notifier.addObserver(&observer2, executionContext2()); |
242 m_notifier.removeObserver(&observer2, executionContext2()); | 242 m_notifier.removeObserver(&observer2, executionContext2()); |
243 | 243 |
244 setType(blink::ConnectionTypeBluetooth); | 244 setType(ConnectionTypeBluetooth); |
245 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeBluetooth); | 245 EXPECT_EQ(observer1.observedType(), ConnectionTypeBluetooth); |
246 EXPECT_EQ(observer2.observedType(), blink::ConnectionTypeNone); | 246 EXPECT_EQ(observer2.observedType(), ConnectionTypeNone); |
247 } | 247 } |
248 | 248 |
249 TEST_F(NetworkStateNotifierTest, RemoveAllContexts) | 249 TEST_F(NetworkStateNotifierTest, RemoveAllContexts) |
250 { | 250 { |
251 StateObserver observer1, observer2; | 251 StateObserver observer1, observer2; |
252 m_notifier.addObserver(&observer1, executionContext()); | 252 m_notifier.addObserver(&observer1, executionContext()); |
253 m_notifier.addObserver(&observer2, executionContext2()); | 253 m_notifier.addObserver(&observer2, executionContext2()); |
254 m_notifier.removeObserver(&observer1, executionContext()); | 254 m_notifier.removeObserver(&observer1, executionContext()); |
255 m_notifier.removeObserver(&observer2, executionContext2()); | 255 m_notifier.removeObserver(&observer2, executionContext2()); |
256 | 256 |
257 setType(blink::ConnectionTypeBluetooth); | 257 setType(ConnectionTypeBluetooth); |
258 EXPECT_EQ(observer1.observedType(), blink::ConnectionTypeNone); | 258 EXPECT_EQ(observer1.observedType(), ConnectionTypeNone); |
259 EXPECT_EQ(observer2.observedType(), blink::ConnectionTypeNone); | 259 EXPECT_EQ(observer2.observedType(), ConnectionTypeNone); |
260 } | 260 } |
261 | 261 |
262 } // namespace blink | 262 } // namespace blink |
OLD | NEW |