host_resolver_private_resource.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef PPAPI_PROXY_HOST_RESOLVER_PRIVATE_RESOURCE_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define PPAPI_PROXY_HOST_RESOLVER_PRIVATE_RESOURCE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/plugin_resource.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/ppapi_proxy_export.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/tracked_callback.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/ppb_host_resolver_private_api.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct HostPortPair {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string host;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint16_t port;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace proxy {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PPAPI_PROXY_EXPORT HostResolverPrivateResource
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : public PluginResource,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      public thunk::PPB_HostResolver_Private_API {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  HostResolverPrivateResource(Connection connection,
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              PP_Instance instance);
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~HostResolverPrivateResource();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // PluginResource overrides.
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual thunk::PPB_HostResolver_Private_API*
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AsPPB_HostResolver_Private_API() OVERRIDE;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PPB_HostResolver_Private_API implementation.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int32_t Resolve(const char* host,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          uint16_t port,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const PP_HostResolver_Private_Hint* hint,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          scoped_refptr<TrackedCallback> callback) OVERRIDE;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual PP_Var GetCanonicalName() OVERRIDE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual uint32_t GetSize() OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetNetAddress(uint32_t index,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             PP_NetAddress_Private* address) OVERRIDE;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // IPC message handlers.
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnPluginMsgResolveReply(
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const ResourceMessageReplyParams& params,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string& canonical_name,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::vector<PP_NetAddress_Private>& net_address_list);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SendResolve(const HostPortPair& host_port,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   const PP_HostResolver_Private_Hint* hint);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ResolveInProgress() const;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<TrackedCallback> resolve_callback_;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string canonical_name_;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<PP_NetAddress_Private> net_address_list_;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(HostResolverPrivateResource);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace proxy
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ppapi
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // PPAPI_PROXY_HOST_RESOLVER_PRIVATE_RESOURCE_H_
74