Chromium Code Reviews| Index: runtime/bin/stream_util.dart |
| diff --git a/runtime/bin/stream_util.dart b/runtime/bin/stream_util.dart |
| index f5f94820c1ae0c727de73bde2f13086b1681c254..ad06819c901ebe47d151f9be44369c796aedf693 100644 |
| --- a/runtime/bin/stream_util.dart |
| +++ b/runtime/bin/stream_util.dart |
| @@ -36,9 +36,7 @@ class _BaseDataInputStream { |
| } |
| void close() { |
| - if (_scheduledDataCallback != null) { |
| - _scheduledDataCallback.cancel(); |
| - } |
| + _cancelScheduledDataCallback(); |
| _close(); |
| _checkScheduleCallbacks(); |
| } |
| @@ -61,6 +59,37 @@ class _BaseDataInputStream { |
| abstract List<int> _read(int bytesToRead); |
| + void _dataReceived() { |
| + // More data have been received asynchronously. Perform the data |
|
Mads Ager (google)
2012/02/28 12:27:40
have -> has
Søren Gjesse
2012/02/28 13:03:42
Done.
|
| + // handler callback now. |
| + _cancelScheduledDataCallback(); |
| + if (_clientDataHandler !== null) { |
| + _clientDataHandler(); |
| + } |
| + _checkScheduleCallbacks(); |
| + } |
| + |
| + void _closeReceived() { |
| + // Close indication have been received asynchronously. Perform the |
|
Mads Ager (google)
2012/02/28 12:27:40
have -> has
Søren Gjesse
2012/02/28 13:03:42
Done.
|
| + // close callback now if all data has been delivered. |
| + _streamMarkedClosed = true; |
| + if (available() == 0) { |
| + if (_clientCloseHandler !== null) { |
| + _clientCloseHandler(); |
| + _closeCallbackCalled = true; |
| + } |
| + } else { |
| + _checkScheduleCallbacks(); |
| + } |
| + } |
| + |
| + void _cancelScheduledDataCallback() { |
| + if (_scheduledDataCallback != null) { |
| + _scheduledDataCallback.cancel(); |
| + _scheduledDataCallback = null; |
| + } |
| + } |
| + |
| void _checkScheduleCallbacks() { |
| void issueDataCallback(Timer timer) { |
| _scheduledDataCallback = null; |
| @@ -84,9 +113,7 @@ class _BaseDataInputStream { |
| _scheduledDataCallback = new Timer(issueDataCallback, 0); |
| } |
| } else if (_streamMarkedClosed && !_closeCallbackCalled) { |
| - if (_scheduledDataCallback != null) { |
| - _scheduledDataCallback.cancel(); |
| - } |
| + _cancelScheduledDataCallback(); |
| _close(); |
| _scheduledCloseCallback = new Timer(issueCloseCallback, 0); |
| _closeCallbackCalled = true; |