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

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

Issue 13548002: Add Iterable.fold (and Stream.fold) which replace `reduce`. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 8 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) 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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 return statusCode == HttpStatus.UNAUTHORIZED && 253 return statusCode == HttpStatus.UNAUTHORIZED &&
254 challenge != null && challenge.length == 1; 254 challenge != null && challenge.length == 1;
255 } 255 }
256 256
257 Future<HttpClientResponse> _authenticate() { 257 Future<HttpClientResponse> _authenticate() {
258 Future<HttpClientResponse> retryWithCredentials(_Credentials cr) { 258 Future<HttpClientResponse> retryWithCredentials(_Credentials cr) {
259 if (cr != null) { 259 if (cr != null) {
260 // TODO(sgjesse): Support digest. 260 // TODO(sgjesse): Support digest.
261 if (cr.scheme == _AuthenticationScheme.BASIC) { 261 if (cr.scheme == _AuthenticationScheme.BASIC) {
262 // Drain body and retry. 262 // Drain body and retry.
263 return reduce(null, (x, y) {}).then((_) { 263 return fold(null, (x, y) {}).then((_) {
264 return _httpClient._openUrlFromRequest(_httpRequest.method, 264 return _httpClient._openUrlFromRequest(_httpRequest.method,
265 _httpRequest.uri, 265 _httpRequest.uri,
266 _httpRequest) 266 _httpRequest)
267 .then((request) => request.close()); 267 .then((request) => request.close());
268 }); 268 });
269 } 269 }
270 } 270 }
271 271
272 // Fall through to here to perform normal response handling if 272 // Fall through to here to perform normal response handling if
273 // there is no sensible authorization handling. 273 // there is no sensible authorization handling.
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 } 445 }
446 _writeHeader(); 446 _writeHeader();
447 _ioSink = new IOSink(new _HttpOutboundConsumer(_ioSink, _consume, asGZip)); 447 _ioSink = new IOSink(new _HttpOutboundConsumer(_ioSink, _consume, asGZip));
448 _ioSink.encoding = encoding; 448 _ioSink.encoding = encoding;
449 } 449 }
450 450
451 Future _consume(IOSink ioSink, Stream<List<int>> stream, bool asGZip) { 451 Future _consume(IOSink ioSink, Stream<List<int>> stream, bool asGZip) {
452 int contentLength = headers.contentLength; 452 int contentLength = headers.contentLength;
453 if (_ignoreBody) { 453 if (_ignoreBody) {
454 ioSink.close(); 454 ioSink.close();
455 return stream.reduce(null, (x, y) {}).then((_) => this); 455 return stream.fold(null, (x, y) {}).then((_) => this);
456 } 456 }
457 stream = stream.transform(new _BufferTransformer()); 457 stream = stream.transform(new _BufferTransformer());
458 if (headers.chunkedTransferEncoding) { 458 if (headers.chunkedTransferEncoding) {
459 if (asGZip) { 459 if (asGZip) {
460 stream = stream.transform(new ZLibDeflater(gzip: true, level: 6)); 460 stream = stream.transform(new ZLibDeflater(gzip: true, level: 6));
461 } 461 }
462 stream = stream.transform(new _ChunkedTransformer()); 462 stream = stream.transform(new _ChunkedTransformer());
463 } else if (contentLength >= 0) { 463 } else if (contentLength >= 0) {
464 stream = stream.transform(new _ContentLengthValidator(contentLength)); 464 stream = stream.transform(new _ContentLengthValidator(contentLength));
465 } 465 }
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 HttpConnectionInfo get connectionInfo => _httpClientConnection.connectionInfo; 720 HttpConnectionInfo get connectionInfo => _httpClientConnection.connectionInfo;
721 721
722 void _onIncoming(_HttpIncoming incoming) { 722 void _onIncoming(_HttpIncoming incoming) {
723 var response = new _HttpClientResponse(incoming, 723 var response = new _HttpClientResponse(incoming,
724 this, 724 this,
725 _httpClient); 725 _httpClient);
726 Future<HttpClientResponse> future; 726 Future<HttpClientResponse> future;
727 if (followRedirects && response.isRedirect) { 727 if (followRedirects && response.isRedirect) {
728 if (response.redirects.length < maxRedirects) { 728 if (response.redirects.length < maxRedirects) {
729 // Redirect and drain response. 729 // Redirect and drain response.
730 future = response.reduce(null, (x, y) {}) 730 future = response.fold(null, (x, y) {})
731 .then((_) => response.redirect()); 731 .then((_) => response.redirect());
732 } else { 732 } else {
733 // End with exception, too many redirects. 733 // End with exception, too many redirects.
734 future = response.reduce(null, (x, y) {}) 734 future = response.fold(null, (x, y) {})
735 .then((_) => new Future.immediateError( 735 .then((_) => new Future.immediateError(
736 new RedirectLimitExceededException(response.redirects))); 736 new RedirectLimitExceededException(response.redirects)));
737 } 737 }
738 } else if (response._shouldAuthenticate) { 738 } else if (response._shouldAuthenticate) {
739 future = response._authenticate(); 739 future = response._authenticate();
740 } else { 740 } else {
741 future = new Future<HttpClientResponse>.immediate(response); 741 future = new Future<HttpClientResponse>.immediate(response);
742 } 742 }
743 future.then( 743 future.then(
744 (v) => _responseCompleter.complete(v), 744 (v) => _responseCompleter.complete(v),
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
1082 } 1082 }
1083 1083
1084 Future<HttpClientRequest> postUrl(Uri url) { 1084 Future<HttpClientRequest> postUrl(Uri url) {
1085 return _openUrl("post", url); 1085 return _openUrl("post", url);
1086 } 1086 }
1087 1087
1088 void close({bool force: false}) { 1088 void close({bool force: false}) {
1089 _closing = true; 1089 _closing = true;
1090 // Create flattened copy of _idleConnections, as 'destory' will manipulate 1090 // Create flattened copy of _idleConnections, as 'destory' will manipulate
1091 // it. 1091 // it.
1092 var idle = _idleConnections.values.reduce( 1092 var idle = _idleConnections.values.fold(
1093 [], 1093 [],
1094 (l, e) { 1094 (l, e) {
1095 l.addAll(e); 1095 l.addAll(e);
1096 return l; 1096 return l;
1097 }); 1097 });
1098 idle.forEach((e) { 1098 idle.forEach((e) {
1099 e.close(); 1099 e.close();
1100 }); 1100 });
1101 assert(_idleConnections.isEmpty); 1101 assert(_idleConnections.isEmpty);
1102 if (force) { 1102 if (force) {
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1234 // Continue with next proxy. 1234 // Continue with next proxy.
1235 return connect(error.error); 1235 return connect(error.error);
1236 }); 1236 });
1237 } 1237 }
1238 return connect(new HttpException("No proxies given")); 1238 return connect(new HttpException("No proxies given"));
1239 } 1239 }
1240 1240
1241 _Credentials _findCredentials(Uri url, [_AuthenticationScheme scheme]) { 1241 _Credentials _findCredentials(Uri url, [_AuthenticationScheme scheme]) {
1242 // Look for credentials. 1242 // Look for credentials.
1243 _Credentials cr = 1243 _Credentials cr =
1244 _credentials.reduce(null, (_Credentials prev, _Credentials value) { 1244 _credentials.fold(null, (_Credentials prev, _Credentials value) {
1245 if (value.applies(url, scheme)) { 1245 if (value.applies(url, scheme)) {
1246 if (prev == null) return value; 1246 if (prev == null) return value;
1247 return value.uri.path.length > prev.uri.path.length ? value : prev; 1247 return value.uri.path.length > prev.uri.path.length ? value : prev;
1248 } else { 1248 } else {
1249 return prev; 1249 return prev;
1250 } 1250 }
1251 }); 1251 });
1252 return cr; 1252 return cr;
1253 } 1253 }
1254 1254
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
1770 1770
1771 1771
1772 class _RedirectInfo implements RedirectInfo { 1772 class _RedirectInfo implements RedirectInfo {
1773 const _RedirectInfo(int this.statusCode, 1773 const _RedirectInfo(int this.statusCode,
1774 String this.method, 1774 String this.method,
1775 Uri this.location); 1775 Uri this.location);
1776 final int statusCode; 1776 final int statusCode;
1777 final String method; 1777 final String method;
1778 final Uri location; 1778 final Uri location;
1779 } 1779 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698