// Copyright 2018 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 SERVICES_NETWORK_PROXY_LOOKUP_REQUEST_H_
#define SERVICES_NETWORK_PROXY_LOOKUP_REQUEST_H_

#include <stdint.h>

#include <memory>

#include "base/component_export.h"
#include "base/macros.h"
#include "net/proxy_resolution/proxy_info.h"
#include "net/proxy_resolution/proxy_resolution_service.h"
#include "services/network/public/mojom/proxy_lookup_client.mojom.h"
#include "url/gurl.h"

namespace network {

class NetworkContext;

// Single-use object to manage a proxy lookup.
class COMPONENT_EXPORT(NETWORK_SERVICE) ProxyLookupRequest {
 public:
  ProxyLookupRequest(mojom::ProxyLookupClientPtr proxy_lookup_client,
                     NetworkContext* network_context);
  ~ProxyLookupRequest();

  // Starts looking up what proxy to use for |url|. On completion, will inform
  // both the ProxyLookupClient and the NetworkContext that it has completed.
  // On synchronous completion, will inform the NetworkContext of completion
  // re-entrantly. If destroyed before the lookup completes, informs the client
  // that the lookup was aborted.
  void Start(const GURL& url);

 private:
  void OnResolveComplete(int result);

  // Cancels |request_| and tells |network_context_| to delete |this|.
  void DestroySelf();

  NetworkContext* const network_context_;
  mojom::ProxyLookupClientPtr proxy_lookup_client_;

  net::ProxyInfo proxy_info_;
  std::unique_ptr<net::ProxyResolutionService::Request> request_;

  DISALLOW_COPY_AND_ASSIGN(ProxyLookupRequest);
};

}  // namespace network

#endif  // SERVICES_NETWORK_PROXY_LOOKUP_REQUEST_H_
