|  | // Copyright (c) 2012 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/network_list.h" | 
|  |  | 
|  | #include "ppapi/c/pp_errors.h" | 
|  | #include "ppapi/cpp/array_output.h" | 
|  | #include "ppapi/cpp/logging.h" | 
|  | #include "ppapi/cpp/module_impl.h" | 
|  | #include "ppapi/cpp/net_address.h" | 
|  | #include "ppapi/cpp/var.h" | 
|  |  | 
|  | namespace pp { | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | template <> const char* interface_name<PPB_NetworkList_1_0>() { | 
|  | return PPB_NETWORKLIST_INTERFACE_1_0; | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | NetworkList::NetworkList() { | 
|  | } | 
|  |  | 
|  | NetworkList::NetworkList(PassRef, PP_Resource resource) | 
|  | : Resource(PASS_REF, resource) { | 
|  | } | 
|  |  | 
|  | // static | 
|  | bool NetworkList::IsAvailable() { | 
|  | return has_interface<PPB_NetworkList_1_0>(); | 
|  | } | 
|  |  | 
|  | uint32_t NetworkList::GetCount() const { | 
|  | if (!has_interface<PPB_NetworkList_1_0>()) | 
|  | return 0; | 
|  | return get_interface<PPB_NetworkList_1_0>()->GetCount(pp_resource()); | 
|  | } | 
|  |  | 
|  | std::string NetworkList::GetName(uint32_t index) const { | 
|  | if (!has_interface<PPB_NetworkList_1_0>()) | 
|  | return std::string(); | 
|  | Var result(PASS_REF, | 
|  | get_interface<PPB_NetworkList_1_0>()->GetName( | 
|  | pp_resource(), index)); | 
|  | return result.is_string() ? result.AsString() : std::string(); | 
|  | } | 
|  |  | 
|  | PP_NetworkList_Type NetworkList::GetType(uint32_t index) const { | 
|  | if (!has_interface<PPB_NetworkList_1_0>()) | 
|  | return PP_NETWORKLIST_TYPE_ETHERNET; | 
|  | return get_interface<PPB_NetworkList_1_0>()->GetType( | 
|  | pp_resource(), index); | 
|  | } | 
|  |  | 
|  | PP_NetworkList_State NetworkList::GetState(uint32_t index) const { | 
|  | if (!has_interface<PPB_NetworkList_1_0>()) | 
|  | return PP_NETWORKLIST_STATE_DOWN; | 
|  | return get_interface<PPB_NetworkList_1_0>()->GetState( | 
|  | pp_resource(), index); | 
|  | } | 
|  |  | 
|  | int32_t NetworkList::GetIpAddresses( | 
|  | uint32_t index, | 
|  | std::vector<NetAddress>* addresses) const { | 
|  | if (!has_interface<PPB_NetworkList_1_0>()) | 
|  | return PP_ERROR_NOINTERFACE; | 
|  | if (!addresses) | 
|  | return PP_ERROR_BADARGUMENT; | 
|  |  | 
|  | ResourceArrayOutputAdapter<NetAddress> adapter(addresses); | 
|  | return get_interface<PPB_NetworkList_1_0>()->GetIpAddresses( | 
|  | pp_resource(), index, adapter.pp_array_output()); | 
|  | } | 
|  |  | 
|  | std::string NetworkList::GetDisplayName(uint32_t index) const { | 
|  | if (!has_interface<PPB_NetworkList_1_0>()) | 
|  | return std::string(); | 
|  | Var result(PASS_REF, | 
|  | get_interface<PPB_NetworkList_1_0>()->GetDisplayName( | 
|  | pp_resource(), index)); | 
|  | return result.is_string() ? result.AsString() : std::string(); | 
|  | } | 
|  |  | 
|  | uint32_t NetworkList::GetMTU(uint32_t index) const { | 
|  | if (!has_interface<PPB_NetworkList_1_0>()) | 
|  | return 0; | 
|  | return get_interface<PPB_NetworkList_1_0>()->GetMTU( | 
|  | pp_resource(), index); | 
|  | } | 
|  |  | 
|  | }  // namespace pp |