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 |