|  | // Copyright 2016 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "ppapi/cpp/vpn_provider.h" | 
|  |  | 
|  | #include "ppapi/c/ppb_vpn_provider.h" | 
|  | #include "ppapi/cpp/instance.h" | 
|  | #include "ppapi/cpp/instance_handle.h" | 
|  | #include "ppapi/cpp/module.h" | 
|  | #include "ppapi/cpp/module_impl.h" | 
|  | #include "ppapi/cpp/var_array.h" | 
|  |  | 
|  | namespace pp { | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | template <> | 
|  | const char* interface_name<PPB_VpnProvider_0_1>() { | 
|  | return PPB_VPNPROVIDER_INTERFACE_0_1; | 
|  | } | 
|  | }  // namespace | 
|  |  | 
|  | VpnProvider::VpnProvider(const InstanceHandle& instance) | 
|  | : associated_instance_(instance) { | 
|  | if (has_interface<PPB_VpnProvider_0_1>()) { | 
|  | PassRefFromConstructor(get_interface<PPB_VpnProvider_0_1>()->Create( | 
|  | associated_instance_.pp_instance())); | 
|  | } | 
|  | } | 
|  |  | 
|  | VpnProvider::~VpnProvider() {} | 
|  |  | 
|  | // static | 
|  | bool VpnProvider::IsAvailable() { | 
|  | return has_interface<PPB_VpnProvider_0_1>(); | 
|  | } | 
|  |  | 
|  | int32_t VpnProvider::Bind(const Var& configuration_id, | 
|  | const Var& configuration_name, | 
|  | const CompletionCallback& callback) { | 
|  | if (has_interface<PPB_VpnProvider_0_1>()) { | 
|  | return get_interface<PPB_VpnProvider_0_1>()->Bind( | 
|  | pp_resource(), configuration_id.pp_var(), configuration_name.pp_var(), | 
|  | callback.pp_completion_callback()); | 
|  | } | 
|  | return PP_ERROR_NOINTERFACE; | 
|  | } | 
|  |  | 
|  | int32_t VpnProvider::SendPacket(const Var& packet, | 
|  | const CompletionCallback& callback) { | 
|  | if (has_interface<PPB_VpnProvider_0_1>()) { | 
|  | return get_interface<PPB_VpnProvider_0_1>()->SendPacket( | 
|  | pp_resource(), packet.pp_var(), callback.pp_completion_callback()); | 
|  | } | 
|  | return PP_ERROR_NOINTERFACE; | 
|  | } | 
|  |  | 
|  | int32_t VpnProvider::ReceivePacket( | 
|  | const CompletionCallbackWithOutput<Var>& callback) { | 
|  | if (has_interface<PPB_VpnProvider_0_1>()) { | 
|  | return get_interface<PPB_VpnProvider_0_1>()->ReceivePacket( | 
|  | pp_resource(), callback.output(), callback.pp_completion_callback()); | 
|  | } | 
|  | return PP_ERROR_NOINTERFACE; | 
|  | } | 
|  |  | 
|  | }  // namespace pp |