| Index: sdk/lib/html/dartium/html_dartium.dart
|
| diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
|
| index e7681fea5018b590d01caab725aea63a8a0d9693..46b80ebf4eda6a985c650fdc7b874d5860a10b2c 100644
|
| --- a/sdk/lib/html/dartium/html_dartium.dart
|
| +++ b/sdk/lib/html/dartium/html_dartium.dart
|
| @@ -28089,107 +28089,6 @@ typedef EventListener(Event event);
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
|
|
| -/**
|
| - * Adapter for exposing DOM events as Dart streams.
|
| - */
|
| -class _EventStream<T extends Event> extends Stream<T> {
|
| - final EventTarget _target;
|
| - final String _eventType;
|
| - final bool _useCapture;
|
| -
|
| - _EventStream(this._target, this._eventType, this._useCapture);
|
| -
|
| - // DOM events are inherently multi-subscribers.
|
| - Stream<T> asBroadcastStream() => this;
|
| - bool get isBroadcast => true;
|
| -
|
| - StreamSubscription<T> listen(void onData(T event),
|
| - { void onError(error),
|
| - void onDone(),
|
| - bool cancelOnError}) {
|
| -
|
| - return new _EventStreamSubscription<T>(
|
| - this._target, this._eventType, onData, this._useCapture);
|
| - }
|
| -}
|
| -
|
| -class _EventStreamSubscription<T extends Event> extends StreamSubscription<T> {
|
| - int _pauseCount = 0;
|
| - EventTarget _target;
|
| - final String _eventType;
|
| - var _onData;
|
| - final bool _useCapture;
|
| -
|
| - _EventStreamSubscription(this._target, this._eventType, this._onData,
|
| - this._useCapture) {
|
| - _tryResume();
|
| - }
|
| -
|
| - void cancel() {
|
| - if (_canceled) return;
|
| -
|
| - _unlisten();
|
| - // Clear out the target to indicate this is complete.
|
| - _target = null;
|
| - _onData = null;
|
| - }
|
| -
|
| - bool get _canceled => _target == null;
|
| -
|
| - void onData(void handleData(T event)) {
|
| - if (_canceled) {
|
| - throw new StateError("Subscription has been canceled.");
|
| - }
|
| - // Remove current event listener.
|
| - _unlisten();
|
| -
|
| - _onData = handleData;
|
| - _tryResume();
|
| - }
|
| -
|
| - /// Has no effect.
|
| - void onError(void handleError(error)) {}
|
| -
|
| - /// Has no effect.
|
| - void onDone(void handleDone()) {}
|
| -
|
| - void pause([Future resumeSignal]) {
|
| - if (_canceled) return;
|
| - ++_pauseCount;
|
| - _unlisten();
|
| -
|
| - if (resumeSignal != null) {
|
| - resumeSignal.whenComplete(resume);
|
| - }
|
| - }
|
| -
|
| - bool get isPaused => _pauseCount > 0;
|
| -
|
| - void resume() {
|
| - if (_canceled || !isPaused) return;
|
| - --_pauseCount;
|
| - _tryResume();
|
| - }
|
| -
|
| - void _tryResume() {
|
| - if (_onData != null && !isPaused) {
|
| - _target.$dom_addEventListener(_eventType, _onData, _useCapture);
|
| - }
|
| - }
|
| -
|
| - void _unlisten() {
|
| - if (_onData != null) {
|
| - _target.$dom_removeEventListener(_eventType, _onData, _useCapture);
|
| - }
|
| - }
|
| -
|
| - Future asFuture([var futureValue]) {
|
| - // We just need a future that will never succeed or fail.
|
| - Completer completer = new Completer();
|
| - return completer.future;
|
| - }
|
| -}
|
| -
|
|
|
| /**
|
| * A factory to expose DOM events as Streams.
|
| @@ -28218,7 +28117,22 @@ class EventStreamProvider<T extends Event> {
|
| * [addEventListener](http://docs.webplatform.org/wiki/dom/methods/addEventListener)
|
| */
|
| Stream<T> forTarget(EventTarget e, {bool useCapture: false}) {
|
| - return new _EventStream(e, _eventType, useCapture);
|
| + var controller;
|
| +
|
| + void onData(data) {
|
| + controller.add(data);
|
| + }
|
| +
|
| + controller = new StreamController<T>(
|
| + onListen: () {
|
| + e.$dom_addEventListener(_eventType, onData, useCapture);
|
| + },
|
| + onCancel: () {
|
| + e.$dom_removeEventListener(_eventType, onData, useCapture);
|
| + },
|
| + sync: true);
|
| +
|
| + return controller.stream;
|
| }
|
|
|
| /**
|
| @@ -28244,7 +28158,24 @@ class _CustomEventStreamProvider<T extends Event>
|
| const _CustomEventStreamProvider(this._eventTypeGetter);
|
|
|
| Stream<T> forTarget(EventTarget e, {bool useCapture: false}) {
|
| - return new _EventStream(e, _eventTypeGetter(e), useCapture);
|
| + var controller;
|
| +
|
| + var eventType = _eventTypeGetter(e);
|
| +
|
| + void onData(data) {
|
| + controller.add(data);
|
| + }
|
| +
|
| + controller = new StreamController<T>(
|
| + onListen: () {
|
| + e.$dom_addEventListener(eventType, onData, useCapture);
|
| + },
|
| + onCancel: () {
|
| + e.$dom_removeEventListener(eventType, onData, useCapture);
|
| + },
|
| + sync: true);
|
| +
|
| + return controller.stream;
|
| }
|
|
|
| String getEventType(EventTarget target) {
|
|
|