OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ppapi/tests/test_network_monitor_private.h" | 5 #include "ppapi/tests/test_network_monitor_private.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "ppapi/cpp/instance_handle.h" | 9 #include "ppapi/cpp/instance_handle.h" |
10 #include "ppapi/cpp/module.h" | 10 #include "ppapi/cpp/module.h" |
11 #include "ppapi/cpp/private/net_address_private.h" | 11 #include "ppapi/cpp/private/net_address_private.h" |
12 #include "ppapi/cpp/private/network_list_private.h" | 12 #include "ppapi/cpp/private/network_list_private.h" |
13 #include "ppapi/cpp/private/network_monitor_private.h" | 13 #include "ppapi/cpp/private/network_monitor_private.h" |
14 #include "ppapi/tests/testing_instance.h" | 14 #include "ppapi/tests/testing_instance.h" |
15 #include "ppapi/tests/test_utils.h" | 15 #include "ppapi/tests/test_utils.h" |
16 #include "ppapi/utility/private/network_list_observer_private.h" | 16 #include "ppapi/utility/private/network_list_observer_private.h" |
17 | 17 |
18 REGISTER_TEST_CASE(NetworkMonitorPrivate); | 18 REGISTER_TEST_CASE(NetworkMonitorPrivate); |
19 | 19 |
20 namespace { | 20 namespace { |
21 | 21 |
22 struct CallbackData { | 22 struct CallbackData { |
23 explicit CallbackData(PP_Instance instance) | 23 explicit CallbackData(PP_Instance instance) |
24 : call_counter(0), | 24 : event(instance), |
25 completion_callback(instance), | 25 call_counter(0), |
26 list_resource(0), | 26 list_resource(0), |
27 delete_monitor(false), | 27 delete_monitor(false), |
28 monitor(NULL) { | 28 monitor(NULL) { |
29 } | 29 } |
30 ~CallbackData() { | 30 ~CallbackData() { |
31 if (list_resource) | 31 if (list_resource) |
32 pp::Module::Get()->core()->ReleaseResource(list_resource); | 32 pp::Module::Get()->core()->ReleaseResource(list_resource); |
33 } | 33 } |
| 34 NestedEvent event; |
34 int call_counter; | 35 int call_counter; |
35 TestCompletionCallback completion_callback; | |
36 PP_Resource list_resource; | 36 PP_Resource list_resource; |
37 bool delete_monitor; | 37 bool delete_monitor; |
38 pp::NetworkMonitorPrivate* monitor; | 38 pp::NetworkMonitorPrivate* monitor; |
39 }; | 39 }; |
40 | 40 |
41 void TestCallback(void* user_data, PP_Resource network_list) { | 41 void TestCallback(void* user_data, PP_Resource network_list) { |
42 CallbackData* data = static_cast<CallbackData*>(user_data); | 42 CallbackData* data = static_cast<CallbackData*>(user_data); |
43 data->call_counter++; | 43 data->call_counter++; |
44 | 44 |
45 if (data->list_resource) | 45 if (data->list_resource) |
46 pp::Module::Get()->core()->ReleaseResource(data->list_resource); | 46 pp::Module::Get()->core()->ReleaseResource(data->list_resource); |
47 data->list_resource = network_list; | 47 data->list_resource = network_list; |
48 | 48 |
49 if (data->delete_monitor) | 49 if (data->delete_monitor) |
50 delete data->monitor; | 50 delete data->monitor; |
51 | 51 |
52 // Invoke completion callback only for the first change notification. | 52 |
53 if (data->call_counter == 1) | 53 if (data->call_counter == 1) |
54 static_cast<pp::CompletionCallback>(data->completion_callback).Run(PP_OK); | 54 data->event.Signal(); |
55 } | 55 } |
56 | 56 |
57 | 57 |
58 class TestNetworkListObserver : public pp::NetworkListObserverPrivate { | 58 class TestNetworkListObserver : public pp::NetworkListObserverPrivate { |
59 public: | 59 public: |
60 explicit TestNetworkListObserver(const pp::InstanceHandle& instance) | 60 explicit TestNetworkListObserver(const pp::InstanceHandle& instance) |
61 : pp::NetworkListObserverPrivate(instance), | 61 : pp::NetworkListObserverPrivate(instance), |
62 completion_callback(instance.pp_instance()) { | 62 event(instance.pp_instance()) { |
63 } | 63 } |
64 virtual void OnNetworkListChanged(const pp::NetworkListPrivate& list) { | 64 virtual void OnNetworkListChanged(const pp::NetworkListPrivate& list) { |
65 current_list = list; | 65 current_list = list; |
66 static_cast<pp::CompletionCallback>(completion_callback).Run(PP_OK); | 66 event.Signal(); |
67 } | 67 } |
68 | 68 |
69 pp::NetworkListPrivate current_list; | 69 pp::NetworkListPrivate current_list; |
70 TestCompletionCallback completion_callback; | 70 NestedEvent event; |
71 }; | 71 }; |
72 | 72 |
73 } // namespace | 73 } // namespace |
74 | 74 |
75 TestNetworkMonitorPrivate::TestNetworkMonitorPrivate(TestingInstance* instance) | 75 TestNetworkMonitorPrivate::TestNetworkMonitorPrivate(TestingInstance* instance) |
76 : TestCase(instance) { | 76 : TestCase(instance) { |
77 } | 77 } |
78 | 78 |
79 bool TestNetworkMonitorPrivate::Init() { | 79 bool TestNetworkMonitorPrivate::Init() { |
80 if (!pp::NetworkMonitorPrivate::IsAvailable()) | 80 if (!pp::NetworkMonitorPrivate::IsAvailable()) |
81 return false; | 81 return false; |
82 | 82 |
83 return true; | 83 return CheckTestingInterface(); |
84 } | 84 } |
85 | 85 |
86 void TestNetworkMonitorPrivate::RunTests(const std::string& filter) { | 86 void TestNetworkMonitorPrivate::RunTests(const std::string& filter) { |
87 RUN_TEST_FORCEASYNC_AND_NOT(Basic, filter); | 87 RUN_TEST_FORCEASYNC_AND_NOT(Basic, filter); |
88 RUN_TEST_FORCEASYNC_AND_NOT(2Monitors, filter); | 88 RUN_TEST_FORCEASYNC_AND_NOT(2Monitors, filter); |
89 RUN_TEST_FORCEASYNC_AND_NOT(DeleteInCallback, filter); | 89 RUN_TEST_FORCEASYNC_AND_NOT(DeleteInCallback, filter); |
90 RUN_TEST_FORCEASYNC_AND_NOT(ListObserver, filter); | 90 RUN_TEST_FORCEASYNC_AND_NOT(ListObserver, filter); |
91 } | 91 } |
92 | 92 |
93 std::string TestNetworkMonitorPrivate::VerifyNetworkListResource( | 93 std::string TestNetworkMonitorPrivate::VerifyNetworkListResource( |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 } | 173 } |
174 | 174 |
175 PASS(); | 175 PASS(); |
176 } | 176 } |
177 | 177 |
178 std::string TestNetworkMonitorPrivate::TestBasic() { | 178 std::string TestNetworkMonitorPrivate::TestBasic() { |
179 CallbackData callback_data(instance_->pp_instance()); | 179 CallbackData callback_data(instance_->pp_instance()); |
180 | 180 |
181 pp::NetworkMonitorPrivate network_monitor( | 181 pp::NetworkMonitorPrivate network_monitor( |
182 instance_, &TestCallback, &callback_data); | 182 instance_, &TestCallback, &callback_data); |
183 ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK); | 183 callback_data.event.Wait(); |
184 ASSERT_EQ(callback_data.call_counter, 1); | 184 ASSERT_EQ(callback_data.call_counter, 1); |
185 | 185 |
186 ASSERT_SUBTEST_SUCCESS( | 186 ASSERT_SUBTEST_SUCCESS( |
187 VerifyNetworkListResource(callback_data.list_resource)); | 187 VerifyNetworkListResource(callback_data.list_resource)); |
188 | 188 |
189 PASS(); | 189 PASS(); |
190 } | 190 } |
191 | 191 |
192 std::string TestNetworkMonitorPrivate::Test2Monitors() { | 192 std::string TestNetworkMonitorPrivate::Test2Monitors() { |
193 CallbackData callback_data(instance_->pp_instance()); | 193 CallbackData callback_data(instance_->pp_instance()); |
194 | 194 |
195 pp::NetworkMonitorPrivate network_monitor( | 195 pp::NetworkMonitorPrivate network_monitor( |
196 instance_, &TestCallback, &callback_data); | 196 instance_, &TestCallback, &callback_data); |
197 ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK); | 197 callback_data.event.Wait(); |
198 ASSERT_EQ(callback_data.call_counter, 1); | 198 ASSERT_EQ(callback_data.call_counter, 1); |
199 | 199 |
200 ASSERT_SUBTEST_SUCCESS( | 200 ASSERT_SUBTEST_SUCCESS( |
201 VerifyNetworkListResource(callback_data.list_resource)); | 201 VerifyNetworkListResource(callback_data.list_resource)); |
202 | 202 |
203 CallbackData callback_data_2(instance_->pp_instance()); | 203 CallbackData callback_data_2(instance_->pp_instance()); |
204 | 204 |
205 pp::NetworkMonitorPrivate network_monitor_2( | 205 pp::NetworkMonitorPrivate network_monitor_2( |
206 instance_, &TestCallback, &callback_data_2); | 206 instance_, &TestCallback, &callback_data_2); |
207 ASSERT_EQ(callback_data_2.completion_callback.WaitForResult(), PP_OK); | 207 callback_data_2.event.Wait(); |
208 ASSERT_EQ(callback_data_2.call_counter, 1); | 208 ASSERT_EQ(callback_data_2.call_counter, 1); |
209 | 209 |
210 ASSERT_SUBTEST_SUCCESS( | 210 ASSERT_SUBTEST_SUCCESS( |
211 VerifyNetworkListResource(callback_data_2.list_resource)); | 211 VerifyNetworkListResource(callback_data_2.list_resource)); |
212 | 212 |
213 PASS(); | 213 PASS(); |
214 } | 214 } |
215 | 215 |
216 std::string TestNetworkMonitorPrivate::TestDeleteInCallback() { | 216 std::string TestNetworkMonitorPrivate::TestDeleteInCallback() { |
217 CallbackData callback_data(instance_->pp_instance()); | 217 CallbackData callback_data(instance_->pp_instance()); |
218 | 218 |
219 pp::NetworkMonitorPrivate* network_monitor = new pp::NetworkMonitorPrivate( | 219 pp::NetworkMonitorPrivate* network_monitor = new pp::NetworkMonitorPrivate( |
220 instance_, &TestCallback, &callback_data); | 220 instance_, &TestCallback, &callback_data); |
221 callback_data.delete_monitor = true; | 221 callback_data.delete_monitor = true; |
222 callback_data.monitor = network_monitor; | 222 callback_data.monitor = network_monitor; |
223 | 223 |
224 ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK); | 224 callback_data.event.Wait(); |
225 ASSERT_EQ(callback_data.call_counter, 1); | 225 ASSERT_EQ(callback_data.call_counter, 1); |
226 | 226 |
227 ASSERT_SUBTEST_SUCCESS( | 227 ASSERT_SUBTEST_SUCCESS( |
228 VerifyNetworkListResource(callback_data.list_resource)); | 228 VerifyNetworkListResource(callback_data.list_resource)); |
229 | 229 |
230 PASS(); | 230 PASS(); |
231 } | 231 } |
232 | 232 |
233 std::string TestNetworkMonitorPrivate::TestListObserver() { | 233 std::string TestNetworkMonitorPrivate::TestListObserver() { |
234 TestNetworkListObserver observer(instance_); | 234 TestNetworkListObserver observer(instance_); |
235 ASSERT_EQ(observer.completion_callback.WaitForResult(), PP_OK); | 235 observer.event.Wait(); |
236 ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(observer.current_list)); | 236 ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(observer.current_list)); |
237 PASS(); | 237 PASS(); |
238 } | 238 } |
OLD | NEW |