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

#ifndef RequestInit_h
#define RequestInit_h

#include "bindings/modules/v8/byte_string_sequence_sequence_or_byte_string_byte_string_record.h"
#include "modules/fetch/Headers.h"
#include "platform/heap/Handle.h"
#include "platform/network/EncodedFormData.h"
#include "platform/weborigin/Referrer.h"
#include "platform/wtf/RefPtr.h"
#include "platform/wtf/text/WTFString.h"

namespace blink {

class BytesConsumer;
class Dictionary;
class ExecutionContext;
class ExceptionState;

// FIXME: Use IDL dictionary instead of this class.
class RequestInit {
  STACK_ALLOCATED();

 public:
  RequestInit(ExecutionContext*, const Dictionary&, ExceptionState&);

  const String& Method() const { return method_; }
  const HeadersInit& GetHeaders() const { return headers_; }
  const String& ContentType() const { return content_type_; }
  BytesConsumer* GetBody() { return body_; }
  const Referrer& GetReferrer() const { return referrer_; }
  const String& Mode() const { return mode_; }
  const String& Credentials() const { return credentials_; }
  const String& CacheMode() const { return cache_; }
  const String& Redirect() const { return redirect_; }
  const String& Integrity() const { return integrity_; }
  RefPtr<EncodedFormData> AttachedCredential() { return attached_credential_; }
  bool AreAnyMembersSet() const { return are_any_members_set_; }

 private:
  String method_;
  HeadersInit headers_;
  String content_type_;
  Member<BytesConsumer> body_;
  Referrer referrer_;
  String mode_;
  String credentials_;
  String cache_;
  String redirect_;
  String integrity_;
  RefPtr<EncodedFormData> attached_credential_;
  // True if any members in RequestInit are set and hence the referrer member
  // should be used in the Request constructor.
  bool are_any_members_set_ = false;
};

}  // namespace blink

#endif  // RequestInit_h
