text: // 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 CHROME_BROWSER_PREDICTORS_PROXY_LOOKUP_CLIENT_IMPL_H_
  #define CHROME_BROWSER_PREDICTORS_PROXY_LOOKUP_CLIENT_IMPL_H_
  
  #include "base/bind.h"
  #include "mojo/public/cpp/bindings/receiver.h"
  #include "services/network/public/mojom/proxy_lookup_client.mojom.h"
  #include "third_party/abseil-cpp/absl/types/optional.h"
  
  class GURL;
  
  namespace net {
  class NetworkIsolationKey;
  }
  
  namespace network {
  namespace mojom {
  class NetworkContext;
  }
  }  // namespace network
  
  namespace predictors {
  
  using ProxyLookupCallback = base::OnceCallback<void(bool success)>;
  
  // This class helps perform the proxy lookup using the NetworkContext.
  // An instance of this class must be deleted after the callback is invoked.
  class ProxyLookupClientImpl : public network::mojom::ProxyLookupClient {
   public:
    // Starts the proxy lookup for |url|. |callback| is called when the proxy
    // lookup is completed or when an error occurs.
    ProxyLookupClientImpl(const GURL& url,
                          const net::NetworkIsolationKey& network_isolation_key,
                          ProxyLookupCallback callback,
                          network::mojom::NetworkContext* network_context);
  
    ProxyLookupClientImpl(const ProxyLookupClientImpl&) = delete;
    ProxyLookupClientImpl& operator=(const ProxyLookupClientImpl&) = delete;
  
    // Cancels the request if it hasn't been completed yet.
    ~ProxyLookupClientImpl() override;
  
    // network::mojom::ProxyLookupClient:
    void OnProxyLookupComplete(
        int32_t net_error,
        const absl::optional<net::ProxyInfo>& proxy_info) override;
  
   private:
    mojo::Receiver<network::mojom::ProxyLookupClient> receiver_{this};
    ProxyLookupCallback callback_;
  };
  
  }  // namespace predictors
  
  #endif  // CHROME_BROWSER_PREDICTORS_PROXY_LOOKUP_CLIENT_IMPL_H_
  