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

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

Issue 3020032: Implement server push protocol 2. (Closed)
Patch Set: nits. 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
« no previous file with comments | « net/http/http_network_layer.cc ('k') | net/spdy/spdy_network_transaction_unittest.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) 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 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 } 255 }
256 256
257 int SpdyHttpStream::SendRequest(const std::string& /*headers_string*/, 257 int SpdyHttpStream::SendRequest(const std::string& /*headers_string*/,
258 UploadDataStream* request_body, 258 UploadDataStream* request_body,
259 HttpResponseInfo* response, 259 HttpResponseInfo* response,
260 CompletionCallback* callback) { 260 CompletionCallback* callback) {
261 base::Time request_time = base::Time::Now(); 261 base::Time request_time = base::Time::Now();
262 CHECK(stream_.get()); 262 CHECK(stream_.get());
263 263
264 stream_->SetDelegate(this); 264 stream_->SetDelegate(this);
265
265 linked_ptr<spdy::SpdyHeaderBlock> headers(new spdy::SpdyHeaderBlock); 266 linked_ptr<spdy::SpdyHeaderBlock> headers(new spdy::SpdyHeaderBlock);
266 CreateSpdyHeadersFromHttpRequest(*request_info_, headers.get()); 267 CreateSpdyHeadersFromHttpRequest(*request_info_, headers.get());
267 stream_->set_spdy_headers(headers); 268 stream_->set_spdy_headers(headers);
268 269
269 stream_->SetRequestTime(request_time); 270 stream_->SetRequestTime(request_time);
270 // This should only get called in the case of a request occurring 271 // This should only get called in the case of a request occurring
271 // during server push that has already begun but hasn't finished, 272 // during server push that has already begun but hasn't finished,
272 // so we set the response's request time to be the actual one 273 // so we set the response's request time to be the actual one
273 if (response_info_) 274 if (response_info_)
274 response_info_->request_time = request_time; 275 response_info_->request_time = request_time;
275 276
276 CHECK(!request_body_stream_.get()); 277 CHECK(!request_body_stream_.get());
277 if (request_body) { 278 if (request_body) {
278 if (request_body->size()) 279 if (request_body->size())
279 request_body_stream_.reset(request_body); 280 request_body_stream_.reset(request_body);
280 else 281 else
281 delete request_body; 282 delete request_body;
282 } 283 }
283 284
284 CHECK(callback); 285 CHECK(callback);
285 CHECK(!stream_->cancelled()); 286 CHECK(!stream_->cancelled());
286 CHECK(response); 287 CHECK(response);
287 288
288 if (stream_->response_complete()) { 289 if (!stream_->pushed() && stream_->response_complete()) {
289 if (stream_->response_status() == OK) 290 if (stream_->response_status() == OK)
290 return ERR_FAILED; 291 return ERR_FAILED;
291 else 292 else
292 return stream_->response_status(); 293 return stream_->response_status();
293 } 294 }
294 295
295 // SendRequest can be called in two cases. 296 // SendRequest can be called in two cases.
296 // 297 //
297 // a) A client initiated request. In this case, |response_info_| should be 298 // a) A client initiated request. In this case, |response_info_| should be
298 // NULL to start with. 299 // NULL to start with.
299 // b) A client request which matches a response that the server has already 300 // b) A client request which matches a response that the server has already
300 // pushed. In this case, the value of |*push_response_info_| is copied 301 // pushed.
301 // over to the new response object |*response|. |push_response_info_| is
302 // deleted, and |response_info_| is reset |response|.
303 if (push_response_info_.get()) { 302 if (push_response_info_.get()) {
304 *response = *push_response_info_; 303 *response = *(push_response_info_.get());
305 push_response_info_.reset(); 304 push_response_info_.reset();
306 response_info_ = NULL;
307 } 305 }
306 else
307 DCHECK_EQ(static_cast<HttpResponseInfo*>(NULL), response_info_);
308 308
309 DCHECK_EQ(static_cast<HttpResponseInfo*>(NULL), response_info_);
310 response_info_ = response; 309 response_info_ = response;
311 310
312 bool has_upload_data = request_body_stream_.get() != NULL; 311 bool has_upload_data = request_body_stream_.get() != NULL;
313 int result = stream_->DoSendRequest(has_upload_data); 312 int result = stream_->DoSendRequest(has_upload_data);
314 if (result == ERR_IO_PENDING) { 313 if (result == ERR_IO_PENDING) {
315 CHECK(!user_callback_); 314 CHECK(!user_callback_);
316 user_callback_ = callback; 315 user_callback_ = callback;
317 } 316 }
318 return result; 317 return result;
319 } 318 }
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 CHECK_NE(rv, ERR_IO_PENDING); 476 CHECK_NE(rv, ERR_IO_PENDING);
478 CHECK(user_callback_); 477 CHECK(user_callback_);
479 478
480 // Since Run may result in being called back, clear user_callback_ in advance. 479 // Since Run may result in being called back, clear user_callback_ in advance.
481 CompletionCallback* c = user_callback_; 480 CompletionCallback* c = user_callback_;
482 user_callback_ = NULL; 481 user_callback_ = NULL;
483 c->Run(rv); 482 c->Run(rv);
484 } 483 }
485 484
486 } // namespace net 485 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_network_layer.cc ('k') | net/spdy/spdy_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698