// 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 CONTENT_RENDERER_LOADER_SYNC_LOAD_RESPONSE_H_
#define CONTENT_RENDERER_LOADER_SYNC_LOAD_RESPONSE_H_

#include <string>

#include "base/optional.h"
#include "content/common/content_export.h"
#include "services/network/public/cpp/cors/cors_error_status.h"
#include "services/network/public/cpp/resource_response_info.h"
#include "services/network/public/mojom/url_loader.mojom.h"
#include "third_party/blink/public/mojom/blob/serialized_blob.mojom.h"
#include "url/gurl.h"

namespace content {

class SyncLoadContext;

// See the SyncLoad method. (The name of this struct is not
// suffixed with "Info" because it also contains the response data.)
struct CONTENT_EXPORT SyncLoadResponse {
  SyncLoadResponse();
  SyncLoadResponse(SyncLoadResponse&& other);
  ~SyncLoadResponse();

  SyncLoadResponse& operator=(SyncLoadResponse&& other);

  base::Optional<net::RedirectInfo> redirect_info;
  SyncLoadContext* context_for_redirect = nullptr;

  network::ResourceResponseInfo info;

  // The response error code.
  int error_code;

  // The response extended error code.
  int extended_error_code = 0;

  // Optional CORS error details.
  base::Optional<network::CORSErrorStatus> cors_error;

  // The final URL of the response.  This may differ from the request URL in
  // the case of a server redirect.
  GURL url;

  // The response data.
  std::string data;

  // Used for blob response type XMLHttpRequest.
  blink::mojom::SerializedBlobPtr downloaded_blob;
};

}  // namespace content

#endif  // CONTENT_RENDERER_LOADER_SYNC_LOAD_RESPONSE_H_
