Chromium Code Reviews| Index: runtime/bin/http_impl.dart |
| diff --git a/runtime/bin/http_impl.dart b/runtime/bin/http_impl.dart |
| index e8e5ff14bf0c59d36a626089939a763f320d03c0..7de85a8149b4fad112c70c14ee0294276ddf849f 100644 |
| --- a/runtime/bin/http_impl.dart |
| +++ b/runtime/bin/http_impl.dart |
| @@ -467,7 +467,7 @@ class _HttpResponse extends _HttpRequestResponseBase implements HttpResponse { |
| return _outputStream; |
| } |
| - Socket detachSocket() { |
| + DetachedSocket detachSocket() { |
| if (_state >= DONE) throw new HttpException("Response closed"); |
| // Ensure that headers are written. |
| if (_state == START) { |
| @@ -602,7 +602,7 @@ class _HttpResponse extends _HttpRequestResponseBase implements HttpResponse { |
| // whether the content length is known. |
| if (_contentLength > 0) { |
| _headers.set("Content-Length", _contentLength.toString()); |
| - } else { |
| + } else if (_contentLength < 0) { |
|
Mads Ager (google)
2012/05/02 08:18:17
An nothing needs to be done here fore _contentLeng
Søren Gjesse
2012/05/02 10:22:45
Yes - this was a bug. The spec says:
"The presenc
|
| _headers.set("Transfer-Encoding", "chunked"); |
| } |
| @@ -745,8 +745,10 @@ class _HttpConnectionBase implements Hashable { |
| int parsed = _httpParser.writeList(buffer, 0, bytesRead); |
| if (!_httpParser.upgrade) { |
| if (parsed != bytesRead) { |
| - // TODO(sgjesse): Error handling. |
| - _close(); |
| + if (_socket != null) { |
| + // TODO(sgjesse): Error handling. |
| + _close(); |
| + } |
| } |
| } |
| } |
| @@ -766,7 +768,7 @@ class _HttpConnectionBase implements Hashable { |
| _onConnectionClosed(e); |
| } |
| - Socket _detachSocket() { |
| + DetachedSocket _detachSocket() { |
| _socket.onData = null; |
| // TODO(sgjesse): Handle getting the write handler when using output stream. |
|
Mads Ager (google)
2012/05/02 08:18:17
Let's file a bug report on this to keep track?
Søren Gjesse
2012/05/02 10:22:45
Fixed by setting _socket.outputStream.onNoPendingW
|
| //_socket.onWrite = null; |
| @@ -774,8 +776,8 @@ class _HttpConnectionBase implements Hashable { |
| _socket.onError = null; |
| Socket socket = _socket; |
| _socket = null; |
| - if (onDetach) onDetach(); |
| - return socket; |
| + if (onDetach != null) onDetach(); |
| + return new DetachedSocket(socket, _httpParser.unparsedData); |
| } |
| abstract void _onConnectionClosed(e); |
| @@ -1231,6 +1233,11 @@ class _HttpClientConnection |
| return _request; |
| } |
| + DetachedSocket detachSocket() { |
| + // TODO(sgjesse): Needs some state checks. |
|
Mads Ager (google)
2012/05/02 08:18:17
Either add the checks or file a bug to keep track?
Søren Gjesse
2012/05/02 10:22:45
Removed the TODO - not sure which state checks I w
|
| + return _detachSocket(); |
| + } |
| + |
| void _onConnectionClosed(e) { |
| // Socket is closed either due to an error or due to normal socket close. |
| if (e != null) { |