1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_IMPL_H_
6#define CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_IMPL_H_
7
8#include "chrome/browser/local_discovery/privet_http.h"
9#include "chrome/browser/local_discovery/privet_http_asynchronous_factory.h"
10#include "chrome/common/local_discovery/service_discovery_client.h"
11
12namespace local_discovery {
13
14class PrivetHTTPAsynchronousFactoryImpl : public PrivetHTTPAsynchronousFactory {
15 public:
16  PrivetHTTPAsynchronousFactoryImpl(
17      ServiceDiscoveryClient* service_discovery_client,
18      net::URLRequestContextGetter* request_context);
19  virtual ~PrivetHTTPAsynchronousFactoryImpl();
20
21  virtual scoped_ptr<PrivetHTTPResolution> CreatePrivetHTTP(
22      const std::string& name,
23      const net::HostPortPair& address,
24      const ResultCallback& callback) OVERRIDE;
25
26 private:
27  class ResolutionImpl : public PrivetHTTPResolution {
28   public:
29    ResolutionImpl(const std::string& name,
30                   const net::HostPortPair& address,
31                   const ResultCallback& callback,
32                   ServiceDiscoveryClient* service_discovery_client,
33                   net::URLRequestContextGetter* request_context);
34    virtual ~ResolutionImpl();
35
36    virtual void Start() OVERRIDE;
37    virtual const std::string& GetName() OVERRIDE;
38
39   private:
40    void ResolveComplete(bool success,
41                         const net::IPAddressNumber& address_ipv4,
42                         const net::IPAddressNumber& address_ipv6);
43
44    std::string name_;
45    scoped_ptr<LocalDomainResolver> resolver_;
46    net::HostPortPair hostport_;
47    ResultCallback callback_;
48    scoped_refptr<net::URLRequestContextGetter> request_context_;
49  };
50
51  ServiceDiscoveryClient* service_discovery_client_;
52  scoped_refptr<net::URLRequestContextGetter> request_context_;
53};
54
55}  // namespace local_discovery
56
57#endif  // CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_IMPL_H_
58