diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart index c440394312c..5fb4ceb5932 100644 --- a/sdk/lib/html/dart2js/html_dart2js.dart +++ b/sdk/lib/html/dart2js/html_dart2js.dart @@ -102,40 +102,28 @@ HtmlDocument get document => JS('returns:HtmlDocument;depends:none;effects:none;gvn:true', 'document'); // Supoort to convert JS Promise to a Dart Future. -Future promiseToFuture(thePromise) { +Future promiseToFuture(jsPromise) { var completer = new Completer(); var thenSuccessCode = (promiseValue) => completer.complete(promiseValue); var thenErrorCode = (promiseError) => completer.completeError(promiseError); - JS("", "#.then(#, #)", thePromise, convertDartClosureToJS(thenSuccessCode, 1), + JS("", "#.then(#, #)", jsPromise, convertDartClosureToJS(thenSuccessCode, 1), convertDartClosureToJS(thenErrorCode, 1)); return completer.future; } -// Supoort to convert JS Promise to a Dart Future that returns a MapLike (Class with Map mixin). -Future promiseToFutureMap(thePromise) { - var completer = new Completer(); - - var thenSuccessCode = (promiseValue) => completer.complete(promiseValue); - var thenErrorCode = (promiseError) => completer.completeError(promiseError); - - JS("", "#.then(#, #)", thePromise, convertDartClosureToJS(thenSuccessCode, 1), - convertDartClosureToJS(thenErrorCode, 1)); - - return completer.future; -} - -// Supoort to convert JS Promise to a Dart Future that returns a Dictionary as a Dart Map. -Future promiseToFutureDictionary(thePromise) { - var completer = new Completer(); +// Supoort to convert JS Promise to a Dart Future>. Each property of the JS +// object is added to the Map as a key of type String with a value of type dynamic. +Future> promiseToFutureAsMap(jsPromise) { + var completer = new Completer>(); var thenSuccessCode = (promiseValue) => completer.complete(convertNativeToDart_Dictionary(promiseValue)); var thenErrorCode = (promiseError) => completer.completeError(promiseError); - JS("", "#.then(#, #)", thePromise, convertDartClosureToJS(thenSuccessCode, 1), + JS("", "#.then(#, #)", jsPromise, convertDartClosureToJS(thenSuccessCode, 1), convertDartClosureToJS(thenErrorCode, 1)); return completer.future; @@ -23376,8 +23364,8 @@ class ImageCapture extends Interceptor { @DomName('ImageCapture.getPhotoSettings') @DocsEditable() @Experimental() // untriaged - Future getPhotoSettings() => - promiseToFutureDictionary(JS("", "#.getPhotoSettings()", this)); + Future> getPhotoSettings() => + promiseToFutureAsMap(JS("", "#.getPhotoSettings()", this)); @DomName('ImageCapture.grabFrame') @DocsEditable() @@ -28253,8 +28241,8 @@ class NavigationPreloadManager extends Interceptor { @DomName('NavigationPreloadManager.getState') @DocsEditable() @Experimental() // untriaged - Future getState() => - promiseToFutureDictionary(JS("", "#.getState()", this)); + Future> getState() => + promiseToFutureAsMap(JS("", "#.getState()", this)); } // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a @@ -31582,8 +31570,8 @@ class PaymentInstruments extends Interceptor { @DomName('PaymentInstruments.get') @DocsEditable() @Experimental() // untriaged - Future get(String instrumentKey) => - promiseToFutureDictionary(JS("", "#.get(#)", this, instrumentKey)); + Future> get(String instrumentKey) => + promiseToFutureAsMap(JS("", "#.get(#)", this, instrumentKey)); @DomName('PaymentInstruments.has') @DocsEditable() @@ -34806,7 +34794,7 @@ class RtcPeerConnection extends EventTarget { @DomName('RTCPeerConnection.getStats') @DocsEditable() - Future getStats() => promiseToFutureMap(JS("", "#.getStats()", this)); + Future getStats() => promiseToFuture(JS("", "#.getStats()", this)); @DomName('RTCPeerConnection.removeStream') @DocsEditable() @@ -37903,8 +37891,8 @@ class StorageManager extends Interceptor { @DomName('StorageManager.estimate') @DocsEditable() @Experimental() // untriaged - Future estimate() => - promiseToFutureDictionary(JS("", "#.estimate()", this)); + Future> estimate() => + promiseToFutureAsMap(JS("", "#.estimate()", this)); @DomName('StorageManager.persist') @DocsEditable() diff --git a/sdk/lib/html/html_common/conversions_dart2js.dart b/sdk/lib/html/html_common/conversions_dart2js.dart index 0a315ecf9c2..f99b357d6c2 100644 --- a/sdk/lib/html/html_common/conversions_dart2js.dart +++ b/sdk/lib/html/html_common/conversions_dart2js.dart @@ -2,9 +2,9 @@ part of html_common; /// Converts a JavaScript object with properties into a Dart Map. /// Not suitable for nested objects. -Map convertNativeToDart_Dictionary(object) { +Map convertNativeToDart_Dictionary(object) { if (object == null) return null; - var dict = {}; + var dict = {}; var keys = JS('JSExtendableArray', 'Object.getOwnPropertyNames(#)', object); for (final key in keys) { dict[key] = JS('var', '#[#]', object, key); diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py index 036b320b977..324900ca1ff 100644 --- a/tools/dom/scripts/systemhtml.py +++ b/tools/dom/scripts/systemhtml.py @@ -1293,12 +1293,12 @@ class Dart2JSBackend(HtmlDartGenerator): promiseCall = 'promiseToFuture' if promiseFound is not(None): if 'maplike' in promiseFound: - promiseCall = 'promiseToFutureMap' + promiseCall = 'promiseToFuture' promiseType = 'Future' elif promiseFound['type'] == 'dictionary': # It's a dictionary so return as a Map. - promiseCall = 'promiseToFutureDictionary' - promiseType = 'Future' + promiseCall = 'promiseToFutureAsMap' + promiseType = 'Future>' else: paramType = promiseFound['type'] promiseCall = 'promiseToFuture<%s>' % paramType diff --git a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate index 2f5c1e9eb7b..d989b1d8066 100644 --- a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate +++ b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate @@ -122,39 +122,28 @@ HtmlDocument get document => JS('returns:HtmlDocument;depends:none;effects:none;gvn:true', 'document'); // Supoort to convert JS Promise to a Dart Future. -Future promiseToFuture(thePromise) { +Future promiseToFuture(jsPromise) { var completer = new Completer(); var thenSuccessCode = (promiseValue) => completer.complete(promiseValue); var thenErrorCode = (promiseError) => completer.completeError(promiseError); - JS("", "#.then(#, #)", thePromise, convertDartClosureToJS(thenSuccessCode, 1), convertDartClosureToJS(thenErrorCode, 1)); - - return completer.future; -} - -// Supoort to convert JS Promise to a Dart Future that returns a MapLike (Class with Map mixin). -Future promiseToFutureMap(thePromise) { - var completer = new Completer(); - - var thenSuccessCode = (promiseValue) => completer.complete(promiseValue); - var thenErrorCode = (promiseError) => completer.completeError(promiseError); - - JS("", "#.then(#, #)", thePromise, convertDartClosureToJS(thenSuccessCode, 1), + JS("", "#.then(#, #)", jsPromise, convertDartClosureToJS(thenSuccessCode, 1), convertDartClosureToJS(thenErrorCode, 1)); return completer.future; } -// Supoort to convert JS Promise to a Dart Future that returns a Dictionary as a Dart Map. -Future promiseToFutureDictionary(thePromise) { - var completer = new Completer(); +// Supoort to convert JS Promise to a Dart Future>. Each property of the JS +// object is added to the Map as a key of type String with a value of type dynamic. +Future> promiseToFutureAsMap(jsPromise) { + var completer = new Completer>(); var thenSuccessCode = (promiseValue) => completer.complete(convertNativeToDart_Dictionary(promiseValue)); var thenErrorCode = (promiseError) => completer.completeError(promiseError); - JS("", "#.then(#, #)", thePromise, convertDartClosureToJS(thenSuccessCode, 1), + JS("", "#.then(#, #)", jsPromise, convertDartClosureToJS(thenSuccessCode, 1), convertDartClosureToJS(thenErrorCode, 1)); return completer.future;