| Index: sdk/lib/io/http_parser.dart
 | 
| diff --git a/sdk/lib/io/http_parser.dart b/sdk/lib/io/http_parser.dart
 | 
| index a6662cf87a577b3c256da7eb246dc7300e79c5a0..db6adfcfaecaf60928f9173a55ed404c983aa93d 100644
 | 
| --- a/sdk/lib/io/http_parser.dart
 | 
| +++ b/sdk/lib/io/http_parser.dart
 | 
| @@ -106,8 +106,10 @@ class _HttpDetachedIncoming extends Stream<List<int>> {
 | 
|                          List<int> this.carryOverData,
 | 
|                          Completer oldResumeCompleter) {
 | 
|      controller = new StreamController<List<int>>(
 | 
| -        onSubscriptionStateChange: onSubscriptionStateChange,
 | 
| -        onPauseStateChange: onPauseStateChange);
 | 
| +        onListen: resume,
 | 
| +        onPause: pause,
 | 
| +        onResume: resume,
 | 
| +        onCancel: () => subscription.cancel());
 | 
|      if (subscription == null) {
 | 
|        // Socket was already closed.
 | 
|        if (carryOverData != null) controller.add(carryOverData);
 | 
| @@ -156,22 +158,6 @@ class _HttpDetachedIncoming extends Stream<List<int>> {
 | 
|        subscription.pause(resumeCompleter.future);
 | 
|      }
 | 
|    }
 | 
| -
 | 
| -  void onPauseStateChange() {
 | 
| -    if (controller.isPaused) {
 | 
| -      pause();
 | 
| -    } else {
 | 
| -      resume();
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  void onSubscriptionStateChange() {
 | 
| -    if (controller.hasListener) {
 | 
| -      resume();
 | 
| -    } else {
 | 
| -      subscription.cancel();
 | 
| -    }
 | 
| -  }
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -209,8 +195,10 @@ class _HttpParser
 | 
|  
 | 
|    _HttpParser._(this._requestParser) {
 | 
|      _controller = new StreamController<_HttpIncoming>(
 | 
| -          onSubscriptionStateChange: _updateParsePauseState,
 | 
| -          onPauseStateChange: _updateParsePauseState);
 | 
| +          onListen: _updateParsePauseState,
 | 
| +          onPause: _updateParsePauseState,
 | 
| +          onResume: _updateParsePauseState,
 | 
| +          onCancel: _updateParsePauseState);
 | 
|      _reset();
 | 
|    }
 | 
|  
 | 
| @@ -878,8 +866,10 @@ class _HttpParser
 | 
|      assert(_incoming == null);
 | 
|      assert(_bodyController == null);
 | 
|      _bodyController = new StreamController<List<int>>(
 | 
| -        onSubscriptionStateChange: _bodySubscriptionStateChange,
 | 
| -        onPauseStateChange: _updateParsePauseState);
 | 
| +        onListen: _bodySubscriptionStateChange,
 | 
| +        onPause: _updateParsePauseState,
 | 
| +        onResume: _updateParsePauseState,
 | 
| +        onCancel: _bodySubscriptionStateChange);
 | 
|      _incoming = new _HttpIncoming(
 | 
|          _headers, transferLength, _bodyController.stream);
 | 
|      _pauseParsing();  // Needed to handle detaching - don't start on the body!
 | 
| 
 |