Remove QuicClientPromisedInfo.

PiperOrigin-RevId: 571097005
diff --git a/build/source_list.bzl b/build/source_list.bzl
index a5f0c9c..3fea228 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -219,7 +219,6 @@
     "quic/core/http/http_decoder.h",
     "quic/core/http/http_encoder.h",
     "quic/core/http/http_frames.h",
-    "quic/core/http/quic_client_promised_info.h",
     "quic/core/http/quic_client_push_promise_index.h",
     "quic/core/http/quic_header_list.h",
     "quic/core/http/quic_headers_stream.h",
@@ -559,7 +558,6 @@
     "quic/core/http/http_constants.cc",
     "quic/core/http/http_decoder.cc",
     "quic/core/http/http_encoder.cc",
-    "quic/core/http/quic_client_promised_info.cc",
     "quic/core/http/quic_header_list.cc",
     "quic/core/http/quic_headers_stream.cc",
     "quic/core/http/quic_receive_control_stream.cc",
@@ -782,7 +780,6 @@
     "quic/test_tools/mock_clock.h",
     "quic/test_tools/mock_connection_id_generator.h",
     "quic/test_tools/mock_load_balancer_encoder.h",
-    "quic/test_tools/mock_quic_client_promised_info.h",
     "quic/test_tools/mock_quic_dispatcher.h",
     "quic/test_tools/mock_quic_session_visitor.h",
     "quic/test_tools/mock_quic_spdy_client_stream.h",
@@ -795,7 +792,6 @@
     "quic/test_tools/qpack/qpack_offline_decoder.h",
     "quic/test_tools/qpack/qpack_test_utils.h",
     "quic/test_tools/quic_buffered_packet_store_peer.h",
-    "quic/test_tools/quic_client_promised_info_peer.h",
     "quic/test_tools/quic_client_session_cache_peer.h",
     "quic/test_tools/quic_coalesced_packet_peer.h",
     "quic/test_tools/quic_config_peer.h",
@@ -882,7 +878,6 @@
     "quic/test_tools/first_flight.cc",
     "quic/test_tools/limited_mtu_test_writer.cc",
     "quic/test_tools/mock_clock.cc",
-    "quic/test_tools/mock_quic_client_promised_info.cc",
     "quic/test_tools/mock_quic_dispatcher.cc",
     "quic/test_tools/mock_quic_session_visitor.cc",
     "quic/test_tools/mock_quic_spdy_client_stream.cc",
@@ -895,7 +890,6 @@
     "quic/test_tools/qpack/qpack_offline_decoder.cc",
     "quic/test_tools/qpack/qpack_test_utils.cc",
     "quic/test_tools/quic_buffered_packet_store_peer.cc",
-    "quic/test_tools/quic_client_promised_info_peer.cc",
     "quic/test_tools/quic_coalesced_packet_peer.cc",
     "quic/test_tools/quic_config_peer.cc",
     "quic/test_tools/quic_connection_peer.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index b9af29c..3848790 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -219,7 +219,6 @@
     "src/quiche/quic/core/http/http_decoder.h",
     "src/quiche/quic/core/http/http_encoder.h",
     "src/quiche/quic/core/http/http_frames.h",
-    "src/quiche/quic/core/http/quic_client_promised_info.h",
     "src/quiche/quic/core/http/quic_client_push_promise_index.h",
     "src/quiche/quic/core/http/quic_header_list.h",
     "src/quiche/quic/core/http/quic_headers_stream.h",
@@ -559,7 +558,6 @@
     "src/quiche/quic/core/http/http_constants.cc",
     "src/quiche/quic/core/http/http_decoder.cc",
     "src/quiche/quic/core/http/http_encoder.cc",
-    "src/quiche/quic/core/http/quic_client_promised_info.cc",
     "src/quiche/quic/core/http/quic_header_list.cc",
     "src/quiche/quic/core/http/quic_headers_stream.cc",
     "src/quiche/quic/core/http/quic_receive_control_stream.cc",
