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_