// Copyright 2013 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. #ifndef PPAPI_PROXY_HOST_RESOLVER_RESOURCE_BASE_H_ #define PPAPI_PROXY_HOST_RESOLVER_RESOURCE_BASE_H_ #include <string> #include <vector> #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory/ref_counted.h" #include "ppapi/c/private/ppb_host_resolver_private.h" #include "ppapi/proxy/plugin_resource.h" #include "ppapi/proxy/ppapi_proxy_export.h" namespace ppapi { class TrackedCallback; struct HostPortPair { std::string host; uint16_t port; }; namespace proxy { class NetAddressResource; class PPAPI_PROXY_EXPORT HostResolverResourceBase: public PluginResource { public: HostResolverResourceBase(Connection connection, PP_Instance instance, bool private_api); virtual ~HostResolverResourceBase(); int32_t ResolveImpl(const char* host, uint16_t port, const PP_HostResolver_Private_Hint* hint, scoped_refptr<TrackedCallback> callback); PP_Var GetCanonicalNameImpl(); uint32_t GetSizeImpl(); scoped_refptr<NetAddressResource> GetNetAddressImpl(uint32_t index); private: // IPC message handlers. void OnPluginMsgResolveReply( const ResourceMessageReplyParams& params, const std::string& canonical_name, const std::vector<PP_NetAddress_Private>& net_address_list); void SendResolve(const HostPortPair& host_port, const PP_HostResolver_Private_Hint* hint); bool ResolveInProgress() const; bool private_api_; scoped_refptr<TrackedCallback> resolve_callback_; // Set to false if there is a pending resolve request or the previous request // failed. bool allow_get_results_; std::string canonical_name_; std::vector<scoped_refptr<NetAddressResource> > net_address_list_; DISALLOW_COPY_AND_ASSIGN(HostResolverResourceBase); }; } // namespace proxy } // namespace ppapi #endif // PPAPI_PROXY_HOST_RESOLVER_RESOURCE_BASE_H_