| Index: sdk/lib/html/html_common/conversions.dart
|
| diff --git a/sdk/lib/html/src/dart2js_Conversions.dart b/sdk/lib/html/html_common/conversions.dart
|
| similarity index 68%
|
| copy from sdk/lib/html/src/dart2js_Conversions.dart
|
| copy to sdk/lib/html/html_common/conversions.dart
|
| index cc4469970dccdfe87f214d13ca0b68cbad8c4ba5..f4d42adfbd8d103e5c0d34dd38192821fdae878e 100644
|
| --- a/sdk/lib/html/src/dart2js_Conversions.dart
|
| +++ b/sdk/lib/html/html_common/conversions.dart
|
| @@ -26,77 +26,12 @@
|
| // We omit an unwrapper for Window as no methods take a non-local
|
| // window as a parameter.
|
|
|
| -part of html;
|
| -
|
| -Window _convertNativeToDart_Window(win) {
|
| - return _DOMWindowCrossFrame._createSafe(win);
|
| -}
|
| -
|
| -EventTarget _convertNativeToDart_EventTarget(e) {
|
| - // Assume it's a Window if it contains the setInterval property. It may be
|
| - // from a different frame - without a patched prototype - so we cannot
|
| - // rely on Dart type checking.
|
| - if (JS('bool', r'"setInterval" in #', e))
|
| - return _DOMWindowCrossFrame._createSafe(e);
|
| - else
|
| - return e;
|
| -}
|
| -
|
| -EventTarget _convertDartToNative_EventTarget(e) {
|
| - if (e is _DOMWindowCrossFrame) {
|
| - return e._window;
|
| - } else {
|
| - return e;
|
| - }
|
| -}
|
| -
|
| -// Conversions for ImageData
|
| -//
|
| -// On Firefox, the returned ImageData is a plain object.
|
| -
|
| -class _TypedImageData implements ImageData {
|
| - final Uint8ClampedArray data;
|
| - final int height;
|
| - final int width;
|
| -
|
| - _TypedImageData(this.data, this.height, this.width);
|
| -}
|
| -
|
| -ImageData _convertNativeToDart_ImageData(nativeImageData) {
|
| -
|
| - // None of the native getters that return ImageData have the type ImageData
|
| - // since that is incorrect for FireFox (which returns a plain Object). So we
|
| - // need something that tells the compiler that the ImageData class has been
|
| - // instantiated.
|
| - // TODO(sra): Remove this when all the ImageData returning APIs have been
|
| - // annotated as returning the union ImageData + Object.
|
| - JS('ImageData', '0');
|
| -
|
| - if (nativeImageData is ImageData) return nativeImageData;
|
| -
|
| - // On Firefox the above test fails because imagedata is a plain object.
|
| - // So we create a _TypedImageData.
|
| -
|
| - return new _TypedImageData(
|
| - JS('var', '#.data', nativeImageData),
|
| - JS('var', '#.height', nativeImageData),
|
| - JS('var', '#.width', nativeImageData));
|
| -}
|
| -
|
| -// We can get rid of this conversion if _TypedImageData implements the fields
|
| -// with native names.
|
| -_convertDartToNative_ImageData(ImageData imageData) {
|
| - if (imageData is _TypedImageData) {
|
| - return JS('', '{data: #, height: #, width: #}',
|
| - imageData.data, imageData.height, imageData.width);
|
| - }
|
| - return imageData;
|
| -}
|
| +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 = {};
|
| for (final key in JS('=List', 'Object.getOwnPropertyNames(#)', object)) {
|
| @@ -106,7 +41,7 @@ Map _convertNativeToDart_Dictionary(object) {
|
| }
|
|
|
| /// Converts a flat Dart map into a JavaScript object with properties.
|
| -_convertDartToNative_Dictionary(Map dict) {
|
| +convertDartToNative_Dictionary(Map dict) {
|
| if (dict == null) return null;
|
| var object = JS('var', '{}');
|
| dict.forEach((String key, value) {
|
| @@ -121,7 +56,7 @@ _convertDartToNative_Dictionary(Map dict) {
|
| *
|
| * Creates a new JavaScript array if necessary, otherwise returns the original.
|
| */
|
| -List _convertDartToNative_StringArray(List<String> input) {
|
| +List convertDartToNative_StringArray(List<String> input) {
|
| // TODO(sra). Implement this.
|
| return input;
|
| }
|
| @@ -129,61 +64,15 @@ List _convertDartToNative_StringArray(List<String> input) {
|
|
|
| // -----------------------------------------------------------------------------
|
|
|
| -/**
|
| - * Converts a native IDBKey into a Dart object.
|
| - *
|
| - * May return the original input. May mutate the original input (but will be
|
| - * idempotent if mutation occurs). It is assumed that this conversion happens
|
| - * on native IDBKeys on all paths that return IDBKeys from native DOM calls.
|
| - *
|
| - * If necessary, JavaScript Dates are converted into Dart Dates.
|
| - */
|
| -_convertNativeToDart_IDBKey(nativeKey) {
|
| - containsDate(object) {
|
| - if (_isJavaScriptDate(object)) return true;
|
| - if (object is List) {
|
| - for (int i = 0; i < object.length; i++) {
|
| - if (containsDate(object[i])) return true;
|
| - }
|
| - }
|
| - return false; // number, string.
|
| - }
|
| - if (containsDate(nativeKey)) {
|
| - throw new UnimplementedError('IDBKey containing Date');
|
| - }
|
| - // TODO: Cache conversion somewhere?
|
| - return nativeKey;
|
| -}
|
| -
|
| -/**
|
| - * Converts a Dart object into a valid IDBKey.
|
| - *
|
| - * May return the original input. Does not mutate input.
|
| - *
|
| - * If necessary, [dartKey] may be copied to ensure all lists are converted into
|
| - * JavaScript Arrays and Dart Dates into JavaScript Dates.
|
| - */
|
| -_convertDartToNative_IDBKey(dartKey) {
|
| - // TODO: Implement.
|
| - return dartKey;
|
| -}
|
| -
|
| -
|
| -
|
| -/// May modify original. If so, action is idempotent.
|
| -_convertNativeToDart_IDBAny(object) {
|
| - return _convertNativeToDart_AcceptStructuredClone(object, mustCopy: false);
|
| -}
|
| -
|
| /// Converts a Dart value into a JavaScript SerializedScriptValue.
|
| -_convertDartToNative_SerializedScriptValue(value) {
|
| +convertDartToNative_SerializedScriptValue(value) {
|
| return _convertDartToNative_PrepareForStructuredClone(value);
|
| }
|
|
|
| /// Since the source object may be viewed via a JavaScript event listener the
|
| /// original may not be modified.
|
| -_convertNativeToDart_SerializedScriptValue(object) {
|
| - return _convertNativeToDart_AcceptStructuredClone(object, mustCopy: true);
|
| +convertNativeToDart_SerializedScriptValue(object) {
|
| + return convertNativeToDart_AcceptStructuredClone(object, mustCopy: true);
|
| }
|
|
|
|
|
| @@ -246,7 +135,7 @@ _convertDartToNative_PrepareForStructuredClone(value) {
|
|
|
| if (e is File) return e;
|
| if (e is Blob) return e;
|
| - if (e is _FileList) return e;
|
| + if (e is FileList) return e;
|
|
|
| // TODO(sra): Firefox: How to convert _TypedImageData on the other end?
|
| if (e is ImageData) return e;
|
| @@ -284,11 +173,11 @@ _convertDartToNative_PrepareForStructuredClone(value) {
|
|
|
| int i = 0;
|
|
|
| - if (_isJavaScriptArray(e) &&
|
| + if (isJavaScriptArray(e) &&
|
| // We have to copy immutable lists, otherwise the structured clone
|
| // algorithm will copy the .immutable$list marker property, making the
|
| // list immutable when received!
|
| - !_isImmutableJavaScriptArray(e)) {
|
| + !isImmutableJavaScriptArray(e)) {
|
| writeSlot(slot, true); // Deferred copy.
|
| for ( ; i < length; i++) {
|
| var element = e[i];
|
| @@ -349,7 +238,7 @@ _convertDartToNative_PrepareForStructuredClone(value) {
|
| * MessageEvents. Mutating the object to make it more 'Dart-like' would corrupt
|
| * the value as seen from the JavaScript listeners.
|
| */
|
| -_convertNativeToDart_AcceptStructuredClone(object, {mustCopy = false}) {
|
| +convertNativeToDart_AcceptStructuredClone(object, {mustCopy = false}) {
|
|
|
| // TODO(sra): Replace slots with identity hash table that works on non-dart
|
| // objects.
|
| @@ -374,17 +263,17 @@ _convertNativeToDart_AcceptStructuredClone(object, {mustCopy = false}) {
|
| if (e is num) return e;
|
| if (e is String) return e;
|
|
|
| - if (_isJavaScriptDate(e)) {
|
| + if (isJavaScriptDate(e)) {
|
| // TODO(sra).
|
| throw new UnimplementedError('structured clone of Date');
|
| }
|
|
|
| - if (_isJavaScriptRegExp(e)) {
|
| + if (isJavaScriptRegExp(e)) {
|
| // TODO(sra).
|
| throw new UnimplementedError('structured clone of RegExp');
|
| }
|
|
|
| - if (_isJavaScriptSimpleObject(e)) {
|
| + if (isJavaScriptSimpleObject(e)) {
|
| // TODO(sra): If mustCopy is false, swizzle the prototype for one of a Map
|
| // implementation that uses the properies as storage.
|
| var slot = findSlot(e);
|
| @@ -399,7 +288,7 @@ _convertNativeToDart_AcceptStructuredClone(object, {mustCopy = false}) {
|
| return copy;
|
| }
|
|
|
| - if (_isJavaScriptArray(e)) {
|
| + if (isJavaScriptArray(e)) {
|
| var slot = findSlot(e);
|
| var copy = readSlot(slot);
|
| if (copy != null) return copy;
|
| @@ -426,12 +315,12 @@ _convertNativeToDart_AcceptStructuredClone(object, {mustCopy = false}) {
|
| }
|
|
|
|
|
| -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) =>
|
| +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) =>
|
| JS('bool', 'Object.getPrototypeOf(#) === Object.prototype', value);
|
| -bool _isImmutableJavaScriptArray(value) =>
|
| +bool isImmutableJavaScriptArray(value) =>
|
| JS('bool', r'!!(#.immutable$list)', value);
|
|
|
|
|
| @@ -442,11 +331,7 @@ const String _serializedScriptValue =
|
| 'Blob|File|ArrayBuffer|ArrayBufferView'
|
| // TODO(sra): Add Date, RegExp.
|
| ;
|
| -const _annotation_Creates_SerializedScriptValue =
|
| +const annotation_Creates_SerializedScriptValue =
|
| const Creates(_serializedScriptValue);
|
| -const _annotation_Returns_SerializedScriptValue =
|
| +const annotation_Returns_SerializedScriptValue =
|
| const Returns(_serializedScriptValue);
|
| -
|
| -const String _idbKey = '=List|=Object|num|String'; // TODO(sra): Add Date.
|
| -const _annotation_Creates_IDBKey = const Creates(_idbKey);
|
| -const _annotation_Returns_IDBKey = const Returns(_idbKey);
|
|
|