Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1228)

Unified Diff: sdk/lib/html/html_common/conversions_dart2js.dart

Issue 1349293006: Start using the dart2js type conversions in Dartium as well. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Merged Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/html/html_common/conversions.dart ('k') | sdk/lib/html/html_common/conversions_dartium.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/html/html_common/conversions_dart2js.dart
diff --git a/sdk/lib/html/html_common/conversions_dart2js.dart b/sdk/lib/html/html_common/conversions_dart2js.dart
new file mode 100644
index 0000000000000000000000000000000000000000..d0b7d77e217a968c4d22fccfa6867c41efa33dc8
--- /dev/null
+++ b/sdk/lib/html/html_common/conversions_dart2js.dart
@@ -0,0 +1,92 @@
+part of html_common;
+
+/// Converts a JavaScript object with properties into a Dart Map.
+/// Not suitable for nested objects.
+Map convertNativeToDart_Dictionary(object) {
+ if (object == null) return null;
+ var dict = {};
+ var keys = JS('JSExtendableArray', 'Object.getOwnPropertyNames(#)', object);
+ for (final key in keys) {
+ dict[key] = JS('var', '#[#]', object, key);
+ }
+ return dict;
+}
+
+/// Converts a flat Dart map into a JavaScript object with properties.
+convertDartToNative_Dictionary(Map dict, [void postCreate(dynamic)]) {
+ if (dict == null) return null;
+ var object = JS('var', '{}');
+ if (postCreate != null) {
+ postCreate(object);
+ }
+ dict.forEach((String key, value) {
+ JS('void', '#[#] = #', object, key, value);
+ });
+ return object;
+}
+
+
+/**
+ * Ensures that the input is a JavaScript Array.
+ *
+ * Creates a new JavaScript array if necessary, otherwise returns the original.
+ */
+List convertDartToNative_StringArray(List<String> input) {
+ // TODO(sra). Implement this.
+ return input;
+}
+
+DateTime convertNativeToDart_DateTime(date) {
+ var millisSinceEpoch = JS('int', '#.getTime()', date);
+ return new DateTime.fromMillisecondsSinceEpoch(millisSinceEpoch, isUtc: true);
+}
+
+convertDartToNative_DateTime(DateTime date) {
+ return JS('', 'new Date(#)', date.millisecondsSinceEpoch);
+}
+
+convertDartToNative_PrepareForStructuredClone(value) =>
+ new _StructuredCloneDart2Js().convertDartToNative_PrepareForStructuredClone(value);
+
+convertNativeToDart_AcceptStructuredClone(object, {mustCopy: false}) =>
+ new _AcceptStructuredCloneDart2Js().convertNativeToDart_AcceptStructuredClone(object, mustCopy: mustCopy);
+
+class _StructuredCloneDart2Js extends _StructuredClone {
+ newJsMap() => JS('var', '{}');
+ putIntoMap(map, key, value) => JS('void', '#[#] = #', map, key, value);
+ newJsList(length) => JS('JSExtendableArray', 'new Array(#)', length);
+ cloneNotRequired(e) => (e is NativeByteBuffer || e is NativeTypedData);
+}
+
+class _AcceptStructuredCloneDart2Js extends _AcceptStructuredClone {
+
+ newJsList(length) => JS('JSExtendableArray', 'new Array(#)', length);
+ newDartList(length) => newJsList(length);
+ identicalInJs(a, b) => identical(a, b);
+
+ void forEachJsField(object, action) {
+ for (final key in JS('JSExtendableArray', 'Object.keys(#)', object)) {
+ action(key, JS('var', '#[#]', object, key));
+ }
+ }
+}
+
+bool isJavaScriptDate(value) => JS('bool', '# instanceof Date', value);
+bool isJavaScriptRegExp(value) => JS('bool', '# instanceof RegExp', value);
+bool isJavaScriptArray(value) => JS('bool', '# instanceof Array', value);
+bool isJavaScriptSimpleObject(value) {
+ var proto = JS('', 'Object.getPrototypeOf(#)', value);
+ return JS('bool', '# === Object.prototype', proto) ||
+ JS('bool', '# === null', proto);
+}
+bool isImmutableJavaScriptArray(value) =>
+ JS('bool', r'!!(#.immutable$list)', value);
+bool isJavaScriptPromise(value) => JS('bool', r'# instanceof Promise', value);
+
+Future convertNativePromiseToDartFuture(promise) {
+ var completer = new Completer();
+ var then = convertDartClosureToJS((result) => completer.complete(result), 1);
+ var error = convertDartClosureToJS((result) => completer.completeError(result), 1);
+ var newPromise = JS('', '#.then(#).catch(#)', promise, then, error);
+ return completer.future;
+}
« no previous file with comments | « sdk/lib/html/html_common/conversions.dart ('k') | sdk/lib/html/html_common/conversions_dartium.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698