Index: net/quic/quic_client_promised_info.cc |
diff --git a/net/quic/quic_client_promised_info.cc b/net/quic/quic_client_promised_info.cc |
deleted file mode 100644 |
index 120db55394fc4546a824ffead746e80df9051c05..0000000000000000000000000000000000000000 |
--- a/net/quic/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 "net/quic/quic_client_promised_info.h" |
- |
-#include "base/logging.h" |
-#include "net/quic/spdy_utils.h" |
- |
-using net::SpdyHeaderBlock; |
-using net::kPushPromiseTimeoutSecs; |
-using std::string; |
- |
-namespace net { |
- |
-QuicClientPromisedInfo::QuicClientPromisedInfo(QuicClientSessionBase* session, |
- QuicStreamId id, |
- string url) |
- : session_(session), |
- id_(id), |
- url_(url), |
- client_request_delegate_(nullptr) {} |
- |
-QuicClientPromisedInfo::~QuicClientPromisedInfo() {} |
- |
-void QuicClientPromisedInfo::CleanupAlarm::OnAlarm() { |
- DVLOG(1) << "self GC alarm for stream " << promised_->id_; |
- promised_->Reset(QUIC_STREAM_CANCELLED); |
-} |
- |
-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)); |
-} |
- |
-void QuicClientPromisedInfo::OnPromiseHeaders(const SpdyHeaderBlock& 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. |
- SpdyHeaderBlock::const_iterator it = headers.find(":method"); |
- DCHECK(it != headers.end()); |
- if (!(it->second == "GET" || it->second == "HEAD")) { |
- DVLOG(1) << "Promise for stream " << id_ << " has invalid method " |
- << it->second; |
- Reset(QUIC_INVALID_PROMISE_METHOD); |
- return; |
- } |
- if (!SpdyUtils::UrlIsValid(headers)) { |
- DVLOG(1) << "Promise for stream " << id_ << " has invalid URL " << url_; |
- Reset(QUIC_INVALID_PROMISE_URL); |
- return; |
- } |
- if (!session_->IsAuthorized(SpdyUtils::GetHostNameFromHeaderBlock(headers))) { |
- Reset(QUIC_UNAUTHORIZED_PROMISE_URL); |
- return; |
- } |
- request_headers_.reset(new SpdyHeaderBlock(headers.Clone())); |
-} |
- |
-void QuicClientPromisedInfo::OnResponseHeaders(const SpdyHeaderBlock& headers) { |
- response_headers_.reset(new SpdyHeaderBlock(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_; |
- session_->ResetPromised(id_, error_code); |
- session_->DeletePromised(this); |
- 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; |
- } |
- QuicSpdyStream* stream = session_->GetPromisedStream(id_); |
- if (!stream) { |
- // This shouldn't be possible, as |ClientRequest| guards against |
- // closed stream for the synchronous case. And in the |
- // asynchronous case, a RST can only be caught by |OnAlarm()|. |
- QUIC_BUG << "missing promised stream" << id_; |
- } |
- QuicClientPushPromiseIndex::Delegate* delegate = client_request_delegate_; |
- session_->DeletePromised(this); |
- // Stream can start draining now |
- if (delegate) { |
- delegate->OnRendezvousResult(stream); |
- } |
- return QUIC_SUCCESS; |
-} |
- |
-QuicAsyncStatus QuicClientPromisedInfo::HandleClientRequest( |
- const SpdyHeaderBlock& request_headers, |
- QuicClientPushPromiseIndex::Delegate* delegate) { |
- if (session_->IsClosedStream(id_)) { |
- // There was a RST on the response stream. |
- session_->DeletePromised(this); |
- return QUIC_FAILURE; |
- } |
- client_request_delegate_ = delegate; |
- client_request_headers_.reset(new SpdyHeaderBlock(request_headers.Clone())); |
- if (!response_headers_) { |
- return QUIC_PENDING; |
- } |
- return FinalValidation(); |
-} |
- |
-void QuicClientPromisedInfo::Cancel() { |
- // Don't fire OnRendezvousResult() for client initiated cancel. |
- client_request_delegate_ = nullptr; |
- Reset(QUIC_STREAM_CANCELLED); |
-} |
- |
-} // namespace net |