@@ -782,7 +780,6 @@
     "src/quiche/quic/test_tools/mock_clock.h",
     "src/quiche/quic/test_tools/mock_connection_id_generator.h",
     "src/quiche/quic/test_tools/mock_load_balancer_encoder.h",
-    "src/quiche/quic/test_tools/mock_quic_client_promised_info.h",
     "src/quiche/quic/test_tools/mock_quic_dispatcher.h",
     "src/quiche/quic/test_tools/mock_quic_session_visitor.h",
     "src/quiche/quic/test_tools/mock_quic_spdy_client_stream.h",
@@ -795,7 +792,6 @@
     "src/quiche/quic/test_tools/qpack/qpack_offline_decoder.h",
     "src/quiche/quic/test_tools/qpack/qpack_test_utils.h",
     "src/quiche/quic/test_tools/quic_buffered_packet_store_peer.h",
-    "src/quiche/quic/test_tools/quic_client_promised_info_peer.h",
     "src/quiche/quic/test_tools/quic_client_session_cache_peer.h",
     "src/quiche/quic/test_tools/quic_coalesced_packet_peer.h",
     "src/quiche/quic/test_tools/quic_config_peer.h",
@@ -882,7 +878,6 @@
     "src/quiche/quic/test_tools/first_flight.cc",
     "src/quiche/quic/test_tools/limited_mtu_test_writer.cc",
     "src/quiche/quic/test_tools/mock_clock.cc",
-    "src/quiche/quic/test_tools/mock_quic_client_promised_info.cc",
     "src/quiche/quic/test_tools/mock_quic_dispatcher.cc",
     "src/quiche/quic/test_tools/mock_quic_session_visitor.cc",
     "src/quiche/quic/test_tools/mock_quic_spdy_client_stream.cc",
@@ -895,7 +890,6 @@
     "src/quiche/quic/test_tools/qpack/qpack_offline_decoder.cc",
     "src/quiche/quic/test_tools/qpack/qpack_test_utils.cc",
     "src/quiche/quic/test_tools/quic_buffered_packet_store_peer.cc",
-    "src/quiche/quic/test_tools/quic_client_promised_info_peer.cc",
     "src/quiche/quic/test_tools/quic_coalesced_packet_peer.cc",
     "src/quiche/quic/test_tools/quic_config_peer.cc",
     "src/quiche/quic/test_tools/quic_connection_peer.cc",
diff --git a/build/source_list.json b/build/source_list.json
index f8b86d4..b900595 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -218,7 +218,6 @@
     "quiche/quic/core/http/http_decoder.h",
     "quiche/quic/core/http/http_encoder.h",
     "quiche/quic/core/http/http_frames.h",
-    "quiche/quic/core/http/quic_client_promised_info.h",
     "quiche/quic/core/http/quic_client_push_promise_index.h",
     "quiche/quic/core/http/quic_header_list.h",
     "quiche/quic/core/http/quic_headers_stream.h",
@@ -558,7 +557,6 @@
     "quiche/quic/core/http/http_constants.cc",
     "quiche/quic/core/http/http_decoder.cc",
     "quiche/quic/core/http/http_encoder.cc",
-    "quiche/quic/core/http/quic_client_promised_info.cc",
     "quiche/quic/core/http/quic_header_list.cc",
     "quiche/quic/core/http/quic_headers_stream.cc",
     "quiche/quic/core/http/quic_receive_control_stream.cc",
@@ -781,7 +779,6 @@
     "quiche/quic/test_tools/mock_clock.h",
     "quiche/quic/test_tools/mock_connection_id_generator.h",
     "quiche/quic/test_tools/mock_load_balancer_encoder.h",
-    "quiche/quic/test_tools/mock_quic_client_promised_info.h",
     "quiche/quic/test_tools/mock_quic_dispatcher.h",
     "quiche/quic/test_tools/mock_quic_session_visitor.h",
     "quiche/quic/test_tools/mock_quic_spdy_client_stream.h",
