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

Side by Side Diff: net/spdy/spdy_http_stream.cc

Issue 3079002: Refactor SpdyHttpStream to implement HttpStream. Required adding a new... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 10 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/spdy/spdy_http_stream.h" 5 #include "net/spdy/spdy_http_stream.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <list> 8 #include <list>
9 #include <string> 9 #include <string>
10 10
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 (*headers)["cache-control"] = "no-cache"; 122 (*headers)["cache-control"] = "no-cache";
123 } else if (info.load_flags & net::LOAD_VALIDATE_CACHE) { 123 } else if (info.load_flags & net::LOAD_VALIDATE_CACHE) {
124 (*headers)["cache-control"] = "max-age=0"; 124 (*headers)["cache-control"] = "max-age=0";
125 } 125 }
126 } 126 }
127 127
128 } // anonymous namespace 128 } // anonymous namespace
129 129
130 namespace net { 130 namespace net {
131 131
132 SpdyHttpStream::SpdyHttpStream() 132 SpdyHttpStream::SpdyHttpStream(SpdySession* spdy_session)
133 : ALLOW_THIS_IN_INITIALIZER_LIST(read_callback_factory_(this)), 133 : ALLOW_THIS_IN_INITIALIZER_LIST(read_callback_factory_(this)),
134 stream_(NULL), 134 stream_(NULL),
135 spdy_session_(NULL), 135 spdy_session_(spdy_session),
136 response_info_(NULL), 136 response_info_(NULL),
137 download_finished_(false), 137 download_finished_(false),
138 user_callback_(NULL), 138 user_callback_(NULL),
139 user_buffer_len_(0), 139 user_buffer_len_(0),
140 buffered_read_callback_pending_(false), 140 buffered_read_callback_pending_(false),
141 more_read_data_pending_(false) { } 141 more_read_data_pending_(false) { }
142 142
143 SpdyHttpStream::~SpdyHttpStream() { 143 SpdyHttpStream::~SpdyHttpStream() {
144 if (stream_) 144 if (stream_)
145 stream_->DetachDelegate(); 145 stream_->DetachDelegate();
146 } 146 }
147 147
148 int SpdyHttpStream::InitializeStream( 148 int SpdyHttpStream::InitializeStream(const HttpRequestInfo* request_info,
149 SpdySession* spdy_session, 149 const BoundNetLog& stream_net_log,
150 const HttpRequestInfo& request_info, 150 CompletionCallback* callback) {
151 const BoundNetLog& stream_net_log,
152 CompletionCallback* callback) {
153 spdy_session_ = spdy_session;
154 request_info_ = request_info; 151 request_info_ = request_info;
155 if (request_info_.method == "GET") { 152 if (request_info_->method == "GET") {
156 int error = spdy_session_->GetPushStream(request_info.url, &stream_, 153 int error = spdy_session_->GetPushStream(request_info_->url, &stream_,
157 stream_net_log); 154 stream_net_log);
158 if (error != OK) 155 if (error != OK)
159 return error; 156 return error;
160 } 157 }
161 158
162 if (stream_.get()) 159 if (stream_.get())
163 return OK; 160 return OK;
164 else 161 else
165 return spdy_session_->CreateStream(request_info_.url, 162 return spdy_session_->CreateStream(request_info_->url,
166 request_info_.priority, &stream_, 163 request_info_->priority, &stream_,
167 stream_net_log, callback); 164 stream_net_log, callback);
168 } 165 }
169 166
170 void SpdyHttpStream::InitializeRequest(
171 base::Time request_time,
172 UploadDataStream* upload_data) {
173 CHECK(stream_.get());
174 stream_->SetDelegate(this);
175 linked_ptr<spdy::SpdyHeaderBlock> headers(new spdy::SpdyHeaderBlock);
176 CreateSpdyHeadersFromHttpRequest(request_info_, headers.get());
177 stream_->set_spdy_headers(headers);
178
179 stream_->SetRequestTime(request_time);
180 // This should only get called in the case of a request occuring
181 // during server push that has already begun but hasn't finished,
182 // so we set the response's request time to be the actual one
183 if (response_info_)
184 response_info_->request_time = request_time;
185
186 CHECK(!request_body_stream_.get());
187 if (upload_data) {
188 if (upload_data->size())
189 request_body_stream_.reset(upload_data);
190 else
191 delete upload_data;
192 }
193 }
194
195 const HttpResponseInfo* SpdyHttpStream::GetResponseInfo() const { 167 const HttpResponseInfo* SpdyHttpStream::GetResponseInfo() const {
196 return response_info_; 168 return response_info_;
197 } 169 }
198 170
199 uint64 SpdyHttpStream::GetUploadProgress() const { 171 uint64 SpdyHttpStream::GetUploadProgress() const {
200 if (!request_body_stream_.get()) 172 if (!request_body_stream_.get())
201 return 0; 173 return 0;
202 174
203 return request_body_stream_->position(); 175 return request_body_stream_->position();
204 } 176 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 CHECK(!user_callback_); 227 CHECK(!user_callback_);
256 CHECK(!user_buffer_); 228 CHECK(!user_buffer_);
257 CHECK_EQ(0, user_buffer_len_); 229 CHECK_EQ(0, user_buffer_len_);
258 230
259 user_callback_ = callback; 231 user_callback_ = callback;
260 user_buffer_ = buf; 232 user_buffer_ = buf;
261 user_buffer_len_ = buf_len; 233 user_buffer_len_ = buf_len;
262 return ERR_IO_PENDING; 234 return ERR_IO_PENDING;
263 } 235 }
264 236
265 int SpdyHttpStream::SendRequest(HttpResponseInfo* response, 237 int SpdyHttpStream::SendRequest(const std::string& /*headers_string*/,
vandebo (ex-Chrome) 2010/07/28 23:30:39 My mistake, it's in the headers that we comment it
238 UploadDataStream* request_body,
239 HttpResponseInfo* response,
266 CompletionCallback* callback) { 240 CompletionCallback* callback) {
241 base::Time request_time = base::Time::Now();
242 CHECK(stream_.get());
243
244 stream_->SetDelegate(this);
245 linked_ptr<spdy::SpdyHeaderBlock> headers(new spdy::SpdyHeaderBlock);
246 CreateSpdyHeadersFromHttpRequest(*request_info_, headers.get());
247 stream_->set_spdy_headers(headers);
248
249 stream_->SetRequestTime(request_time);
250 // This should only get called in the case of a request occurring
251 // during server push that has already begun but hasn't finished,
252 // so we set the response's request time to be the actual one
253 if (response_info_)
254 response_info_->request_time = request_time;
255
256 CHECK(!request_body_stream_.get());
257 if (request_body) {
258 if (request_body->size())
259 request_body_stream_.reset(request_body);
260 else
261 delete request_body;
262 }
263
267 CHECK(callback); 264 CHECK(callback);
268 CHECK(!stream_->cancelled()); 265 CHECK(!stream_->cancelled());
269 CHECK(response); 266 CHECK(response);
270 267
271 if (stream_->response_complete()) { 268 if (stream_->response_complete()) {
272 if (stream_->response_status() == OK) 269 if (stream_->response_status() == OK)
273 return ERR_FAILED; 270 return ERR_FAILED;
274 else 271 else
275 return stream_->response_status(); 272 return stream_->response_status();
276 } 273 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 push_response_info_.reset(new HttpResponseInfo); 333 push_response_info_.reset(new HttpResponseInfo);
337 response_info_ = push_response_info_.get(); 334 response_info_ = push_response_info_.get();
338 } 335 }
339 336
340 if (!SpdyHeadersToHttpResponse(response, response_info_)) { 337 if (!SpdyHeadersToHttpResponse(response, response_info_)) {
341 status = ERR_INVALID_RESPONSE; 338 status = ERR_INVALID_RESPONSE;
342 } else { 339 } else {
343 stream_->GetSSLInfo(&response_info_->ssl_info, 340 stream_->GetSSLInfo(&response_info_->ssl_info,
344 &response_info_->was_npn_negotiated); 341 &response_info_->was_npn_negotiated);
345 response_info_->request_time = stream_->GetRequestTime(); 342 response_info_->request_time = stream_->GetRequestTime();
346 response_info_->vary_data.Init(request_info_, *response_info_->headers); 343 response_info_->vary_data.Init(*request_info_, *response_info_->headers);
347 // TODO(ahendrickson): This is recorded after the entire SYN_STREAM control 344 // TODO(ahendrickson): This is recorded after the entire SYN_STREAM control
348 // frame has been received and processed. Move to framer? 345 // frame has been received and processed. Move to framer?
349 response_info_->response_time = response_time; 346 response_info_->response_time = response_time;
350 } 347 }
351 348
352 if (user_callback_) 349 if (user_callback_)
353 DoCallback(status); 350 DoCallback(status);
354 return status; 351 return status;
355 } 352 }
356 353
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 CHECK_NE(rv, ERR_IO_PENDING); 451 CHECK_NE(rv, ERR_IO_PENDING);
455 CHECK(user_callback_); 452 CHECK(user_callback_);
456 453
457 // Since Run may result in being called back, clear user_callback_ in advance. 454 // Since Run may result in being called back, clear user_callback_ in advance.
458 CompletionCallback* c = user_callback_; 455 CompletionCallback* c = user_callback_;
459 user_callback_ = NULL; 456 user_callback_ = NULL;
460 c->Run(rv); 457 c->Run(rv);
461 } 458 }
462 459
463 } // namespace net 460 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698