| 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 |