@@ -794,7 +791,6 @@
     "quiche/quic/test_tools/qpack/qpack_offline_decoder.h",
     "quiche/quic/test_tools/qpack/qpack_test_utils.h",
     "quiche/quic/test_tools/quic_buffered_packet_store_peer.h",
-    "quiche/quic/test_tools/quic_client_promised_info_peer.h",
     "quiche/quic/test_tools/quic_client_session_cache_peer.h",
     "quiche/quic/test_tools/quic_coalesced_packet_peer.h",
     "quiche/quic/test_tools/quic_config_peer.h",
@@ -881,7 +877,6 @@
     "quiche/quic/test_tools/first_flight.cc",
     "quiche/quic/test_tools/limited_mtu_test_writer.cc",
     "quiche/quic/test_tools/mock_clock.cc",
-    "quiche/quic/test_tools/mock_quic_client_promised_info.cc",
     "quiche/quic/test_tools/mock_quic_dispatcher.cc",
     "quiche/quic/test_tools/mock_quic_session_visitor.cc",
     "quiche/quic/test_tools/mock_quic_spdy_client_stream.cc",
@@ -894,7 +889,6 @@
     "quiche/quic/test_tools/qpack/qpack_offline_decoder.cc",
     "quiche/quic/test_tools/qpack/qpack_test_utils.cc",
     "quiche/quic/test_tools/quic_buffered_packet_store_peer.cc",
-    "quiche/quic/test_tools/quic_client_promised_info_peer.cc",
     "quiche/quic/test_tools/quic_coalesced_packet_peer.cc",
     "quiche/quic/test_tools/quic_config_peer.cc",
     "quiche/quic/test_tools/quic_connection_peer.cc",
