| OLD | NEW |
| 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/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 CancelRequest(); | 237 CancelRequest(); |
| 238 } | 238 } |
| 239 | 239 |
| 240 int SpdyStreamRequest::StartRequest( | 240 int SpdyStreamRequest::StartRequest( |
| 241 SpdyStreamType type, | 241 SpdyStreamType type, |
| 242 const scoped_refptr<SpdySession>& session, | 242 const scoped_refptr<SpdySession>& session, |
| 243 const GURL& url, | 243 const GURL& url, |
| 244 RequestPriority priority, | 244 RequestPriority priority, |
| 245 const BoundNetLog& net_log, | 245 const BoundNetLog& net_log, |
| 246 const CompletionCallback& callback) { | 246 const CompletionCallback& callback) { |
| 247 DCHECK(session); | 247 DCHECK(session.get()); |
| 248 DCHECK(!session_); | 248 DCHECK(!session_.get()); |
| 249 DCHECK(!stream_); | 249 DCHECK(!stream_); |
| 250 DCHECK(callback_.is_null()); | 250 DCHECK(callback_.is_null()); |
| 251 | 251 |
| 252 type_ = type; | 252 type_ = type; |
| 253 session_ = session; | 253 session_ = session; |
| 254 url_ = url; | 254 url_ = url; |
| 255 priority_ = priority; | 255 priority_ = priority; |
| 256 net_log_ = net_log; | 256 net_log_ = net_log; |
| 257 callback_ = callback; | 257 callback_ = callback; |
| 258 | 258 |
| 259 base::WeakPtr<SpdyStream> stream; | 259 base::WeakPtr<SpdyStream> stream; |
| 260 int rv = session->TryCreateStream(this, &stream); | 260 int rv = session->TryCreateStream(this, &stream); |
| 261 if (rv == OK) { | 261 if (rv == OK) { |
| 262 Reset(); | 262 Reset(); |
| 263 stream_ = stream; | 263 stream_ = stream; |
| 264 } | 264 } |
| 265 return rv; | 265 return rv; |
| 266 } | 266 } |
| 267 | 267 |
| 268 void SpdyStreamRequest::CancelRequest() { | 268 void SpdyStreamRequest::CancelRequest() { |
| 269 if (session_) | 269 if (session_.get()) |
| 270 session_->CancelStreamRequest(this); | 270 session_->CancelStreamRequest(this); |
| 271 Reset(); | 271 Reset(); |
| 272 } | 272 } |
| 273 | 273 |
| 274 base::WeakPtr<SpdyStream> SpdyStreamRequest::ReleaseStream() { | 274 base::WeakPtr<SpdyStream> SpdyStreamRequest::ReleaseStream() { |
| 275 DCHECK(!session_.get()); | 275 DCHECK(!session_.get()); |
| 276 base::WeakPtr<SpdyStream> stream = stream_; | 276 base::WeakPtr<SpdyStream> stream = stream_; |
| 277 DCHECK(stream); | 277 DCHECK(stream); |
| 278 Reset(); | 278 Reset(); |
| 279 return stream; | 279 return stream; |
| 280 } | 280 } |
| 281 | 281 |
| 282 void SpdyStreamRequest::OnRequestCompleteSuccess( | 282 void SpdyStreamRequest::OnRequestCompleteSuccess( |
| 283 base::WeakPtr<SpdyStream>* stream) { | 283 base::WeakPtr<SpdyStream>* stream) { |
| 284 DCHECK(session_); | 284 DCHECK(session_.get()); |
| 285 DCHECK(!stream_); | 285 DCHECK(!stream_); |
| 286 DCHECK(!callback_.is_null()); | 286 DCHECK(!callback_.is_null()); |
| 287 CompletionCallback callback = callback_; | 287 CompletionCallback callback = callback_; |
| 288 Reset(); | 288 Reset(); |
| 289 DCHECK(*stream); | 289 DCHECK(*stream); |
| 290 stream_ = *stream; | 290 stream_ = *stream; |
| 291 callback.Run(OK); | 291 callback.Run(OK); |
| 292 } | 292 } |
| 293 | 293 |
| 294 void SpdyStreamRequest::OnRequestCompleteFailure(int rv) { | 294 void SpdyStreamRequest::OnRequestCompleteFailure(int rv) { |
| 295 DCHECK(session_); | 295 DCHECK(session_.get()); |
| 296 DCHECK(!stream_); | 296 DCHECK(!stream_); |
| 297 DCHECK(!callback_.is_null()); | 297 DCHECK(!callback_.is_null()); |
| 298 CompletionCallback callback = callback_; | 298 CompletionCallback callback = callback_; |
| 299 Reset(); | 299 Reset(); |
| 300 DCHECK_NE(rv, OK); | 300 DCHECK_NE(rv, OK); |
| 301 callback.Run(rv); | 301 callback.Run(rv); |
| 302 } | 302 } |
| 303 | 303 |
| 304 void SpdyStreamRequest::Reset() { | 304 void SpdyStreamRequest::Reset() { |
| 305 type_ = SPDY_BIDIRECTIONAL_STREAM; | 305 type_ = SPDY_BIDIRECTIONAL_STREAM; |
| (...skipping 887 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1193 write_pending_ = true; | 1193 write_pending_ = true; |
| 1194 // Explicitly store in a scoped_refptr<IOBuffer> to avoid problems | 1194 // Explicitly store in a scoped_refptr<IOBuffer> to avoid problems |
| 1195 // with Socket implementations that don't store their IOBuffer | 1195 // with Socket implementations that don't store their IOBuffer |
| 1196 // argument in a scoped_refptr<IOBuffer> (see crbug.com/232345). | 1196 // argument in a scoped_refptr<IOBuffer> (see crbug.com/232345). |
| 1197 scoped_refptr<IOBuffer> write_io_buffer = | 1197 scoped_refptr<IOBuffer> write_io_buffer = |
| 1198 in_flight_write_->GetIOBufferForRemainingData(); | 1198 in_flight_write_->GetIOBufferForRemainingData(); |
| 1199 // We keep |in_flight_write_| alive until OnWriteComplete(), so | 1199 // We keep |in_flight_write_| alive until OnWriteComplete(), so |
| 1200 // it's okay to use GetIOBufferForRemainingData() since the socket | 1200 // it's okay to use GetIOBufferForRemainingData() since the socket |
| 1201 // doesn't use the IOBuffer past OnWriteComplete(). | 1201 // doesn't use the IOBuffer past OnWriteComplete(). |
| 1202 int rv = connection_->socket()->Write( | 1202 int rv = connection_->socket()->Write( |
| 1203 write_io_buffer, | 1203 write_io_buffer.get(), |
| 1204 in_flight_write_->GetRemainingSize(), | 1204 in_flight_write_->GetRemainingSize(), |
| 1205 base::Bind(&SpdySession::OnWriteComplete, weak_factory_.GetWeakPtr())); | 1205 base::Bind(&SpdySession::OnWriteComplete, weak_factory_.GetWeakPtr())); |
| 1206 // Avoid persisting |write_io_buffer| past |in_flight_write_|'s | 1206 // Avoid persisting |write_io_buffer| past |in_flight_write_|'s |
| 1207 // lifetime (which will end if OnWriteComplete() is called below). | 1207 // lifetime (which will end if OnWriteComplete() is called below). |
| 1208 write_io_buffer = NULL; | 1208 write_io_buffer = NULL; |
| 1209 if (rv == ERR_IO_PENDING) | 1209 if (rv == ERR_IO_PENDING) |
| 1210 break; | 1210 break; |
| 1211 | 1211 |
| 1212 // We sent the frame successfully. | 1212 // We sent the frame successfully. |
| 1213 OnWriteComplete(rv); | 1213 OnWriteComplete(rv); |
| (...skipping 1240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2454 if (!queue->empty()) { | 2454 if (!queue->empty()) { |
| 2455 SpdyStreamId stream_id = queue->front(); | 2455 SpdyStreamId stream_id = queue->front(); |
| 2456 queue->pop_front(); | 2456 queue->pop_front(); |
| 2457 return stream_id; | 2457 return stream_id; |
| 2458 } | 2458 } |
| 2459 } | 2459 } |
| 2460 return 0; | 2460 return 0; |
| 2461 } | 2461 } |
| 2462 | 2462 |
| 2463 } // namespace net | 2463 } // namespace net |
| OLD | NEW |