Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Side by Side Diff: net/quic/quic_chromium_client_stream.cc

Issue 2102253003: Make SpdyHeaderBlock non-copyable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: iOS fix. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/quic_chromium_client_stream.h ('k') | net/quic/quic_chromium_client_stream_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_chromium_client_stream.h" 5 #include "net/quic/quic_chromium_client_stream.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind_helpers.h"
9 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
10 #include "base/location.h" 11 #include "base/location.h"
11 #include "base/threading/thread_task_runner_handle.h" 12 #include "base/threading/thread_task_runner_handle.h"
12 #include "net/base/io_buffer.h" 13 #include "net/base/io_buffer.h"
13 #include "net/base/net_errors.h" 14 #include "net/base/net_errors.h"
14 #include "net/quic/quic_chromium_client_session.h" 15 #include "net/quic/quic_chromium_client_session.h"
15 #include "net/quic/quic_http_utils.h" 16 #include "net/quic/quic_http_utils.h"
16 #include "net/quic/quic_spdy_session.h" 17 #include "net/quic/quic_spdy_session.h"
17 #include "net/quic/quic_write_blocked_list.h" 18 #include "net/quic/quic_write_blocked_list.h"
18 #include "net/quic/spdy_utils.h" 19 #include "net/quic/spdy_utils.h"
(...skipping 16 matching lines...) Expand all
35 if (delegate_) 36 if (delegate_)
36 delegate_->OnClose(); 37 delegate_->OnClose();
37 } 38 }
38 39
39 void QuicChromiumClientStream::OnStreamHeadersComplete(bool fin, 40 void QuicChromiumClientStream::OnStreamHeadersComplete(bool fin,
40 size_t frame_len) { 41 size_t frame_len) {
41 QuicSpdyStream::OnStreamHeadersComplete(fin, frame_len); 42 QuicSpdyStream::OnStreamHeadersComplete(fin, frame_len);
42 if (decompressed_headers().empty() && !decompressed_trailers().empty()) { 43 if (decompressed_headers().empty() && !decompressed_trailers().empty()) {
43 DCHECK(trailers_decompressed()); 44 DCHECK(trailers_decompressed());
44 // The delegate will read the trailers via a posted task. 45 // The delegate will read the trailers via a posted task.
45 NotifyDelegateOfHeadersCompleteLater(received_trailers(), frame_len); 46 NotifyDelegateOfHeadersCompleteLater(received_trailers().Clone(),
47 frame_len);
46 } else { 48 } else {
47 DCHECK(!headers_delivered_); 49 DCHECK(!headers_delivered_);
48 SpdyHeaderBlock headers; 50 SpdyHeaderBlock headers;
49 SpdyFramer framer(HTTP2); 51 SpdyFramer framer(HTTP2);
50 size_t headers_len = decompressed_headers().length(); 52 size_t headers_len = decompressed_headers().length();
51 const char* header_data = decompressed_headers().data(); 53 const char* header_data = decompressed_headers().data();
52 if (!framer.ParseHeaderBlockInBuffer(header_data, headers_len, &headers)) { 54 if (!framer.ParseHeaderBlockInBuffer(header_data, headers_len, &headers)) {
53 DLOG(WARNING) << "Invalid headers"; 55 DLOG(WARNING) << "Invalid headers";
54 Reset(QUIC_BAD_APPLICATION_PAYLOAD); 56 Reset(QUIC_BAD_APPLICATION_PAYLOAD);
55 return; 57 return;
56 } 58 }
57 MarkHeadersConsumed(headers_len); 59 MarkHeadersConsumed(headers_len);
58 session_->OnInitialHeadersComplete(id(), headers); 60 session_->OnInitialHeadersComplete(id(), headers);
59 61
60 // The delegate will read the headers via a posted task. 62 // The delegate will read the headers via a posted task.
61 NotifyDelegateOfHeadersCompleteLater(headers, frame_len); 63 NotifyDelegateOfHeadersCompleteLater(std::move(headers), frame_len);
62 } 64 }
63 } 65 }
64 66
65 void QuicChromiumClientStream::OnInitialHeadersComplete( 67 void QuicChromiumClientStream::OnInitialHeadersComplete(
66 bool fin, 68 bool fin,
67 size_t frame_len, 69 size_t frame_len,
68 const QuicHeaderList& header_list) { 70 const QuicHeaderList& header_list) {
69 QuicSpdyStream::OnInitialHeadersComplete(fin, frame_len, header_list); 71 QuicSpdyStream::OnInitialHeadersComplete(fin, frame_len, header_list);
70 72
71 SpdyHeaderBlock header_block; 73 SpdyHeaderBlock header_block;
72 int64_t length = -1; 74 int64_t length = -1;
73 if (!SpdyUtils::CopyAndValidateHeaders(header_list, &length, &header_block)) { 75 if (!SpdyUtils::CopyAndValidateHeaders(header_list, &length, &header_block)) {
74 DLOG(ERROR) << "Failed to parse header list: " << header_list.DebugString(); 76 DLOG(ERROR) << "Failed to parse header list: " << header_list.DebugString();
75 ConsumeHeaderList(); 77 ConsumeHeaderList();
76 Reset(QUIC_BAD_APPLICATION_PAYLOAD); 78 Reset(QUIC_BAD_APPLICATION_PAYLOAD);
77 return; 79 return;
78 } 80 }
79 81
80 ConsumeHeaderList(); 82 ConsumeHeaderList();
81 session_->OnInitialHeadersComplete(id(), header_block); 83 session_->OnInitialHeadersComplete(id(), header_block);
82 84
83 // The delegate will read the headers via a posted task. 85 // The delegate will read the headers via a posted task.
84 NotifyDelegateOfHeadersCompleteLater(header_block, frame_len); 86 NotifyDelegateOfHeadersCompleteLater(std::move(header_block), frame_len);
85 } 87 }
86 88
87 void QuicChromiumClientStream::OnTrailingHeadersComplete( 89 void QuicChromiumClientStream::OnTrailingHeadersComplete(
88 bool fin, 90 bool fin,
89 size_t frame_len, 91 size_t frame_len,
90 const QuicHeaderList& header_list) { 92 const QuicHeaderList& header_list) {
91 QuicSpdyStream::OnTrailingHeadersComplete(fin, frame_len, header_list); 93 QuicSpdyStream::OnTrailingHeadersComplete(fin, frame_len, header_list);
92 NotifyDelegateOfHeadersCompleteLater(received_trailers(), frame_len); 94 NotifyDelegateOfHeadersCompleteLater(received_trailers().Clone(), frame_len);
93 } 95 }
94 96
95 void QuicChromiumClientStream::OnPromiseHeadersComplete( 97 void QuicChromiumClientStream::OnPromiseHeadersComplete(
96 QuicStreamId promised_id, 98 QuicStreamId promised_id,
97 size_t frame_len) { 99 size_t frame_len) {
98 size_t headers_len = decompressed_headers().length(); 100 size_t headers_len = decompressed_headers().length();
99 SpdyHeaderBlock headers; 101 SpdyHeaderBlock headers;
100 SpdyFramer framer(HTTP2); 102 SpdyFramer framer(HTTP2);
101 if (!framer.ParseHeaderBlockInBuffer(decompressed_headers().data(), 103 if (!framer.ParseHeaderBlockInBuffer(decompressed_headers().data(),
102 headers_len, &headers)) { 104 headers_len, &headers)) {
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 bool can_write = session()->connection()->CanWrite(HAS_RETRANSMITTABLE_DATA); 240 bool can_write = session()->connection()->CanWrite(HAS_RETRANSMITTABLE_DATA);
239 if (!can_write) { 241 if (!can_write) {
240 session()->MarkConnectionLevelWriteBlocked(id()); 242 session()->MarkConnectionLevelWriteBlocked(id());
241 DCHECK(callback_.is_null()); 243 DCHECK(callback_.is_null());
242 callback_ = callback; 244 callback_ = callback;
243 } 245 }
244 return can_write; 246 return can_write;
245 } 247 }
246 248
247 void QuicChromiumClientStream::NotifyDelegateOfHeadersCompleteLater( 249 void QuicChromiumClientStream::NotifyDelegateOfHeadersCompleteLater(
248 const SpdyHeaderBlock& headers, 250 SpdyHeaderBlock headers,
249 size_t frame_len) { 251 size_t frame_len) {
250 RunOrBuffer( 252 RunOrBuffer(base::Bind(
251 base::Bind(&QuicChromiumClientStream::NotifyDelegateOfHeadersComplete, 253 &QuicChromiumClientStream::NotifyDelegateOfHeadersComplete,
252 weak_factory_.GetWeakPtr(), headers, frame_len)); 254 weak_factory_.GetWeakPtr(), base::Passed(std::move(headers)), frame_len));
253 } 255 }
254 256
255 void QuicChromiumClientStream::NotifyDelegateOfHeadersComplete( 257 void QuicChromiumClientStream::NotifyDelegateOfHeadersComplete(
256 SpdyHeaderBlock headers, 258 SpdyHeaderBlock headers,
257 size_t frame_len) { 259 size_t frame_len) {
258 if (!delegate_) 260 if (!delegate_)
259 return; 261 return;
260 // Only mark trailers consumed when we are about to notify delegate. 262 // Only mark trailers consumed when we are about to notify delegate.
261 if (headers_delivered_) { 263 if (headers_delivered_) {
262 MarkTrailersConsumed(decompressed_trailers().length()); 264 MarkTrailersConsumed(decompressed_trailers().length());
(...skipping 28 matching lines...) Expand all
291 } else { 293 } else {
292 delegate_tasks_.push_back(closure); 294 delegate_tasks_.push_back(closure);
293 } 295 }
294 } 296 }
295 297
296 void QuicChromiumClientStream::DisableConnectionMigration() { 298 void QuicChromiumClientStream::DisableConnectionMigration() {
297 can_migrate_ = false; 299 can_migrate_ = false;
298 } 300 }
299 301
300 } // namespace net 302 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_chromium_client_stream.h ('k') | net/quic/quic_chromium_client_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698