| Index: sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
 | 
| diff --git a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
 | 
| index 445f2febef3652cf7d2dabdf9d19447b82e402d2..74a659876ae6111c7b1079556e74141254c9018b 100644
 | 
| --- a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
 | 
| +++ b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
 | 
| @@ -1,5 +1,6 @@
 | 
|  library indexed_db;
 | 
|  
 | 
| +import 'dart:async';
 | 
|  import 'dart:html';
 | 
|  import 'dart:html_common';
 | 
|  import 'dart:nativewrappers';
 | 
| @@ -119,6 +120,12 @@ class CursorWithValue extends Cursor {
 | 
|  class Database extends EventTarget {
 | 
|    Database.internal() : super.internal();
 | 
|  
 | 
| +  static const EventStreamProvider<Event> abortEvent = const EventStreamProvider<Event>('abort');
 | 
| +
 | 
| +  static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
 | 
| +
 | 
| +  static const EventStreamProvider<UpgradeNeededEvent> versionChangeEvent = const EventStreamProvider<UpgradeNeededEvent>('versionchange');
 | 
| +
 | 
|    /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
 | 
|    DatabaseEvents get on =>
 | 
|      new DatabaseEvents(this);
 | 
| @@ -184,6 +191,12 @@ class Database extends EventTarget {
 | 
|    /** @domName IDBDatabase.transaction_3 */
 | 
|    Transaction _transaction_3(storeName_OR_storeNames, mode) native "IDBDatabase_transaction_3_Callback";
 | 
|  
 | 
| +  Stream<Event> get onAbort => abortEvent.forTarget(this);
 | 
| +
 | 
| +  Stream<Event> get onError => errorEvent.forTarget(this);
 | 
| +
 | 
| +  Stream<UpgradeNeededEvent> get onVersionChange => versionChangeEvent.forTarget(this);
 | 
| +
 | 
|  }
 | 
|  
 | 
|  /// @docsEditable true
 | 
| @@ -742,10 +755,18 @@ class ObjectStore extends NativeFieldWrapperClass1 {
 | 
|  class OpenDBRequest extends Request implements EventTarget {
 | 
|    OpenDBRequest.internal() : super.internal();
 | 
|  
 | 
| +  static const EventStreamProvider<Event> blockedEvent = const EventStreamProvider<Event>('blocked');
 | 
| +
 | 
| +  static const EventStreamProvider<VersionChangeEvent> upgradeNeededEvent = const EventStreamProvider<VersionChangeEvent>('upgradeneeded');
 | 
| +
 | 
|    /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
 | 
|    OpenDBRequestEvents get on =>
 | 
|      new OpenDBRequestEvents(this);
 | 
|  
 | 
| +  Stream<Event> get onBlocked => blockedEvent.forTarget(this);
 | 
| +
 | 
| +  Stream<VersionChangeEvent> get onUpgradeNeeded => upgradeNeededEvent.forTarget(this);
 | 
| +
 | 
|  }
 | 
|  
 | 
|  /// @docsEditable true
 | 
| @@ -770,6 +791,10 @@ class OpenDBRequestEvents extends RequestEvents {
 | 
|  class Request extends EventTarget {
 | 
|    Request.internal() : super.internal();
 | 
|  
 | 
| +  static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
 | 
| +
 | 
| +  static const EventStreamProvider<Event> successEvent = const EventStreamProvider<Event>('success');
 | 
| +
 | 
|    /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
 | 
|    RequestEvents get on =>
 | 
|      new RequestEvents(this);
 | 
| @@ -810,6 +835,10 @@ class Request extends EventTarget {
 | 
|    /** @domName IDBRequest.removeEventListener */
 | 
|    void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "IDBRequest_removeEventListener_Callback";
 | 
|  
 | 
| +  Stream<Event> get onError => errorEvent.forTarget(this);
 | 
| +
 | 
| +  Stream<Event> get onSuccess => successEvent.forTarget(this);
 | 
| +
 | 
|  }
 | 
|  
 | 
|  /// @docsEditable true
 | 
| @@ -834,6 +863,12 @@ class RequestEvents extends Events {
 | 
|  class Transaction extends EventTarget {
 | 
|    Transaction.internal() : super.internal();
 | 
|  
 | 
| +  static const EventStreamProvider<Event> abortEvent = const EventStreamProvider<Event>('abort');
 | 
| +
 | 
| +  static const EventStreamProvider<Event> completeEvent = const EventStreamProvider<Event>('complete');
 | 
| +
 | 
| +  static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
 | 
| +
 | 
|    /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
 | 
|    TransactionEvents get on =>
 | 
|      new TransactionEvents(this);
 | 
| @@ -874,6 +909,12 @@ class Transaction extends EventTarget {
 | 
|    /** @domName IDBTransaction.removeEventListener */
 | 
|    void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "IDBTransaction_removeEventListener_Callback";
 | 
|  
 | 
| +  Stream<Event> get onAbort => abortEvent.forTarget(this);
 | 
| +
 | 
| +  Stream<Event> get onComplete => completeEvent.forTarget(this);
 | 
| +
 | 
| +  Stream<Event> get onError => errorEvent.forTarget(this);
 | 
| +
 | 
|  }
 | 
|  
 | 
|  /// @docsEditable true
 | 
| @@ -937,10 +978,14 @@ class VersionChangeEvent extends Event {
 | 
|  class VersionChangeRequest extends Request implements EventTarget {
 | 
|    VersionChangeRequest.internal() : super.internal();
 | 
|  
 | 
| +  static const EventStreamProvider<Event> blockedEvent = const EventStreamProvider<Event>('blocked');
 | 
| +
 | 
|    /// @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent; @docsEditable true
 | 
|    VersionChangeRequestEvents get on =>
 | 
|      new VersionChangeRequestEvents(this);
 | 
|  
 | 
| +  Stream<Event> get onBlocked => blockedEvent.forTarget(this);
 | 
| +
 | 
|  }
 | 
|  
 | 
|  /// @docsEditable true
 | 
| 
 |