// 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.

library fuchsia.net.oldhttp;

// Specify the cache behavior of the request.
enum CacheMode {
  // Default behavior.
  DEFAULT = 0;

  // The HTTP request will bypass the local cache and will have a
  // 'Cache-Control: nocache' header added in that causes any proxy servers
  // to also not satisfy the request from their cache.  This has the effect
  // of forcing a full end-to-end fetch.
  BYPASS_CACHE = 1;

  // The HTTP request will fail if it cannot serve the requested resource
  // from the cache (or some equivalent local store).
  ONLY_FROM_CACHE = 2;
};

// Specify the mechanism used to return the response body.
enum ResponseBodyMode {
  // The complete response body should be returned in the |buffer| field of
  // the response body.
  BUFFER = 0;
  // The response body should be streamed through the |stream| field of the
  // response body.
  STREAM = 1;
  // The response body may be returned as a buffer or stream.
  BUFFER_OR_STREAM = 2;
};

struct URLRequest {
  // The URL to load.
  string url;

  // The HTTP method if applicable.
  string method = "GET";

  // Additional HTTP request headers.
  vector<HttpHeader>? headers;

  // The payload for the request body. For HTTP requests, the method must be set
  // to "POST" or "PUT". If a buffer is used for the body, a Content-Length
  // header will automatically be added.
  URLBody? body;

  // The buffer size of the socket returned in URLResponse's |body| member.
  // A value of 0 indicates that the default buffer size should be used.  This
  // value is just a suggestion. The URLLoader may choose to ignore this value.
  uint32 response_body_buffer_size = 0;

  // If set to true, then redirects will be automatically followed. Otherwise,
  // when a redirect is encounterd, FollowRedirect must be called to proceed.
  bool auto_follow_redirects = false;

  // The cache behavior for the request.
  CacheMode cache_mode = DEFAULT;

  // The response body mode.
  ResponseBodyMode response_body_mode = STREAM;
};