diff --git a/quiche/quic/core/http/quic_client_promised_info.cc b/quiche/quic/core/http/quic_client_promised_info.cc
deleted file mode 100644
index bc1dabe..0000000
--- a/quiche/quic/core/http/quic_client_promised_info.cc
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright (c) 2016 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.
-
-#include "quiche/quic/core/http/quic_client_promised_info.h"
-
-#include <string>
-#include <utility>
-
-#include "quiche/quic/core/http/spdy_server_push_utils.h"
-#include "quiche/quic/platform/api/quic_logging.h"
-#include "quiche/spdy/core/spdy_protocol.h"
-
-using spdy::Http2HeaderBlock;
-
-namespace quic {
-
-QuicClientPromisedInfo::QuicClientPromisedInfo(
-    QuicSpdyClientSessionBase* session, QuicStreamId id, std::string url)
-    : session_(session),
-      id_(id),
-      url_(std::move(url)),
-      client_request_delegate_(nullptr) {}
-
-QuicClientPromisedInfo::~QuicClientPromisedInfo() {
-  if (cleanup_alarm_ != nullptr) {
-    cleanup_alarm_->PermanentCancel();
-  }
-}
-
-void QuicClientPromisedInfo::CleanupAlarm::OnAlarm() {
-  QUIC_DVLOG(1) << "self GC alarm for stream " << promised_->id_;
-  promised_->session()->OnPushStreamTimedOut(promised_->id_);
-  promised_->Reset(QUIC_PUSH_STREAM_TIMED_OUT);
-}
-
-void QuicClientPromisedInfo::Init() {
-  cleanup_alarm_.reset(session_->connection()->alarm_factory()->CreateAlarm(
-      new QuicClientPromisedInfo::CleanupAlarm(this)));
-  cleanup_alarm_->Set(
-      session_->connection()->helper()->GetClock()->ApproximateNow() +
-      QuicTime::Delta::FromSeconds(kPushPromiseTimeoutSecs));
-}
-
-bool QuicClientPromisedInfo::OnPromiseHeaders(const Http2HeaderBlock& headers) {
-  // RFC7540, Section 8.2, requests MUST be safe [RFC7231], Section
-  // 4.2.1.  GET and HEAD are the methods that are safe and required.
-  Http2HeaderBlock::const_iterator it = headers.find(spdy::kHttp2MethodHeader);
-  if (it == headers.end()) {
-    QUIC_DVLOG(1) << "Promise for stream " << id_ << " has no method";
-    Reset(QUIC_INVALID_PROMISE_METHOD);
-    return false;
-  }
-  if (!(it->second == "GET" || it->second == "HEAD")) {
-    QUIC_DVLOG(1) << "Promise for stream " << id_ << " has invalid method "
-                  << it->second;
-    Reset(QUIC_INVALID_PROMISE_METHOD);
-    return false;
-  }
-  if (!SpdyServerPushUtils::PromisedUrlIsValid(headers)) {
-    QUIC_DVLOG(1) << "Promise for stream " << id_ << " has invalid URL "
-                  << url_;
-    Reset(QUIC_INVALID_PROMISE_URL);
-    return false;
-  }
-  if (!session_->IsAuthorized(
-          SpdyServerPushUtils::GetPromisedHostNameFromHeaders(headers))) {
-    Reset(QUIC_UNAUTHORIZED_PROMISE_URL);
-    return false;
-  }
-  request_headers_ = headers.Clone();
-  return true;
-}
-
-void QuicClientPromisedInfo::OnResponseHeaders(
-    const Http2HeaderBlock& headers) {
-  response_headers_ = std::make_unique<Http2HeaderBlock>(headers.Clone());
-  if (client_request_delegate_) {
-    // We already have a client request waiting.
-    FinalValidation();
-  }
-}
-
-void QuicClientPromisedInfo::Reset(QuicRstStreamErrorCode /*error_code*/) {
-  QuicClientPushPromiseIndex::Delegate* delegate = client_request_delegate_;
-  if (delegate) {
-    delegate->OnRendezvousResult(nullptr);
-  }
-}
-
-QuicAsyncStatus QuicClientPromisedInfo::FinalValidation() {
-  if (!client_request_delegate_->CheckVary(
-          client_request_headers_, request_headers_, *response_headers_)) {
-    Reset(QUIC_PROMISE_VARY_MISMATCH);
-    return QUIC_FAILURE;
-  }
-  return QUIC_SUCCESS;
-}
-
-QuicAsyncStatus QuicClientPromisedInfo::HandleClientRequest(
-    const Http2HeaderBlock& request_headers,
-    QuicClientPushPromiseIndex::Delegate* delegate) {
-  if (session_->IsClosedStream(id_)) {
-    return QUIC_FAILURE;
-  }
-
-  if (is_validating()) {
-    // The push promise has already been matched to another request though
-    // pending for validation. Returns QUIC_FAILURE to the caller as it couldn't
-    // match a new request any more. This will not affect the validation of the
-    // other request.
-    return QUIC_FAILURE;
-  }
-
-  client_request_delegate_ = delegate;
-  client_request_headers_ = request_headers.Clone();
-  if (response_headers_ == nullptr) {
-    return QUIC_PENDING;
-  }
-  return FinalValidation();
-}
-
-}  // namespace quic
diff --git a/quiche/quic/core/http/quic_client_promised_info.h b/quiche/quic/core/http/quic_client_promised_info.h
deleted file mode 100644
index 2adfc38..0000000
--- a/quiche/quic/core/http/quic_client_promised_info.h
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) 2016 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_CORE_HTTP_QUIC_CLIENT_PROMISED_INFO_H_
-#define QUICHE_QUIC_CORE_HTTP_QUIC_CLIENT_PROMISED_INFO_H_
-
-#include <cstddef>
-#include <string>
-
-#include "quiche/quic/core/http/quic_client_push_promise_index.h"
-#include "quiche/quic/core/http/quic_spdy_client_session_base.h"
-#include "quiche/quic/core/http/quic_spdy_stream.h"
-#include "quiche/quic/core/quic_alarm.h"
-#include "quiche/quic/core/quic_packets.h"
-#include "quiche/quic/platform/api/quic_export.h"
-#include "quiche/spdy/core/http2_header_block.h"
-#include "quiche/spdy/core/spdy_framer.h"
-
-namespace quic {
-
-namespace test {
-class QuicClientPromisedInfoPeer;
-}  // namespace test
-
-// QuicClientPromisedInfo tracks the client state of a server push
-// stream from the time a PUSH_PROMISE is received until rendezvous
-// between the promised response and the corresponding client request
-// is complete.
-class QUICHE_EXPORT QuicClientPromisedInfo {
- public:
-  // Interface to QuicSpdyClientStream
-  QuicClientPromisedInfo(QuicSpdyClientSessionBase* session, QuicStreamId id,
-                         std::string url);
-  QuicClientPromisedInfo(const QuicClientPromisedInfo&) = delete;
-  QuicClientPromisedInfo& operator=(const QuicClientPromisedInfo&) = delete;
-  virtual ~QuicClientPromisedInfo();
-
-  void Init();
-
-  // Validate promise headers etc. Returns true if headers are valid.
-  bool OnPromiseHeaders(const spdy::Http2HeaderBlock& headers);
-
-  // Store response, possibly proceed with final validation.
-  void OnResponseHeaders(const spdy::Http2HeaderBlock& headers);
-
-  // Rendezvous between this promised stream and a client request that
-  // has a matching URL.
-  virtual QuicAsyncStatus HandleClientRequest(
-      const spdy::Http2HeaderBlock& headers,
-      QuicClientPushPromiseIndex::Delegate* delegate);
-
-  void Reset(QuicRstStreamErrorCode error_code);
-
-  // Client requests are initially associated to promises by matching
-  // URL in the client request against the URL in the promise headers,
-  // uing the |promised_by_url| map.  The push can be cross-origin, so
-  // the client should validate that the session is authoritative for
-  // the promised URL.  If not, it should call |RejectUnauthorized|.
-  QuicSpdyClientSessionBase* session() { return session_; }
-
-  // If the promised response contains Vary header, then the fields
-  // specified by Vary must match between the client request header
-  // and the promise headers (see https://crbug.com//554220).  Vary
-  // validation requires the response headers (for the actual Vary
-  // field list), the promise headers (taking the role of the "cached"
-  // request), and the client request headers.
-  spdy::Http2HeaderBlock* request_headers() { return &request_headers_; }
-
-  spdy::Http2HeaderBlock* response_headers() { return response_headers_.get(); }
-
-  // After validation, client will use this to access the pushed stream.
-
-  QuicStreamId id() const { return id_; }
-
-  const std::string url() const { return url_; }
-
-  // Return true if there's a request pending matching this push promise.
-  bool is_validating() const { return client_request_delegate_ != nullptr; }
-
- private:
-  friend class test::QuicClientPromisedInfoPeer;
-
-  class QUICHE_EXPORT CleanupAlarm : public QuicAlarm::DelegateWithoutContext {
-   public:
-    explicit CleanupAlarm(QuicClientPromisedInfo* promised)
-        : promised_(promised) {}
-
-    void OnAlarm() override;
-
-    QuicClientPromisedInfo* promised_;
-  };
-
-  QuicAsyncStatus FinalValidation();
-
-  QuicSpdyClientSessionBase* session_;
-  QuicStreamId id_;
-  std::string url_;
-  spdy::Http2HeaderBlock request_headers_;
-  std::unique_ptr<spdy::Http2HeaderBlock> response_headers_;
-  spdy::Http2HeaderBlock client_request_headers_;
-  QuicClientPushPromiseIndex::Delegate* client_request_delegate_;
-
-  // The promise will commit suicide eventually if it is not claimed by a GET
-  // first.
-  std::unique_ptr<QuicAlarm> cleanup_alarm_;
-};
-
-}  // namespace quic
-
-#endif  // QUICHE_QUIC_CORE_HTTP_QUIC_CLIENT_PROMISED_INFO_H_
diff --git a/quiche/quic/test_tools/mock_quic_client_promised_info.cc b/quiche/quic/test_tools/mock_quic_client_promised_info.cc
deleted file mode 100644
index 6729819..0000000
--- a/quiche/quic/test_tools/mock_quic_client_promised_info.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2016 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.
-
-#include "quiche/quic/test_tools/mock_quic_client_promised_info.h"
-
-namespace quic {
-namespace test {
-
-MockQuicClientPromisedInfo::MockQuicClientPromisedInfo(
-    QuicSpdyClientSessionBase* session, QuicStreamId id, std::string url)
-    : QuicClientPromisedInfo(session, id, url) {}
-
-MockQuicClientPromisedInfo::~MockQuicClientPromisedInfo() {}
-
-}  // namespace test
-}  // namespace quic
diff --git a/quiche/quic/test_tools/mock_quic_client_promised_info.h b/quiche/quic/test_tools/mock_quic_client_promised_info.h
deleted file mode 100644
index acaefef..0000000
--- a/quiche/quic/test_tools/mock_quic_client_promised_info.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2016 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_TEST_TOOLS_MOCK_QUIC_CLIENT_PROMISED_INFO_H_
-#define QUICHE_QUIC_TEST_TOOLS_MOCK_QUIC_CLIENT_PROMISED_INFO_H_
-
-#include <string>
-
-#include "quiche/quic/core/http/quic_client_promised_info.h"
-#include "quiche/quic/core/quic_packets.h"
-#include "quiche/quic/platform/api/quic_test.h"
-#include "quiche/spdy/core/http2_header_block.h"
-
-namespace quic {
-namespace test {
-
-class MockQuicClientPromisedInfo : public QuicClientPromisedInfo {
- public:
-  MockQuicClientPromisedInfo(QuicSpdyClientSessionBase* session,
-                             QuicStreamId id, std::string url);
-  ~MockQuicClientPromisedInfo() override;
-
-  MOCK_METHOD(QuicAsyncStatus, HandleClientRequest,
-              (const spdy::Http2HeaderBlock& headers,
-               QuicClientPushPromiseIndex::Delegate*),
-              (override));
-};
-
-}  // namespace test
-}  // namespace quic
-
-#endif  // QUICHE_QUIC_TEST_TOOLS_MOCK_QUIC_CLIENT_PROMISED_INFO_H_
diff --git a/quiche/quic/test_tools/quic_client_promised_info_peer.cc b/quiche/quic/test_tools/quic_client_promised_info_peer.cc
deleted file mode 100644
index 5ea080c..0000000
--- a/quiche/quic/test_tools/quic_client_promised_info_peer.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2016 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.
-
-#include "quiche/quic/test_tools/quic_client_promised_info_peer.h"
-
-namespace quic {
-namespace test {
-
-// static
-QuicAlarm* QuicClientPromisedInfoPeer::GetAlarm(
-    QuicClientPromisedInfo* promised_stream) {
-  return promised_stream->cleanup_alarm_.get();
-}
-
-}  // namespace test
-}  // namespace quic
diff --git a/quiche/quic/test_tools/quic_client_promised_info_peer.h b/quiche/quic/test_tools/quic_client_promised_info_peer.h
deleted file mode 100644
index 596200b..0000000
--- a/quiche/quic/test_tools/quic_client_promised_info_peer.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2016 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_TEST_TOOLS_QUIC_CLIENT_PROMISED_INFO_PEER_H_
-#define QUICHE_QUIC_TEST_TOOLS_QUIC_CLIENT_PROMISED_INFO_PEER_H_
-
-#include "quiche/quic/core/http/quic_client_promised_info.h"
-
-namespace quic {
-namespace test {
-
-class QuicClientPromisedInfoPeer {
- public:
-  QuicClientPromisedInfoPeer() = delete;
-
-  static QuicAlarm* GetAlarm(QuicClientPromisedInfo* promised_stream);
-};
-}  // namespace test
-}  // namespace quic
-
-#endif  // QUICHE_QUIC_TEST_TOOLS_QUIC_CLIENT_PROMISED_INFO_PEER_H_