| Index: sdk/lib/html/html_common/conversions_dartium.dart
|
| diff --git a/sdk/lib/html/html_common/conversions_dartium.dart b/sdk/lib/html/html_common/conversions_dartium.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fc7ca61360b1dba6bef2d672ce93ffc795d0028b
|
| --- /dev/null
|
| +++ b/sdk/lib/html/html_common/conversions_dartium.dart
|
| @@ -0,0 +1,63 @@
|
| +part of html_common;
|
| +
|
| +convertDartToNative_PrepareForStructuredClone(value) =>
|
| + new _StructuredCloneDartium().convertDartToNative_PrepareForStructuredClone(value);
|
| +
|
| +convertNativeToDart_AcceptStructuredClone(object, {mustCopy: false}) =>
|
| + new _AcceptStructuredCloneDartium().convertNativeToDart_AcceptStructuredClone(object, mustCopy: mustCopy);
|
| +
|
| +class _StructuredCloneDartium extends _StructuredClone {
|
| + newJsMap() => new js.JsObject(js.context["Object"]);
|
| + putIntoMap(map, key, value) => map[key] = value;
|
| + newJSList(length) => new js.JsArray();
|
| + cloneNotRequired(e) => e is js.JsObject;
|
| +}
|
| +
|
| +class _AcceptStructuredCloneDartium extends _AcceptStructuredClone {
|
| + newDartList(length) => new List(length);
|
| +
|
| + // JsObjects won't be identical, but will be equal only if the underlying
|
| + // Js entities are identical.
|
| + bool identicalInJs(a, b) =>
|
| + (a is js.JsObject) ? a == b : identical(a, b);
|
| +
|
| + void forEachJsField(jsObject, action) {
|
| + var keys = js.context["Object"].callMethod("keys", [jsObject]);
|
| + for (var key in keys) {
|
| + action(key, jsObject[key]);
|
| + }
|
| + }
|
| +}
|
| +
|
| +final _dateConstructor = js.context["Date"];
|
| +final _regexConstructor = js.context["RegExp"];
|
| +
|
| +bool isJavaScriptDate(value) => value is js.JsObject && value.instanceof(_dateConstructor);
|
| +bool isJavaScriptRegExp(value) => value is js.JsObject && value.instanceof(_regexConstructor);
|
| +bool isJavaScriptArray(value) => value is js.JsArray;
|
| +
|
| +final _object = js.context["Object"];
|
| +final _getPrototypeOf = _object["getPrototypeOf"];
|
| +_getProto(object) {
|
| + return _getPrototypeOf.apply([object]);
|
| +}
|
| +final _objectProto = js.context["Object"]["prototype"];
|
| +
|
| +bool isJavaScriptSimpleObject(value) {
|
| + if (!value is js.JsObject) return false;
|
| + var proto = _getProto(value);
|
| + return proto == _objectProto || proto == null;
|
| +}
|
| +bool isImmutableJavaScriptArray(value) =>
|
| + isJavaScriptArray(value) && value["immutable$list"] != null;
|
| +
|
| +final _promiseConstructor = js.context['Promise'];
|
| +bool isJavaScriptPromise(value) => value is js.JsObject && value['constructor'] == _promiseConstructor;
|
| +
|
| +Future convertNativePromiseToDartFuture(js.JsObject promise) {
|
| + var completer = new Completer();
|
| + var newPromise = promise
|
| + .callMethod("then", [(result) => completer.complete(result)])
|
| + .callMethod("catch", [(result) => completer.completeError(result)]);
|
| + return completer.future;
|
| +}
|
|
|