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_