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

// http://fetch.spec.whatwg.org/#request-class

typedef (Request or USVString) RequestInfo;

enum RequestContext {
    "", "audio", "beacon", "cspreport", "download", "embed", "eventsource", "favicon",
    "fetch", "font", "form", "frame", "hyperlink", "iframe", "image", "imageset", "import",
    "internal", "location", "manifest", "metarefresh", "object", "ping", "plugin",
    "prefetch", "script", "serviceworker", "sharedworker",
    "subresource", "style", "track", "video", "worker", "xmlhttprequest", "xslt"
};
enum RequestMode { "navigate", "same-origin", "no-cors", "cors" };
enum RequestCredentials { "omit", "same-origin", "include" };
enum RequestRedirect { "follow", "error", "manual" };

// https://w3c.github.io/webappsec-referrer-policy/#referrer-policies

enum ReferrerPolicy {
    "",
    "no-referrer",
    "no-referrer-when-downgrade",
    "origin",
    "origin-when-cross-origin",
    "unsafe-url"
};

[
    ActiveScriptWrappable,
    Constructor(RequestInfo input, optional Dictionary requestInitDict),
    ConstructorCallWith=ScriptState,
    Exposed=(Window,Worker),
    RaisesException=Constructor,
    DependentLifetime,
] interface Request {
    readonly attribute ByteString method;
    readonly attribute USVString url;
    [ImplementedAs=getHeaders] readonly attribute Headers headers;
    readonly attribute DOMString referrer;
    readonly attribute ReferrerPolicy referrerPolicy;
    readonly attribute RequestMode mode;
    readonly attribute RequestCredentials credentials;
    readonly attribute RequestRedirect redirect;
    readonly attribute DOMString integrity;

    [RaisesException, CallWith=ScriptState] Request clone();
};

Request implements Body;
