| OLD | NEW |
| 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_client_promised_info.h" | 5 #include "net/quic/quic_client_promised_info.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "net/quic/spdy_utils.h" | 8 #include "net/quic/spdy_utils.h" |
| 9 | 9 |
| 10 using net::SpdyHeaderBlock; | 10 using net::SpdyHeaderBlock; |
| 11 using net::kPushPromiseTimeoutSecs; | 11 using net::kPushPromiseTimeoutSecs; |
| 12 using std::string; | 12 using std::string; |
| 13 | 13 |
| 14 namespace net { | 14 namespace net { |
| 15 | 15 |
| 16 QuicClientPromisedInfo::QuicClientPromisedInfo(QuicClientSessionBase* session, | 16 QuicClientPromisedInfo::QuicClientPromisedInfo(QuicClientSessionBase* session, |
| 17 QuicStreamId id, | 17 QuicStreamId id, |
| 18 string url) | 18 string url) |
| 19 : session_(session), | 19 : session_(session), |
| 20 helper_(session->connection()->helper()), | |
| 21 id_(id), | 20 id_(id), |
| 22 url_(url), | 21 url_(url), |
| 23 client_request_delegate_(nullptr) {} | 22 client_request_delegate_(nullptr) {} |
| 24 | 23 |
| 25 QuicClientPromisedInfo::~QuicClientPromisedInfo() {} | 24 QuicClientPromisedInfo::~QuicClientPromisedInfo() {} |
| 26 | 25 |
| 27 void QuicClientPromisedInfo::CleanupAlarm::OnAlarm() { | 26 void QuicClientPromisedInfo::CleanupAlarm::OnAlarm() { |
| 28 DVLOG(1) << "self GC alarm for stream " << promised_->id_; | 27 DVLOG(1) << "self GC alarm for stream " << promised_->id_; |
| 29 promised_->Reset(QUIC_STREAM_CANCELLED); | 28 promised_->Reset(QUIC_STREAM_CANCELLED); |
| 30 } | 29 } |
| 31 | 30 |
| 32 void QuicClientPromisedInfo::Init() { | 31 void QuicClientPromisedInfo::Init() { |
| 33 cleanup_alarm_.reset( | 32 cleanup_alarm_.reset(session_->connection()->alarm_factory()->CreateAlarm( |
| 34 helper_->CreateAlarm(new QuicClientPromisedInfo::CleanupAlarm(this))); | 33 new QuicClientPromisedInfo::CleanupAlarm(this))); |
| 35 cleanup_alarm_->Set(helper_->GetClock()->ApproximateNow().Add( | 34 cleanup_alarm_->Set( |
| 36 QuicTime::Delta::FromSeconds(kPushPromiseTimeoutSecs))); | 35 session_->connection()->helper()->GetClock()->ApproximateNow().Add( |
| 36 QuicTime::Delta::FromSeconds(kPushPromiseTimeoutSecs))); |
| 37 } | 37 } |
| 38 | 38 |
| 39 void QuicClientPromisedInfo::OnPromiseHeaders(const SpdyHeaderBlock& headers) { | 39 void QuicClientPromisedInfo::OnPromiseHeaders(const SpdyHeaderBlock& headers) { |
| 40 // RFC7540, Section 8.2, requests MUST be safe [RFC7231], Section | 40 // RFC7540, Section 8.2, requests MUST be safe [RFC7231], Section |
| 41 // 4.2.1. GET and HEAD are the methods that are safe and required. | 41 // 4.2.1. GET and HEAD are the methods that are safe and required. |
| 42 SpdyHeaderBlock::const_iterator it = headers.find(":method"); | 42 SpdyHeaderBlock::const_iterator it = headers.find(":method"); |
| 43 DCHECK(it != headers.end()); | 43 DCHECK(it != headers.end()); |
| 44 if (!(it->second == "GET" || it->second == "HEAD")) { | 44 if (!(it->second == "GET" || it->second == "HEAD")) { |
| 45 DVLOG(1) << "Promise for stream " << id_ << " has invalid method " | 45 DVLOG(1) << "Promise for stream " << id_ << " has invalid method " |
| 46 << it->second; | 46 << it->second; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 return FinalValidation(); | 114 return FinalValidation(); |
| 115 } | 115 } |
| 116 | 116 |
| 117 void QuicClientPromisedInfo::Cancel() { | 117 void QuicClientPromisedInfo::Cancel() { |
| 118 // Don't fire OnRendezvousResult() for client initiated cancel. | 118 // Don't fire OnRendezvousResult() for client initiated cancel. |
| 119 client_request_delegate_ = nullptr; | 119 client_request_delegate_ = nullptr; |
| 120 Reset(QUIC_STREAM_CANCELLED); | 120 Reset(QUIC_STREAM_CANCELLED); |
| 121 } | 121 } |
| 122 | 122 |
| 123 } // namespace net | 123 } // namespace net |
| OLD | NEW |