1d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// found in the LICENSE file. 4d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ppapi/proxy/network_list_resource.h" 6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 7d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <algorithm> 8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/logging.h" 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ppapi/c/pp_errors.h" 11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ppapi/shared_impl/array_writer.h" 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ppapi/shared_impl/var.h" 13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ppapi/thunk/enter.h" 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace ppapi { 16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace proxy { 17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)NetworkListResource::NetworkListResource(PP_Instance instance, 19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const SerializedNetworkList& list) 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) : Resource(OBJECT_IS_PROXY, instance), 21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) list_(list) { 22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)NetworkListResource::~NetworkListResource() {} 25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)thunk::PPB_NetworkList_API* NetworkListResource::AsPPB_NetworkList_API() { 27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return this; 28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)uint32_t NetworkListResource::GetCount() { 31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return static_cast<uint32_t>(list_.size()); 32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)PP_Var NetworkListResource::GetName(uint32_t index) { 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (index >= list_.size()) 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return PP_MakeUndefined(); 37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return StringVar::StringToPPVar(list_.at(index).name); 38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)PP_NetworkList_Type NetworkListResource::GetType(uint32_t index) { 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (index >= list_.size()) 4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return PP_NETWORKLIST_TYPE_UNKNOWN; 43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return list_.at(index).type; 44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)PP_NetworkList_State NetworkListResource::GetState(uint32_t index) { 47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (index >= list_.size()) 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return PP_NETWORKLIST_STATE_DOWN; 49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return list_.at(index).state; 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)int32_t NetworkListResource::GetIpAddresses(uint32_t index, 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const PP_ArrayOutput& output) { 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ArrayWriter writer(output); 55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (index >= list_.size() || !writer.is_valid()) 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return PP_ERROR_BADARGUMENT; 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) thunk::EnterResourceCreationNoLock enter(pp_instance()); 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (enter.failed()) 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return PP_ERROR_FAILED; 61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::vector<PP_NetAddress_Private>& addresses = 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) list_.at(index).addresses; 64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) std::vector<PP_Resource> addr_resources; 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) for (size_t i = 0; i < addresses.size(); ++i) { 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) addr_resources.push_back( 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) enter.functions()->CreateNetAddressFromNetAddressPrivate( 68d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) pp_instance(), addresses[i])); 69d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 70d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (!writer.StoreResourceVector(addr_resources)) 71d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return PP_ERROR_FAILED; 72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return PP_OK; 74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 75d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 76d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)PP_Var NetworkListResource::GetDisplayName(uint32_t index) { 77d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (index >= list_.size()) 78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return PP_MakeUndefined(); 79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return StringVar::StringToPPVar(list_.at(index).display_name); 80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)uint32_t NetworkListResource::GetMTU(uint32_t index) { 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (index >= list_.size()) 84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return 0; 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return list_.at(index).mtu; 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace proxy 89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace thunk 90