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

Side by Side Diff: sdk/lib/io/http_impl.dart

Issue 16123036: Clean up dart:io exceptions. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 6 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
« no previous file with comments | « sdk/lib/io/http.dart ('k') | sdk/lib/io/http_parser.dart » ('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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.io; 5 part of dart.io;
6 6
7 class _HttpIncoming extends Stream<List<int>> { 7 class _HttpIncoming extends Stream<List<int>> {
8 final int _transferLength; 8 final int _transferLength;
9 final Completer _dataCompleter = new Completer(); 9 final Completer _dataCompleter = new Completer();
10 Stream<List<int>> _stream; 10 Stream<List<int>> _stream;
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 String location = headers.value(HttpHeaders.LOCATION); 209 String location = headers.value(HttpHeaders.LOCATION);
210 if (location == null) { 210 if (location == null) {
211 throw new StateError("Response has no Location header for redirect"); 211 throw new StateError("Response has no Location header for redirect");
212 } 212 }
213 url = Uri.parse(location); 213 url = Uri.parse(location);
214 } 214 }
215 if (followLoops != true) { 215 if (followLoops != true) {
216 for (var redirect in redirects) { 216 for (var redirect in redirects) {
217 if (redirect.location == url) { 217 if (redirect.location == url) {
218 return new Future.error( 218 return new Future.error(
219 new RedirectLoopException(redirects)); 219 new RedirectException("Redirect loop detected", redirects));
220 } 220 }
221 } 221 }
222 } 222 }
223 return _httpClient._openUrlFromRequest(method, url, _httpRequest) 223 return _httpClient._openUrlFromRequest(method, url, _httpRequest)
224 .then((request) { 224 .then((request) {
225 request._responseRedirects.addAll(this.redirects); 225 request._responseRedirects.addAll(this.redirects);
226 request._responseRedirects.add(new _RedirectInfo(statusCode, 226 request._responseRedirects.add(new _RedirectInfo(statusCode,
227 method, 227 method,
228 url)); 228 url));
229 return request.close(); 229 return request.close();
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 onListen: () => _subscription.resume(), 566 onListen: () => _subscription.resume(),
567 onCancel: _cancel); 567 onCancel: _cancel);
568 _outbound._addStream(_controller.stream) 568 _outbound._addStream(_controller.stream)
569 .then((_) { 569 .then((_) {
570 _cancel(); 570 _cancel();
571 _done(); 571 _done();
572 _closeCompleter.complete(_outbound); 572 _closeCompleter.complete(_outbound);
573 }, 573 },
574 onError: (error) { 574 onError: (error) {
575 _socketError = true; 575 _socketError = true;
576 if (error is SocketIOException && 576 if (error is SocketException &&
577 _outbound is HttpResponse) { 577 _outbound is HttpResponse) {
578 _cancel(); 578 _cancel();
579 _done(); 579 _done();
580 _closeCompleter.complete(_outbound); 580 _closeCompleter.complete(_outbound);
581 } else { 581 } else {
582 if (!_done(error)) { 582 if (!_done(error)) {
583 _closeCompleter.completeError(error); 583 _closeCompleter.completeError(error);
584 } 584 }
585 } 585 }
586 }); 586 });
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 Future<HttpClientResponse> future; 887 Future<HttpClientResponse> future;
888 if (followRedirects && response.isRedirect) { 888 if (followRedirects && response.isRedirect) {
889 if (response.redirects.length < maxRedirects) { 889 if (response.redirects.length < maxRedirects) {
890 // Redirect and drain response. 890 // Redirect and drain response.
891 future = response.drain() 891 future = response.drain()
892 .then((_) => response.redirect()); 892 .then((_) => response.redirect());
893 } else { 893 } else {
894 // End with exception, too many redirects. 894 // End with exception, too many redirects.
895 future = response.drain() 895 future = response.drain()
896 .then((_) => new Future.error( 896 .then((_) => new Future.error(
897 new RedirectLimitExceededException(response.redirects))); 897 new RedirectException("Redirect limit exceeded",
898 response.redirects)));
898 } 899 }
899 } else if (response._shouldAuthenticateProxy) { 900 } else if (response._shouldAuthenticateProxy) {
900 future = response._authenticate(true); 901 future = response._authenticate(true);
901 } else if (response._shouldAuthenticate) { 902 } else if (response._shouldAuthenticate) {
902 future = response._authenticate(false); 903 future = response._authenticate(false);
903 } else { 904 } else {
904 future = new Future<HttpClientResponse>.value(response); 905 future = new Future<HttpClientResponse>.value(response);
905 } 906 }
906 future.then( 907 future.then(
907 (v) => _responseCompleter.complete(v), 908 (v) => _responseCompleter.complete(v),
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
1220 _HeaderValue.parse( 1221 _HeaderValue.parse(
1221 authInfo[0], parameterSeparator: ','); 1222 authInfo[0], parameterSeparator: ',');
1222 var nextnonce = header.parameters["nextnonce"]; 1223 var nextnonce = header.parameters["nextnonce"];
1223 if (nextnonce != null) creds.nonce = nextnonce; 1224 if (nextnonce != null) creds.nonce = nextnonce;
1224 } 1225 }
1225 } 1226 }
1226 request._onIncoming(incoming); 1227 request._onIncoming(incoming);
1227 }) 1228 })
1228 // If we see a state error, we failed to get the 'first' 1229 // If we see a state error, we failed to get the 'first'
1229 // element. 1230 // element.
1230 // Transform the error to a HttpParserException, for
1231 // consistency.
1232 .catchError((error) { 1231 .catchError((error) {
1233 throw new HttpParserException( 1232 throw new HttpException(
1234 "Connection closed before data was received"); 1233 "Connection closed before data was received");
1235 }, test: (error) => error is StateError) 1234 }, test: (error) => error is StateError)
1236 .catchError((error) { 1235 .catchError((error) {
1237 // We are done with the socket. 1236 // We are done with the socket.
1238 destroy(); 1237 destroy();
1239 request._onError(error); 1238 request._onError(error);
1240 }); 1239 });
1241 1240
1242 // Resume the parser now we have a handler. 1241 // Resume the parser now we have a handler.
1243 _subscription.resume(); 1242 _subscription.resume();
(...skipping 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after
2342 2341
2343 2342
2344 class _RedirectInfo implements RedirectInfo { 2343 class _RedirectInfo implements RedirectInfo {
2345 const _RedirectInfo(int this.statusCode, 2344 const _RedirectInfo(int this.statusCode,
2346 String this.method, 2345 String this.method,
2347 Uri this.location); 2346 Uri this.location);
2348 final int statusCode; 2347 final int statusCode;
2349 final String method; 2348 final String method;
2350 final Uri location; 2349 final Uri location;
2351 } 2350 }
OLDNEW
« no previous file with comments | « sdk/lib/io/http.dart ('k') | sdk/lib/io/http_parser.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698