Project import generated by Copybara.

PiperOrigin-RevId: 237361882
Change-Id: I109a68f44db867b20f8c6a7732b0ce657133e52a
diff --git a/quic/tools/quic_backend_response.h b/quic/tools/quic_backend_response.h
new file mode 100644
index 0000000..cd052c8
--- /dev/null
+++ b/quic/tools/quic_backend_response.h
@@ -0,0 +1,84 @@
+// Copyright 2017 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 QUICHE_QUIC_TOOLS_QUIC_BACKEND_RESPONSE_H_
+#define QUICHE_QUIC_TOOLS_QUIC_BACKEND_RESPONSE_H_
+
+#include "net/third_party/quiche/src/quic/core/http/spdy_utils.h"
+#include "net/third_party/quiche/src/quic/tools/quic_url.h"
+
+namespace quic {
+
+// Container for HTTP response header/body pairs
+// fetched by the QuicSimpleServerBackend
+class QuicBackendResponse {
+ public:
+  // A ServerPushInfo contains path of the push request and everything needed in
+  // comprising a response for the push request.
+  struct ServerPushInfo {
+    ServerPushInfo(QuicUrl request_url,
+                   spdy::SpdyHeaderBlock headers,
+                   spdy::SpdyPriority priority,
+                   QuicString body);
+    ServerPushInfo(const ServerPushInfo& other);
+
+    QuicUrl request_url;
+    spdy::SpdyHeaderBlock headers;
+    spdy::SpdyPriority priority;
+    QuicString body;
+  };
+
+  enum SpecialResponseType {
+    REGULAR_RESPONSE,      // Send the headers and body like a server should.
+    CLOSE_CONNECTION,      // Close the connection (sending the close packet).
+    IGNORE_REQUEST,        // Do nothing, expect the client to time out.
+    BACKEND_ERR_RESPONSE,  // There was an error fetching the response from
+                           // the backend, for example as a TCP connection
+                           // error.
+    INCOMPLETE_RESPONSE,   // The server will act as if there is a non-empty
+                           // trailer but it will not be sent, as a result, FIN
+                           // will not be sent too.
+    STOP_SENDING,          // Acts like INCOMPLETE_RESPONSE in that the entire
+                           // response is not sent. After sending what is sent,
+                           // the server will send a STOP_SENDING.
+  };
+  QuicBackendResponse();
+
+  QuicBackendResponse(const QuicBackendResponse& other) = delete;
+  QuicBackendResponse& operator=(const QuicBackendResponse& other) = delete;
+
+  ~QuicBackendResponse();
+
+  SpecialResponseType response_type() const { return response_type_; }
+  const spdy::SpdyHeaderBlock& headers() const { return headers_; }
+  const spdy::SpdyHeaderBlock& trailers() const { return trailers_; }
+  const QuicStringPiece body() const { return QuicStringPiece(body_); }
+
+  void set_response_type(SpecialResponseType response_type) {
+    response_type_ = response_type;
+  }
+
+  void set_headers(spdy::SpdyHeaderBlock headers) {
+    headers_ = std::move(headers);
+  }
+  void set_trailers(spdy::SpdyHeaderBlock trailers) {
+    trailers_ = std::move(trailers);
+  }
+  void set_body(QuicStringPiece body) {
+    body_.assign(body.data(), body.size());
+  }
+  uint16_t stop_sending_code() const { return stop_sending_code_; }
+  void set_stop_sending_code(uint16_t code) { stop_sending_code_ = code; }
+
+ private:
+  SpecialResponseType response_type_;
+  spdy::SpdyHeaderBlock headers_;
+  spdy::SpdyHeaderBlock trailers_;
+  QuicString body_;
+  uint16_t stop_sending_code_;
+};
+
+}  // namespace quic
+
+#endif  // QUICHE_QUIC_TOOLS_QUIC_BACKEND_RESPONSE_H_