// 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_