blob: 62f5bdff6cb4d8fddbe97a504bc893cd606234c0 [file] [log] [blame]
// Copyright 2015 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 GARNET_BIN_HTTP_HTTP_URL_LOADER_IMPL_H_
#define GARNET_BIN_HTTP_HTTP_URL_LOADER_IMPL_H_
#include <fuchsia/net/oldhttp/cpp/fidl.h>
#include <lib/fit/function.h>
#include "lib/fidl/cpp/binding.h"
#include "src/lib/url/gurl.h"
namespace http {
class URLLoaderImpl : public ::fuchsia::net::oldhttp::URLLoader {
public:
// Coordinates requests to limit the number of concurrent active requests.
class Coordinator {
public:
virtual ~Coordinator() {}
virtual void RequestNetworkSlot(
fit::function<void(fit::closure)> slot_request) = 0;
};
URLLoaderImpl(Coordinator* coordinator);
~URLLoaderImpl() override;
private:
template <typename T>
class HTTPClient;
using Callback = fit::function<void(::fuchsia::net::oldhttp::URLResponse)>;
// URLLoader methods:
void Start(::fuchsia::net::oldhttp::URLRequest request,
StartCallback callback) override;
void FollowRedirect(FollowRedirectCallback callback) override;
void QueryStatus(QueryStatusCallback callback) override;
void SendError(int error_code);
void FollowRedirectInternal();
void SendResponse(::fuchsia::net::oldhttp::URLResponse response);
void StartInternal(::fuchsia::net::oldhttp::URLRequest request);
Coordinator* coordinator_;
Callback callback_;
::fuchsia::net::oldhttp::ResponseBodyMode response_body_mode_;
// bool auto_follow_redirects_;
url::GURL current_url_;
::fuchsia::net::oldhttp::URLLoaderStatus last_status_;
};
} // namespace http
#endif // GARNET_BIN_HTTP_HTTP_URL_LOADER_IMPL_H_