blob: ab69daca890049c5827d97cb6936b1a3784706d3 [file] [log] [blame]
// 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 "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.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(
mojo::PendingRemote<mojom::ProxyLookupClient> 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_;
mojo::Remote<mojom::ProxyLookupClient> 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_