15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/test_udp_socket_private_disallowed.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/private/net_address_private.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/testing_instance.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/test_utils.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REGISTER_TEST_CASE(UDPSocketPrivateDisallowed);
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestUDPSocketPrivateDisallowed::TestUDPSocketPrivateDisallowed(
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TestingInstance* instance)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : TestCase(instance), udp_socket_private_interface_(NULL) {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestUDPSocketPrivateDisallowed::Init() {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  udp_socket_private_interface_ = static_cast<const PPB_UDPSocket_Private*>(
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pp::Module::Get()->GetBrowserInterface(PPB_UDPSOCKET_PRIVATE_INTERFACE));
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!udp_socket_private_interface_)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    instance_->AppendError("UDPSocketPrivate interface not available");
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return udp_socket_private_interface_ && CheckTestingInterface();
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestUDPSocketPrivateDisallowed::RunTests(const std::string& filter) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RUN_TEST(Bind, filter);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string TestUDPSocketPrivateDisallowed::TestBind() {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Resource socket =
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      udp_socket_private_interface_->Create(instance_->pp_instance());
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (0 != socket) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_NetAddress_Private addr;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pp::NetAddressPrivate::GetAnyAddress(false, &addr);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TestCompletionCallback callback(instance_->pp_instance());
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    callback.WaitForResult(udp_socket_private_interface_->Bind(socket, &addr,
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        callback.GetCallback().pp_completion_callback()));
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CHECK_CALLBACK_BEHAVIOR(callback);
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_EQ(PP_ERROR_FAILED, callback.result());
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PASS();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
46