mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 21:40:07 +00:00
Optimize dartium dart:html bindings so real world application performance is acceptable. Improves dart:html performance by 2X-30X for microbenchmarks. Real world improvement is typically 2X-3X.
BUG= Review URL: https://codereview.chromium.org/1832713002 .
This commit is contained in:
parent
a91f758b86
commit
c65854d2e4
File diff suppressed because it is too large
Load diff
|
@ -123,9 +123,6 @@ Future<Isolate> spawnDomUri(Uri uri, List<String> args, message) {
|
|||
throw new UnimplementedError();
|
||||
}
|
||||
|
||||
/// Dartium functions that are a NOOP in dart2js.
|
||||
unwrap_jso(dartClass_instance) => dartClass_instance;
|
||||
wrap_jso(jsObject) => jsObject;
|
||||
createCustomUpgrader(Type customElementClass, $this) => $this;
|
||||
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -91,9 +91,3 @@ Future convertNativePromiseToDartFuture(promise) {
|
|||
var newPromise = JS('', '#.then(#)["catch"](#)', promise, then, error);
|
||||
return completer.future;
|
||||
}
|
||||
|
||||
/// Wrap a JS object with an instance of the matching dart:html class. Used only in Dartium.
|
||||
wrap_jso(jsObject) => jsObject;
|
||||
|
||||
/// Find the underlying JS object for a dart:html Dart object.
|
||||
unwrap_jso(dartClass_instance) => dartClass_instance;
|
||||
|
|
|
@ -7,11 +7,11 @@ 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;
|
||||
// TODO(alanknight): Don't create two extra lists to get a fixed-length JS list.
|
||||
newJsList(length) => new js.JsArray.from(new List(length));
|
||||
cloneNotRequired(e) => e is js.JsObject;
|
||||
newJsMap() => js.JsNative.newObject();
|
||||
putIntoMap(map, key, value) => js.JsNative.setProperty(map, key, value);
|
||||
newJsList(length) => js.JsNative.newArray()..length = length;
|
||||
cloneNotRequired(e) =>
|
||||
e is js.JSObject || e is TypedData || e is ByteBuffer;
|
||||
}
|
||||
|
||||
/// A version of _AcceptStructuredClone, but using a different algorithm
|
||||
|
@ -24,15 +24,14 @@ class _StructuredCloneDartium extends _StructuredClone {
|
|||
class _AcceptStructuredCloneDartium {
|
||||
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);
|
||||
// As long as we stick to JSObject instead of intermingling legacy JsObject,
|
||||
// we can simply use identical.
|
||||
bool identicalInJs(a, b) => identical(a, b);
|
||||
|
||||
void forEachJsField(jsObject, action) {
|
||||
var keys = js.context["Object"].callMethod("keys", [jsObject]);
|
||||
var keys = js.JsNative.callMethod(_object, "keys", [jsObject]);
|
||||
for (var key in keys) {
|
||||
action(key, jsObject[key]);
|
||||
action(key, js.JsNative.getProperty(jsObject, key));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -52,10 +51,7 @@ class _AcceptStructuredCloneDartium {
|
|||
if (e is bool) return e;
|
||||
if (e is num) return e;
|
||||
if (e is String) return e;
|
||||
|
||||
if (isJavaScriptDate(e)) {
|
||||
return convertNativeToDart_DateTime(e);
|
||||
}
|
||||
if (e is DateTime) return e;
|
||||
|
||||
if (isJavaScriptRegExp(e)) {
|
||||
// TODO(sra).
|
||||
|
@ -106,51 +102,60 @@ class _AcceptStructuredCloneDartium {
|
|||
}
|
||||
}
|
||||
|
||||
final _dateConstructor = js.context["Date"];
|
||||
final _regexConstructor = js.context["RegExp"];
|
||||
final _dateConstructor = js.JsNative.getProperty(window, "Date");
|
||||
final _regexConstructor = js.JsNative.getProperty(window, "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;
|
||||
bool isJavaScriptDate(value) => value is js.JSObject && js.JsNative.instanceof(value, _dateConstructor);
|
||||
bool isJavaScriptRegExp(value) => value is js.JSObject && js.JsNative.instanceof(value, _regexConstructor);
|
||||
bool isJavaScriptArray(value) => value is js.JSArray;
|
||||
|
||||
final _object = js.context["Object"];
|
||||
final _getPrototypeOf = _object["getPrototypeOf"];
|
||||
final _object = js.JsNative.getProperty(window, "Object");
|
||||
final _getPrototypeOf = js.JsNative.getProperty(_object, "getPrototypeOf");
|
||||
_getProto(object) {
|
||||
return _getPrototypeOf.apply([object]);
|
||||
return _getPrototypeOf(object);
|
||||
}
|
||||
final _objectProto = js.context["Object"]["prototype"];
|
||||
final _objectProto = js.JsNative.getProperty(_object, "prototype");
|
||||
|
||||
bool isJavaScriptSimpleObject(value) {
|
||||
if (value is! js.JsObject) return false;
|
||||
if (value is! js.JSObject) return false;
|
||||
var proto = _getProto(value);
|
||||
return proto == _objectProto || proto == null;
|
||||
}
|
||||
|
||||
// TODO(jacobr): this makes little sense unless we are doing something
|
||||
// ambitious to make Dartium and Dart2Js interop well with each other.
|
||||
bool isImmutableJavaScriptArray(value) =>
|
||||
isJavaScriptArray(value) && value["immutable$list"] != null;
|
||||
isJavaScriptArray(value) && js.JsNative.getProperty(value, "immutable$list") != null;
|
||||
|
||||
final _promiseConstructor = js.context['Promise'];
|
||||
bool isJavaScriptPromise(value) => value is js.JsObject && value['constructor'] == _promiseConstructor;
|
||||
final _promiseConstructor = js.JsNative.getProperty(window, 'Promise');
|
||||
bool isJavaScriptPromise(value) => value is js.JSObject && identical(js.JsNative.getProperty(value, 'constructor'), _promiseConstructor);
|
||||
|
||||
Future convertNativePromiseToDartFuture(js.JsObject promise) {
|
||||
Future convertNativePromiseToDartFuture(js.JSObject promise) {
|
||||
var completer = new Completer();
|
||||
var newPromise = promise
|
||||
.callMethod("then", [(result) => completer.complete(result)])
|
||||
.callMethod("catch", [(result) => completer.completeError(result)]);
|
||||
var newPromise = js.JsNative.callMethod(js.JsNative.callMethod(promise,
|
||||
"then", [js.allowInterop((result) => completer.complete(result))]),
|
||||
"catch", [js.allowInterop((result) => completer.completeError(result))]);
|
||||
return completer.future;
|
||||
}
|
||||
|
||||
convertDartToNative_DateTime(DateTime date) {
|
||||
return new js.JsObject(js.context["Date"], [date.millisecondsSinceEpoch]);
|
||||
return date;
|
||||
}
|
||||
|
||||
/// Creates a Dart Rectangle from a Javascript object with properties
|
||||
/// left, top, width and height. Used internally in Dartium.
|
||||
Rectangle make_dart_rectangle(r) =>
|
||||
r == null ? null : new Rectangle(
|
||||
/// left, top, width and height or a 4 element array of integers. Used internally in Dartium.
|
||||
Rectangle make_dart_rectangle(r) {
|
||||
if (r == null) return null;
|
||||
if (r is List) {
|
||||
return new Rectangle(r[0], r[1], r[2], r[3]);
|
||||
}
|
||||
|
||||
return new Rectangle(
|
||||
js.JsNative.getProperty(r, 'left'),
|
||||
js.JsNative.getProperty(r, 'top'),
|
||||
js.JsNative.getProperty(r, 'width'),
|
||||
js.JsNative.getProperty(r, 'height'));
|
||||
}
|
||||
|
||||
// Converts a flat Dart map into a JavaScript object with properties this is
|
||||
// is the Dartium only version it uses dart:js.
|
||||
|
@ -158,16 +163,16 @@ Rectangle make_dart_rectangle(r) =>
|
|||
// code in html_common and be more general.
|
||||
convertDartToNative_Dictionary(Map dict) {
|
||||
if (dict == null) return null;
|
||||
var jsObject = new js.JsObject(js.JsNative.getProperty(js.context, 'Object'));
|
||||
var jsObject = js.JsNative.newObject();
|
||||
dict.forEach((String key, value) {
|
||||
if (value is List) {
|
||||
var jsArray = new js.JsArray();
|
||||
var jsArray = js.JsNative.newArray();
|
||||
value.forEach((elem) {
|
||||
jsArray.add(elem is Map ? convertDartToNative_Dictionary(elem): elem);
|
||||
});
|
||||
jsObject[key] = jsArray;
|
||||
js.JsNative.setProperty(jsObject, key, jsArray);
|
||||
} else {
|
||||
jsObject[key] = value;
|
||||
js.JsNative.setProperty(jsObject, key, value);
|
||||
}
|
||||
});
|
||||
return jsObject;
|
||||
|
@ -196,8 +201,15 @@ class _ReturnedDictionary {
|
|||
|
||||
// Helper function to wrapped a returned dictionary from blink to a Dart looking
|
||||
// class.
|
||||
convertNativeDictionaryToDartDictionary(Map values) =>
|
||||
values != null ? new _ReturnedDictionary(values) : null;
|
||||
convertNativeDictionaryToDartDictionary(values) {
|
||||
if (values is! Map) {
|
||||
// TODO(jacobr): wish wwe didn't have to do this.
|
||||
values = convertNativeToDart_SerializedScriptValue(values);
|
||||
}
|
||||
return values != null ? new _ReturnedDictionary(values) : null;
|
||||
}
|
||||
|
||||
convertNativeToDart_Dictionary(values) => convertNativeToDart_SerializedScriptValue(values);
|
||||
|
||||
// Conversion function place holder (currently not used in dart2js or dartium).
|
||||
List convertDartToNative_StringArray(List<String> input) => input;
|
||||
|
@ -205,284 +217,59 @@ List convertDartToNative_StringArray(List<String> input) => input;
|
|||
// Converts a Dart list into a JsArray. For the Dartium version only.
|
||||
convertDartToNative_List(List input) => new js.JsArray()..addAll(input);
|
||||
|
||||
/// Find the underlying JS object for a dart:html Dart object.
|
||||
unwrap_jso(dartClass_instance) => js.unwrap_jso(dartClass_instance);
|
||||
|
||||
// Flag to disable JS interop asserts. Setting to false will speed up the
|
||||
// wrap_jso calls.
|
||||
bool interop_checks = false;
|
||||
|
||||
/// Wrap a JS object with an instance of the matching dart:html class. Used only in Dartium.
|
||||
wrap_jso(jsObject) {
|
||||
// Incredibly slow implementation to lookup the runtime type for an object.
|
||||
// Fortunately, performance doesn't matter much as the results are cached
|
||||
// as long as the object being looked up has a valid prototype.
|
||||
// TODO(jacobr): we should track the # of lookups to ensure that things aren't
|
||||
// going off the rails due to objects with null prototypes, etc.
|
||||
// Note: unlike all other methods in this class, here we intentionally use
|
||||
// the old JsObject types to bootstrap the new typed bindings.
|
||||
Type lookupType(js.JsObject jsObject, bool isElement) {
|
||||
try {
|
||||
if (jsObject is! js.JsObject || jsObject == null) {
|
||||
// JS Interop converted the object to a Dart class e.g., Uint8ClampedList.
|
||||
// or it's a simple type.
|
||||
return jsObject;
|
||||
}
|
||||
|
||||
var wrapper = js.getDartHtmlWrapperFor(jsObject);
|
||||
// if we have a wrapper return the Dart instance.
|
||||
if (wrapper != null) {
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
// TODO(jacobr): add static methods that return the runtime type of the patch
|
||||
// class so that this code works as expected.
|
||||
if (jsObject is js.JsArray) {
|
||||
wrapper = new js.JSArray.create(jsObject);
|
||||
js.setDartHtmlWrapperFor(jsObject, wrapper);
|
||||
return wrapper;
|
||||
return js.JSArray.instanceRuntimeType;
|
||||
}
|
||||
if (jsObject is js.JsFunction) {
|
||||
wrapper = new js.JSFunction.create(jsObject);
|
||||
js.setDartHtmlWrapperFor(jsObject, wrapper);
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
// Try the most general type conversions on it.
|
||||
// TODO(alanknight): We may be able to do better. This maintains identity,
|
||||
// which is useful, but expensive. And if we nest something that only
|
||||
// this conversion handles, how does that work? e.g. a list of maps of elements.
|
||||
var converted = convertNativeToDart_SerializedScriptValue(jsObject);
|
||||
if (!identical(converted, jsObject)) {
|
||||
return converted;
|
||||
return js.JSFunction.instanceRuntimeType;
|
||||
}
|
||||
|
||||
var constructor = js.JsNative.getProperty(jsObject, 'constructor');
|
||||
if (constructor == null) {
|
||||
// Perfectly valid case for JavaScript objects where __proto__ has
|
||||
// intentionally been set to null.
|
||||
js.setDartHtmlWrapperFor(jsObject, new js.JSObject.create(jsObject));
|
||||
return jsObject;
|
||||
// We should track and warn about this case as peformance will be poor.
|
||||
return js.JSObject.instanceRuntimeType;
|
||||
}
|
||||
var jsTypeName = js.JsNative.getProperty(constructor, 'name');
|
||||
if (jsTypeName is! String || jsTypeName.length == 0) {
|
||||
// Not an html type.
|
||||
wrapper = new js.JSObject.create(jsObject);
|
||||
js.setDartHtmlWrapperFor(jsObject, wrapper);
|
||||
return wrapper;
|
||||
return js.JSObject.instanceRuntimeType;
|
||||
}
|
||||
|
||||
var dartClass_instance;
|
||||
var customElementClass = null;
|
||||
var extendsTag = "";
|
||||
var custom = getCustomElementEntry(jsObject);
|
||||
if (custom != null) {
|
||||
customElementClass = custom['type'];
|
||||
extendsTag = custom['extends'];
|
||||
}
|
||||
|
||||
// Only allow custom elements to be created in the html or svg default
|
||||
// namespace.
|
||||
var func;
|
||||
var defaultNS = jsObject['namespaceURI'] == 'http://www.w3.org/1999/xhtml' ||
|
||||
jsObject['namespaceURI'] == 'http://www.w3.org/2000/svg';
|
||||
if (customElementClass != null && extendsTag == "" && defaultNS) {
|
||||
// The customElementClass is known but we can't create the real class so
|
||||
// create the HtmlElement and it will get upgraded when registerElement's
|
||||
// createdCallback is called.
|
||||
func = getHtmlCreateFunction('HTMLElement');
|
||||
} else {
|
||||
func = getHtmlCreateFunction(jsTypeName);
|
||||
if (func == null) {
|
||||
Type type = getHtmlCreateType(jsTypeName);
|
||||
if (type != null) return type;
|
||||
|
||||
// Start walking the prototype chain looking for a JS class.
|
||||
var prototype = jsObject['__proto__'];
|
||||
var keepWalking = true;
|
||||
while (keepWalking && prototype.hasProperty('__proto__')) {
|
||||
prototype = prototype['__proto__'];
|
||||
if (prototype != null && prototype is Element &&
|
||||
prototype.blink_jsObject != null) {
|
||||
var prototype = js.JsNative.getProperty(jsObject, '__proto__');
|
||||
while (prototype != null) {
|
||||
// We're a Dart class that's pointing to a JS class.
|
||||
var blinkJso = prototype.blink_jsObject;
|
||||
jsTypeName = blinkJso['constructor']['name'];
|
||||
func = getHtmlCreateFunction(jsTypeName);
|
||||
keepWalking = func == null;
|
||||
var constructor = js.JsNative.getProperty(prototype, 'constructor');
|
||||
if (constructor != null) {
|
||||
jsTypeName = js.JsNative.getProperty(constructor, 'name');
|
||||
type = getHtmlCreateType(jsTypeName);
|
||||
if (type != null) return type;
|
||||
}
|
||||
prototype = js.JsNative.getProperty(prototype, '__proto__');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Can we construct a Dart class?
|
||||
if (func != null) {
|
||||
dartClass_instance = func();
|
||||
|
||||
// Wrap our Dart instance in both directions.
|
||||
dartClass_instance.blink_jsObject = jsObject;
|
||||
js.setDartHtmlWrapperFor(jsObject, dartClass_instance);
|
||||
}
|
||||
|
||||
// TODO(jacobr): cache that this is not a dart:html JS class.
|
||||
return dartClass_instance;
|
||||
} catch (e, stacktrace) {
|
||||
if (interop_checks) {
|
||||
if (e is DebugAssertException) window.console
|
||||
.log("${e.message}\n ${stacktrace}");
|
||||
else window.console.log("${stacktrace}");
|
||||
if (e is DebugAssertException) print("${e.message}\n ${stacktrace}");
|
||||
else print("${stacktrace}");
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Dart class that maps to the JS Type, add the JsObject as an expando
|
||||
* on the Dart class and return the created Dart class.
|
||||
*/
|
||||
wrap_jso_no_SerializedScriptvalue(jsObject) {
|
||||
try {
|
||||
if (jsObject is! js.JsObject || jsObject == null) {
|
||||
// JS Interop converted the object to a Dart class e.g., Uint8ClampedList.
|
||||
// or it's a simple type.
|
||||
return jsObject;
|
||||
}
|
||||
|
||||
// TODO(alanknight): With upgraded custom elements this causes a failure because
|
||||
// we need a new wrapper after the type changes. We could possibly invalidate this
|
||||
// if the constructor name didn't match?
|
||||
var wrapper = js.getDartHtmlWrapperFor(jsObject);
|
||||
if (wrapper != null) {
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
if (jsObject is js.JsArray) {
|
||||
wrapper = new js.JSArray.create(jsObject);
|
||||
js.setDartHtmlWrapperFor(jsObject, wrapper);
|
||||
return wrapper;
|
||||
}
|
||||
if (jsObject is js.JsFunction) {
|
||||
wrapper = new js.JSFunction.create(jsObject);
|
||||
js.setDartHtmlWrapperFor(jsObject, wrapper);
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
var constructor = js.JsNative.getProperty(jsObject, 'constructor');
|
||||
if (constructor == null) {
|
||||
// Perfectly valid case for JavaScript objects where __proto__ has
|
||||
// intentionally been set to null.
|
||||
js.setDartHtmlWrapperFor(jsObject, new js.JSObject.create(jsObject));
|
||||
return jsObject;
|
||||
}
|
||||
var jsTypeName = js.JsNative.getProperty(constructor, 'name');
|
||||
if (jsTypeName is! String || jsTypeName.length == 0) {
|
||||
// Not an html type.
|
||||
wrapper = new js.JSObject.create(jsObject);
|
||||
js.setDartHtmlWrapperFor(jsObject, wrapper);
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
var func = getHtmlCreateFunction(jsTypeName);
|
||||
if (func != null) {
|
||||
var dartClass_instance = func();
|
||||
dartClass_instance.blink_jsObject = jsObject;
|
||||
js.setDartHtmlWrapperFor(jsObject, dartClass_instance);
|
||||
return dartClass_instance;
|
||||
}
|
||||
wrapper = new js.JSObject.create(jsObject);
|
||||
js.setDartHtmlWrapperFor(jsObject, wrapper);
|
||||
return wrapper;
|
||||
} catch (e, stacktrace) {
|
||||
if (interop_checks) {
|
||||
if (e is DebugAssertException) window.console
|
||||
.log("${e.message}\n ${stacktrace}");
|
||||
else window.console.log("${stacktrace}");
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Dart class that maps to the JS Type that is the JS type being
|
||||
* extended using JS interop createCallback (we need the base type of the
|
||||
* custom element) not the Dart created constructor.
|
||||
*/
|
||||
wrap_jso_custom_element(jsObject) {
|
||||
try {
|
||||
if (jsObject is! js.JsObject) {
|
||||
// JS Interop converted the object to a Dart class e.g., Uint8ClampedList.
|
||||
return jsObject;
|
||||
}
|
||||
|
||||
// Find out what object we're extending.
|
||||
var objectName = jsObject.toString();
|
||||
// Expect to see something like '[object HTMLElement]'.
|
||||
if (!objectName.startsWith('[object ')) {
|
||||
return jsObject;
|
||||
}
|
||||
|
||||
var extendsClass = objectName.substring(8, objectName.length - 1);
|
||||
var func = getHtmlCreateFunction(extendsClass);
|
||||
if (interop_checks)
|
||||
debug_or_assert("func != null name = ${extendsClass}", func != null);
|
||||
var dartClass_instance = func();
|
||||
dartClass_instance.blink_jsObject = jsObject;
|
||||
return dartClass_instance;
|
||||
} catch(e, stacktrace){
|
||||
if (interop_checks) {
|
||||
if (e is DebugAssertException)
|
||||
window.console.log("${e.message}\n ${stacktrace}");
|
||||
else
|
||||
window.console.log("${stacktrace}");
|
||||
}
|
||||
|
||||
// Problem?
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
getCustomElementEntry(element) {
|
||||
var hasAttribute = false;
|
||||
|
||||
var jsObject;
|
||||
var tag = "";
|
||||
var runtimeType = element.runtimeType;
|
||||
if (runtimeType == HtmlElement) {
|
||||
tag = element.localName;
|
||||
} else if (runtimeType == TemplateElement) {
|
||||
// Data binding with a Dart class.
|
||||
tag = element.attributes['is'];
|
||||
} else if (runtimeType == js.JsObject) {
|
||||
// It's a Polymer core element (written in JS).
|
||||
// Make sure it's an element anything else we can ignore.
|
||||
if (element.hasProperty('nodeType') && element['nodeType'] == 1) {
|
||||
if (js.JsNative.callMethod(element, 'hasAttribute', ['is'])) {
|
||||
hasAttribute = true;
|
||||
// It's data binding use the is attribute.
|
||||
tag = js.JsNative.callMethod(element, 'getAttribute', ['is']);
|
||||
} else {
|
||||
// It's a custom element we want the local name.
|
||||
tag = element['localName'];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw new UnsupportedError(
|
||||
'Element is incorrect type. Got ${runtimeType}, expected HtmlElement/HtmlTemplate/JsObject.');
|
||||
}
|
||||
|
||||
var entry = _knownCustomElements[tag];
|
||||
if (entry != null) {
|
||||
// If there's an 'is' attribute then check if the extends tag registered
|
||||
// matches the tag if so then return the entry that's registered for this
|
||||
// extendsTag or if there's no 'is' tag then return the entry found.
|
||||
if ((hasAttribute && entry['extends'] == tag) || !hasAttribute) {
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// List of known tagName to DartClass for custom elements, used for upgrade.
|
||||
var _knownCustomElements = new Map<String, Map<Type, String>>();
|
||||
|
||||
void addCustomElementType(String tagName, Type dartClass, [String extendTag]) {
|
||||
_knownCustomElements[tagName] =
|
||||
{'type': dartClass, 'extends': extendTag != null ? extendTag : "" };
|
||||
}
|
||||
|
||||
Type getCustomElementType(object) {
|
||||
var entry = getCustomElementEntry(object);
|
||||
if (entry != null) {
|
||||
return entry['type'];
|
||||
}
|
||||
return null;
|
||||
return js.JSObject.instanceRuntimeType;
|
||||
}
|
||||
|
|
|
@ -110,37 +110,83 @@ class _KeyRangeFactoryProvider {
|
|||
// FIXME: Can we make this private?
|
||||
@Deprecated("Internal Use Only")
|
||||
final indexed_dbBlinkMap = {
|
||||
'IDBCursor': () => Cursor,
|
||||
'IDBCursorWithValue': () => CursorWithValue,
|
||||
'IDBDatabase': () => Database,
|
||||
'IDBFactory': () => IdbFactory,
|
||||
'IDBIndex': () => Index,
|
||||
'IDBKeyRange': () => KeyRange,
|
||||
'IDBObjectStore': () => ObjectStore,
|
||||
'IDBOpenDBRequest': () => OpenDBRequest,
|
||||
'IDBRequest': () => Request,
|
||||
'IDBTransaction': () => Transaction,
|
||||
'IDBVersionChangeEvent': () => VersionChangeEvent,
|
||||
'IDBCursor': () => Cursor.instanceRuntimeType,
|
||||
'IDBCursorWithValue': () => CursorWithValue.instanceRuntimeType,
|
||||
'IDBDatabase': () => Database.instanceRuntimeType,
|
||||
'IDBFactory': () => IdbFactory.instanceRuntimeType,
|
||||
'IDBIndex': () => Index.instanceRuntimeType,
|
||||
'IDBKeyRange': () => KeyRange.instanceRuntimeType,
|
||||
'IDBObjectStore': () => ObjectStore.instanceRuntimeType,
|
||||
'IDBOpenDBRequest': () => OpenDBRequest.instanceRuntimeType,
|
||||
'IDBRequest': () => Request.instanceRuntimeType,
|
||||
'IDBTransaction': () => Transaction.instanceRuntimeType,
|
||||
'IDBVersionChangeEvent': () => VersionChangeEvent.instanceRuntimeType,
|
||||
|
||||
};
|
||||
|
||||
// FIXME: Can we make this private?
|
||||
@Deprecated("Internal Use Only")
|
||||
final indexed_dbBlinkFunctionMap = {
|
||||
'IDBCursor': () => Cursor.internalCreateCursor,
|
||||
'IDBCursorWithValue': () => CursorWithValue.internalCreateCursorWithValue,
|
||||
'IDBDatabase': () => Database.internalCreateDatabase,
|
||||
'IDBFactory': () => IdbFactory.internalCreateIdbFactory,
|
||||
'IDBIndex': () => Index.internalCreateIndex,
|
||||
'IDBKeyRange': () => KeyRange.internalCreateKeyRange,
|
||||
'IDBObjectStore': () => ObjectStore.internalCreateObjectStore,
|
||||
'IDBOpenDBRequest': () => OpenDBRequest.internalCreateOpenDBRequest,
|
||||
'IDBRequest': () => Request.internalCreateRequest,
|
||||
'IDBTransaction': () => Transaction.internalCreateTransaction,
|
||||
'IDBVersionChangeEvent': () => VersionChangeEvent.internalCreateVersionChangeEvent,
|
||||
|
||||
};
|
||||
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
||||
//
|
||||
// Per http://www.w3.org/TR/IndexedDB/#key-construct
|
||||
//
|
||||
// "A value is said to be a valid key if it is one of the following types: Array
|
||||
// JavaScript objects [ECMA-262], DOMString [WEBIDL], Date [ECMA-262] or float
|
||||
// [WEBIDL]. However Arrays are only valid keys if every item in the array is
|
||||
// defined and is a valid key (i.e. sparse arrays can not be valid keys) and if
|
||||
// the Array doesn't directly or indirectly contain itself. Any non-numeric
|
||||
// properties are ignored, and thus does not affect whether the Array is a valid
|
||||
// key. Additionally, if the value is of type float, it is only a valid key if
|
||||
// it is not NaN, and if the value is of type Date it is only a valid key if its
|
||||
// [[PrimitiveValue]] internal property, as defined by [ECMA-262], is not NaN."
|
||||
|
||||
// What is required is to ensure that an Lists in the key are actually
|
||||
// JavaScript arrays, and any Dates are JavaScript Dates.
|
||||
|
||||
|
||||
/**
|
||||
* 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 (object is DateTime) 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 (nativeKey is DateTime) {
|
||||
throw new UnimplementedError('Key containing DateTime');
|
||||
}
|
||||
// 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);
|
||||
}// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -169,62 +215,54 @@ class Cursor extends DartHtmlDomObject {
|
|||
// To suppress missing implicit constructor warnings.
|
||||
factory Cursor._() { throw new UnsupportedError("Not supported"); }
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static Cursor internalCreateCursor() {
|
||||
return new Cursor._internalWrap();
|
||||
}
|
||||
|
||||
factory Cursor._internalWrap() {
|
||||
return new Cursor.internal_();
|
||||
}
|
||||
@Deprecated("Internal Use Only")
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
Cursor.internal_() { }
|
||||
|
||||
bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
|
||||
int get hashCode => unwrap_jso(this).hashCode;
|
||||
|
||||
@DomName('IDBCursor.direction')
|
||||
@DocsEditable()
|
||||
String get direction => _blink.BlinkIDBCursor.instance.direction_Getter_(unwrap_jso(this));
|
||||
String get direction => _blink.BlinkIDBCursor.instance.direction_Getter_(this);
|
||||
|
||||
@DomName('IDBCursor.key')
|
||||
@DocsEditable()
|
||||
Object get key => wrap_jso(_blink.BlinkIDBCursor.instance.key_Getter_(unwrap_jso(this)));
|
||||
Object get key => (_blink.BlinkIDBCursor.instance.key_Getter_(this));
|
||||
|
||||
@DomName('IDBCursor.primaryKey')
|
||||
@DocsEditable()
|
||||
Object get primaryKey => wrap_jso(_blink.BlinkIDBCursor.instance.primaryKey_Getter_(unwrap_jso(this)));
|
||||
Object get primaryKey => (_blink.BlinkIDBCursor.instance.primaryKey_Getter_(this));
|
||||
|
||||
@DomName('IDBCursor.source')
|
||||
@DocsEditable()
|
||||
Object get source => wrap_jso(_blink.BlinkIDBCursor.instance.source_Getter_(unwrap_jso(this)));
|
||||
Object get source => (_blink.BlinkIDBCursor.instance.source_Getter_(this));
|
||||
|
||||
@DomName('IDBCursor.advance')
|
||||
@DocsEditable()
|
||||
void advance(int count) => _blink.BlinkIDBCursor.instance.advance_Callback_1_(unwrap_jso(this), count);
|
||||
void advance(int count) => _blink.BlinkIDBCursor.instance.advance_Callback_1_(this, count);
|
||||
|
||||
@DomName('IDBCursor.continuePrimaryKey')
|
||||
@DocsEditable()
|
||||
@Experimental() // untriaged
|
||||
void continuePrimaryKey(Object key, Object primaryKey) => _blink.BlinkIDBCursor.instance.continuePrimaryKey_Callback_2_(unwrap_jso(this), key, primaryKey);
|
||||
void continuePrimaryKey(Object key, Object primaryKey) => _blink.BlinkIDBCursor.instance.continuePrimaryKey_Callback_2_(this, key, primaryKey);
|
||||
|
||||
@DomName('IDBCursor.delete')
|
||||
@DocsEditable()
|
||||
Request _delete() => wrap_jso(_blink.BlinkIDBCursor.instance.delete_Callback_0_(unwrap_jso(this)));
|
||||
Request _delete() => _blink.BlinkIDBCursor.instance.delete_Callback_0_(this);
|
||||
|
||||
void next([Object key]) {
|
||||
if (key != null) {
|
||||
_blink.BlinkIDBCursor.instance.continue_Callback_1_(unwrap_jso(this), key);
|
||||
_blink.BlinkIDBCursor.instance.continue_Callback_1_(this, key);
|
||||
return;
|
||||
}
|
||||
_blink.BlinkIDBCursor.instance.continue_Callback_0_(unwrap_jso(this));
|
||||
_blink.BlinkIDBCursor.instance.continue_Callback_0_(this);
|
||||
return;
|
||||
}
|
||||
|
||||
@DomName('IDBCursor.update')
|
||||
@DocsEditable()
|
||||
Request _update(Object value) => wrap_jso(_blink.BlinkIDBCursor.instance.update_Callback_1_(unwrap_jso(this), convertDartToNative_SerializedScriptValue(value)));
|
||||
Request _update(Object value) => _blink.BlinkIDBCursor.instance.update_Callback_1_(this, convertDartToNative_SerializedScriptValue(value));
|
||||
|
||||
}
|
||||
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
||||
|
@ -243,11 +281,7 @@ class CursorWithValue extends Cursor {
|
|||
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static CursorWithValue internalCreateCursorWithValue() {
|
||||
return new CursorWithValue._internalWrap();
|
||||
}
|
||||
|
||||
external factory CursorWithValue._internalWrap();
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
CursorWithValue.internal_() : super.internal_();
|
||||
|
@ -255,7 +289,7 @@ class CursorWithValue extends Cursor {
|
|||
|
||||
@DomName('IDBCursorWithValue.value')
|
||||
@DocsEditable()
|
||||
Object get value => wrap_jso(_blink.BlinkIDBCursorWithValue.instance.value_Getter_(unwrap_jso(this)));
|
||||
Object get value => _convertNativeToDart_IDBAny(_blink.BlinkIDBCursorWithValue.instance.value_Getter_(this));
|
||||
|
||||
}
|
||||
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
||||
|
@ -298,14 +332,14 @@ class Database extends EventTarget {
|
|||
if (storeName_OR_storeNames == null) {
|
||||
throw new ArgumentError("stores may not be null in transaction");
|
||||
} else if (storeName_OR_storeNames is String || storeName_OR_storeNames is DomStringList) {
|
||||
names = unwrap_jso(storeName_OR_storeNames);
|
||||
names = storeName_OR_storeNames;
|
||||
} else if (storeName_OR_storeNames is List<String>) {
|
||||
names = convertDartToNative_List(storeName_OR_storeNames);
|
||||
} else {
|
||||
throw new ArgumentError("Invalid store(s) $store_Name_OR_storeNames");
|
||||
}
|
||||
|
||||
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), names, mode));
|
||||
return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(this, names, mode);
|
||||
}
|
||||
|
||||
Transaction transactionList(List<String> storeNames, String mode) => transaction(storeNames, mode);
|
||||
|
@ -359,11 +393,7 @@ class Database extends EventTarget {
|
|||
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static Database internalCreateDatabase() {
|
||||
return new Database._internalWrap();
|
||||
}
|
||||
|
||||
external factory Database._internalWrap();
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
Database.internal_() : super.internal_();
|
||||
|
@ -371,30 +401,30 @@ class Database extends EventTarget {
|
|||
|
||||
@DomName('IDBDatabase.name')
|
||||
@DocsEditable()
|
||||
String get name => _blink.BlinkIDBDatabase.instance.name_Getter_(unwrap_jso(this));
|
||||
String get name => _blink.BlinkIDBDatabase.instance.name_Getter_(this);
|
||||
|
||||
@DomName('IDBDatabase.objectStoreNames')
|
||||
@DocsEditable()
|
||||
List<String> get objectStoreNames => wrap_jso(_blink.BlinkIDBDatabase.instance.objectStoreNames_Getter_(unwrap_jso(this)));
|
||||
List<String> get objectStoreNames => _blink.BlinkIDBDatabase.instance.objectStoreNames_Getter_(this);
|
||||
|
||||
@DomName('IDBDatabase.version')
|
||||
@DocsEditable()
|
||||
Object get version => wrap_jso(_blink.BlinkIDBDatabase.instance.version_Getter_(unwrap_jso(this)));
|
||||
Object get version => (_blink.BlinkIDBDatabase.instance.version_Getter_(this));
|
||||
|
||||
@DomName('IDBDatabase.close')
|
||||
@DocsEditable()
|
||||
void close() => _blink.BlinkIDBDatabase.instance.close_Callback_0_(unwrap_jso(this));
|
||||
void close() => _blink.BlinkIDBDatabase.instance.close_Callback_0_(this);
|
||||
|
||||
ObjectStore _createObjectStore(String name, [Map options]) {
|
||||
if (options != null) {
|
||||
return wrap_jso(_blink.BlinkIDBDatabase.instance.createObjectStore_Callback_2_(unwrap_jso(this), name, convertDartToNative_Dictionary(options)));
|
||||
return _blink.BlinkIDBDatabase.instance.createObjectStore_Callback_2_(this, name, convertDartToNative_Dictionary(options));
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBDatabase.instance.createObjectStore_Callback_1_(unwrap_jso(this), name));
|
||||
return _blink.BlinkIDBDatabase.instance.createObjectStore_Callback_1_(this, name);
|
||||
}
|
||||
|
||||
@DomName('IDBDatabase.deleteObjectStore')
|
||||
@DocsEditable()
|
||||
void deleteObjectStore(String name) => _blink.BlinkIDBDatabase.instance.deleteObjectStore_Callback_1_(unwrap_jso(this), name);
|
||||
void deleteObjectStore(String name) => _blink.BlinkIDBDatabase.instance.deleteObjectStore_Callback_1_(this, name);
|
||||
|
||||
/// Stream of `abort` events handled by this [Database].
|
||||
@DomName('IDBDatabase.onabort')
|
||||
|
@ -508,34 +538,26 @@ class IdbFactory extends DartHtmlDomObject {
|
|||
// To suppress missing implicit constructor warnings.
|
||||
factory IdbFactory._() { throw new UnsupportedError("Not supported"); }
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static IdbFactory internalCreateIdbFactory() {
|
||||
return new IdbFactory._internalWrap();
|
||||
}
|
||||
|
||||
factory IdbFactory._internalWrap() {
|
||||
return new IdbFactory.internal_();
|
||||
}
|
||||
@Deprecated("Internal Use Only")
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
IdbFactory.internal_() { }
|
||||
|
||||
bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
|
||||
int get hashCode => unwrap_jso(this).hashCode;
|
||||
|
||||
@DomName('IDBFactory.cmp')
|
||||
@DocsEditable()
|
||||
int cmp(Object first, Object second) => _blink.BlinkIDBFactory.instance.cmp_Callback_2_(unwrap_jso(this), first, second);
|
||||
int cmp(Object first, Object second) => _blink.BlinkIDBFactory.instance.cmp_Callback_2_(this, first, second);
|
||||
|
||||
@DomName('IDBFactory.deleteDatabase')
|
||||
@DocsEditable()
|
||||
OpenDBRequest _deleteDatabase(String name) => wrap_jso(_blink.BlinkIDBFactory.instance.deleteDatabase_Callback_1_(unwrap_jso(this), name));
|
||||
OpenDBRequest _deleteDatabase(String name) => _blink.BlinkIDBFactory.instance.deleteDatabase_Callback_1_(this, name);
|
||||
|
||||
OpenDBRequest _open(String name, [int version]) {
|
||||
if (version != null) {
|
||||
return wrap_jso(_blink.BlinkIDBFactory.instance.open_Callback_2_(unwrap_jso(this), name, version));
|
||||
return _blink.BlinkIDBFactory.instance.open_Callback_2_(this, name, version);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBFactory.instance.open_Callback_1_(unwrap_jso(this), name));
|
||||
return _blink.BlinkIDBFactory.instance.open_Callback_1_(this, name);
|
||||
}
|
||||
|
||||
@DomName('IDBFactory.webkitGetDatabaseNames')
|
||||
|
@ -543,7 +565,7 @@ class IdbFactory extends DartHtmlDomObject {
|
|||
@SupportedBrowser(SupportedBrowser.CHROME)
|
||||
@SupportedBrowser(SupportedBrowser.SAFARI)
|
||||
@Experimental()
|
||||
Request _webkitGetDatabaseNames() => wrap_jso(_blink.BlinkIDBFactory.instance.webkitGetDatabaseNames_Callback_0_(unwrap_jso(this)));
|
||||
Request _webkitGetDatabaseNames() => _blink.BlinkIDBFactory.instance.webkitGetDatabaseNames_Callback_0_(this);
|
||||
|
||||
}
|
||||
|
||||
|
@ -661,79 +683,71 @@ class Index extends DartHtmlDomObject {
|
|||
// To suppress missing implicit constructor warnings.
|
||||
factory Index._() { throw new UnsupportedError("Not supported"); }
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static Index internalCreateIndex() {
|
||||
return new Index._internalWrap();
|
||||
}
|
||||
|
||||
factory Index._internalWrap() {
|
||||
return new Index.internal_();
|
||||
}
|
||||
@Deprecated("Internal Use Only")
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
Index.internal_() { }
|
||||
|
||||
bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
|
||||
int get hashCode => unwrap_jso(this).hashCode;
|
||||
|
||||
@DomName('IDBIndex.keyPath')
|
||||
@DocsEditable()
|
||||
Object get keyPath => wrap_jso(_blink.BlinkIDBIndex.instance.keyPath_Getter_(unwrap_jso(this)));
|
||||
Object get keyPath => (_blink.BlinkIDBIndex.instance.keyPath_Getter_(this));
|
||||
|
||||
@DomName('IDBIndex.multiEntry')
|
||||
@DocsEditable()
|
||||
bool get multiEntry => _blink.BlinkIDBIndex.instance.multiEntry_Getter_(unwrap_jso(this));
|
||||
bool get multiEntry => _blink.BlinkIDBIndex.instance.multiEntry_Getter_(this);
|
||||
|
||||
@DomName('IDBIndex.name')
|
||||
@DocsEditable()
|
||||
String get name => _blink.BlinkIDBIndex.instance.name_Getter_(unwrap_jso(this));
|
||||
String get name => _blink.BlinkIDBIndex.instance.name_Getter_(this);
|
||||
|
||||
@DomName('IDBIndex.objectStore')
|
||||
@DocsEditable()
|
||||
ObjectStore get objectStore => wrap_jso(_blink.BlinkIDBIndex.instance.objectStore_Getter_(unwrap_jso(this)));
|
||||
ObjectStore get objectStore => _blink.BlinkIDBIndex.instance.objectStore_Getter_(this);
|
||||
|
||||
@DomName('IDBIndex.unique')
|
||||
@DocsEditable()
|
||||
bool get unique => _blink.BlinkIDBIndex.instance.unique_Getter_(unwrap_jso(this));
|
||||
bool get unique => _blink.BlinkIDBIndex.instance.unique_Getter_(this);
|
||||
|
||||
@DomName('IDBIndex.count')
|
||||
@DocsEditable()
|
||||
Request _count(Object key) => wrap_jso(_blink.BlinkIDBIndex.instance.count_Callback_1_(unwrap_jso(this), key));
|
||||
Request _count(Object key) => _blink.BlinkIDBIndex.instance.count_Callback_1_(this, key);
|
||||
|
||||
@DomName('IDBIndex.get')
|
||||
@DocsEditable()
|
||||
Request _get(Object key) => wrap_jso(_blink.BlinkIDBIndex.instance.get_Callback_1_(unwrap_jso(this), key));
|
||||
Request _get(Object key) => _blink.BlinkIDBIndex.instance.get_Callback_1_(this, key);
|
||||
|
||||
Request getAll(Object range, [int maxCount]) {
|
||||
if (maxCount != null) {
|
||||
return wrap_jso(_blink.BlinkIDBIndex.instance.getAll_Callback_2_(unwrap_jso(this), range, maxCount));
|
||||
return _blink.BlinkIDBIndex.instance.getAll_Callback_2_(this, range, maxCount);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBIndex.instance.getAll_Callback_1_(unwrap_jso(this), range));
|
||||
return _blink.BlinkIDBIndex.instance.getAll_Callback_1_(this, range);
|
||||
}
|
||||
|
||||
Request getAllKeys(Object range, [int maxCount]) {
|
||||
if (maxCount != null) {
|
||||
return wrap_jso(_blink.BlinkIDBIndex.instance.getAllKeys_Callback_2_(unwrap_jso(this), range, maxCount));
|
||||
return _blink.BlinkIDBIndex.instance.getAllKeys_Callback_2_(this, range, maxCount);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBIndex.instance.getAllKeys_Callback_1_(unwrap_jso(this), range));
|
||||
return _blink.BlinkIDBIndex.instance.getAllKeys_Callback_1_(this, range);
|
||||
}
|
||||
|
||||
@DomName('IDBIndex.getKey')
|
||||
@DocsEditable()
|
||||
Request _getKey(Object key) => wrap_jso(_blink.BlinkIDBIndex.instance.getKey_Callback_1_(unwrap_jso(this), key));
|
||||
Request _getKey(Object key) => _blink.BlinkIDBIndex.instance.getKey_Callback_1_(this, key);
|
||||
|
||||
Request _openCursor(Object range, [String direction]) {
|
||||
if (direction != null) {
|
||||
return wrap_jso(_blink.BlinkIDBIndex.instance.openCursor_Callback_2_(unwrap_jso(this), range, direction));
|
||||
return _blink.BlinkIDBIndex.instance.openCursor_Callback_2_(this, range, direction);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBIndex.instance.openCursor_Callback_1_(unwrap_jso(this), range));
|
||||
return _blink.BlinkIDBIndex.instance.openCursor_Callback_1_(this, range);
|
||||
}
|
||||
|
||||
Request _openKeyCursor(Object range, [String direction]) {
|
||||
if (direction != null) {
|
||||
return wrap_jso(_blink.BlinkIDBIndex.instance.openKeyCursor_Callback_2_(unwrap_jso(this), range, direction));
|
||||
return _blink.BlinkIDBIndex.instance.openKeyCursor_Callback_2_(this, range, direction);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBIndex.instance.openKeyCursor_Callback_1_(unwrap_jso(this), range));
|
||||
return _blink.BlinkIDBIndex.instance.openKeyCursor_Callback_1_(this, range);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -766,64 +780,56 @@ class KeyRange extends DartHtmlDomObject {
|
|||
// To suppress missing implicit constructor warnings.
|
||||
factory KeyRange._() { throw new UnsupportedError("Not supported"); }
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static KeyRange internalCreateKeyRange() {
|
||||
return new KeyRange._internalWrap();
|
||||
}
|
||||
|
||||
factory KeyRange._internalWrap() {
|
||||
return new KeyRange.internal_();
|
||||
}
|
||||
@Deprecated("Internal Use Only")
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
KeyRange.internal_() { }
|
||||
|
||||
bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
|
||||
int get hashCode => unwrap_jso(this).hashCode;
|
||||
|
||||
@DomName('IDBKeyRange.lower')
|
||||
@DocsEditable()
|
||||
Object get lower => wrap_jso(_blink.BlinkIDBKeyRange.instance.lower_Getter_(unwrap_jso(this)));
|
||||
Object get lower => (_blink.BlinkIDBKeyRange.instance.lower_Getter_(this));
|
||||
|
||||
@DomName('IDBKeyRange.lowerOpen')
|
||||
@DocsEditable()
|
||||
bool get lowerOpen => _blink.BlinkIDBKeyRange.instance.lowerOpen_Getter_(unwrap_jso(this));
|
||||
bool get lowerOpen => _blink.BlinkIDBKeyRange.instance.lowerOpen_Getter_(this);
|
||||
|
||||
@DomName('IDBKeyRange.upper')
|
||||
@DocsEditable()
|
||||
Object get upper => wrap_jso(_blink.BlinkIDBKeyRange.instance.upper_Getter_(unwrap_jso(this)));
|
||||
Object get upper => (_blink.BlinkIDBKeyRange.instance.upper_Getter_(this));
|
||||
|
||||
@DomName('IDBKeyRange.upperOpen')
|
||||
@DocsEditable()
|
||||
bool get upperOpen => _blink.BlinkIDBKeyRange.instance.upperOpen_Getter_(unwrap_jso(this));
|
||||
bool get upperOpen => _blink.BlinkIDBKeyRange.instance.upperOpen_Getter_(this);
|
||||
|
||||
static KeyRange bound_(Object lower, Object upper, [bool lowerOpen, bool upperOpen]) {
|
||||
if (upperOpen != null) {
|
||||
return wrap_jso(_blink.BlinkIDBKeyRange.instance.bound_Callback_4_(lower, upper, lowerOpen, upperOpen));
|
||||
return _blink.BlinkIDBKeyRange.instance.bound_Callback_4_(lower, upper, lowerOpen, upperOpen);
|
||||
}
|
||||
if (lowerOpen != null) {
|
||||
return wrap_jso(_blink.BlinkIDBKeyRange.instance.bound_Callback_3_(lower, upper, lowerOpen));
|
||||
return _blink.BlinkIDBKeyRange.instance.bound_Callback_3_(lower, upper, lowerOpen);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBKeyRange.instance.bound_Callback_2_(lower, upper));
|
||||
return _blink.BlinkIDBKeyRange.instance.bound_Callback_2_(lower, upper);
|
||||
}
|
||||
|
||||
static KeyRange lowerBound_(Object bound, [bool open]) {
|
||||
if (open != null) {
|
||||
return wrap_jso(_blink.BlinkIDBKeyRange.instance.lowerBound_Callback_2_(bound, open));
|
||||
return _blink.BlinkIDBKeyRange.instance.lowerBound_Callback_2_(bound, open);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBKeyRange.instance.lowerBound_Callback_1_(bound));
|
||||
return _blink.BlinkIDBKeyRange.instance.lowerBound_Callback_1_(bound);
|
||||
}
|
||||
|
||||
@DomName('IDBKeyRange.only_')
|
||||
@DocsEditable()
|
||||
@Experimental() // non-standard
|
||||
static KeyRange only_(Object value) => wrap_jso(_blink.BlinkIDBKeyRange.instance.only_Callback_1_(value));
|
||||
static KeyRange only_(Object value) => _blink.BlinkIDBKeyRange.instance.only_Callback_1_(value);
|
||||
|
||||
static KeyRange upperBound_(Object bound, [bool open]) {
|
||||
if (open != null) {
|
||||
return wrap_jso(_blink.BlinkIDBKeyRange.instance.upperBound_Callback_2_(bound, open));
|
||||
return _blink.BlinkIDBKeyRange.instance.upperBound_Callback_2_(bound, open);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBKeyRange.instance.upperBound_Callback_1_(bound));
|
||||
return _blink.BlinkIDBKeyRange.instance.upperBound_Callback_1_(bound);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -965,112 +971,104 @@ class ObjectStore extends DartHtmlDomObject {
|
|||
// To suppress missing implicit constructor warnings.
|
||||
factory ObjectStore._() { throw new UnsupportedError("Not supported"); }
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static ObjectStore internalCreateObjectStore() {
|
||||
return new ObjectStore._internalWrap();
|
||||
}
|
||||
|
||||
factory ObjectStore._internalWrap() {
|
||||
return new ObjectStore.internal_();
|
||||
}
|
||||
@Deprecated("Internal Use Only")
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
ObjectStore.internal_() { }
|
||||
|
||||
bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
|
||||
int get hashCode => unwrap_jso(this).hashCode;
|
||||
|
||||
@DomName('IDBObjectStore.autoIncrement')
|
||||
@DocsEditable()
|
||||
bool get autoIncrement => _blink.BlinkIDBObjectStore.instance.autoIncrement_Getter_(unwrap_jso(this));
|
||||
bool get autoIncrement => _blink.BlinkIDBObjectStore.instance.autoIncrement_Getter_(this);
|
||||
|
||||
@DomName('IDBObjectStore.indexNames')
|
||||
@DocsEditable()
|
||||
List<String> get indexNames => wrap_jso(_blink.BlinkIDBObjectStore.instance.indexNames_Getter_(unwrap_jso(this)));
|
||||
List<String> get indexNames => _blink.BlinkIDBObjectStore.instance.indexNames_Getter_(this);
|
||||
|
||||
@DomName('IDBObjectStore.keyPath')
|
||||
@DocsEditable()
|
||||
Object get keyPath => wrap_jso(_blink.BlinkIDBObjectStore.instance.keyPath_Getter_(unwrap_jso(this)));
|
||||
Object get keyPath => (_blink.BlinkIDBObjectStore.instance.keyPath_Getter_(this));
|
||||
|
||||
@DomName('IDBObjectStore.name')
|
||||
@DocsEditable()
|
||||
String get name => _blink.BlinkIDBObjectStore.instance.name_Getter_(unwrap_jso(this));
|
||||
String get name => _blink.BlinkIDBObjectStore.instance.name_Getter_(this);
|
||||
|
||||
@DomName('IDBObjectStore.transaction')
|
||||
@DocsEditable()
|
||||
Transaction get transaction => wrap_jso(_blink.BlinkIDBObjectStore.instance.transaction_Getter_(unwrap_jso(this)));
|
||||
Transaction get transaction => _blink.BlinkIDBObjectStore.instance.transaction_Getter_(this);
|
||||
|
||||
Request _add(Object value, [Object key]) {
|
||||
if (key != null) {
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.add_Callback_2_(unwrap_jso(this), convertDartToNative_SerializedScriptValue(value), convertDartToNative_SerializedScriptValue(key)));
|
||||
return _blink.BlinkIDBObjectStore.instance.add_Callback_2_(this, convertDartToNative_SerializedScriptValue(value), convertDartToNative_SerializedScriptValue(key));
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.add_Callback_1_(unwrap_jso(this), convertDartToNative_SerializedScriptValue(value)));
|
||||
return _blink.BlinkIDBObjectStore.instance.add_Callback_1_(this, convertDartToNative_SerializedScriptValue(value));
|
||||
}
|
||||
|
||||
@DomName('IDBObjectStore.clear')
|
||||
@DocsEditable()
|
||||
Request _clear() => wrap_jso(_blink.BlinkIDBObjectStore.instance.clear_Callback_0_(unwrap_jso(this)));
|
||||
Request _clear() => _blink.BlinkIDBObjectStore.instance.clear_Callback_0_(this);
|
||||
|
||||
@DomName('IDBObjectStore.count')
|
||||
@DocsEditable()
|
||||
Request _count(Object key) => wrap_jso(_blink.BlinkIDBObjectStore.instance.count_Callback_1_(unwrap_jso(this), key));
|
||||
Request _count(Object key) => _blink.BlinkIDBObjectStore.instance.count_Callback_1_(this, key);
|
||||
|
||||
Index _createIndex(String name, Object keyPath, [Map options]) {
|
||||
if (options != null) {
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.createIndex_Callback_3_(unwrap_jso(this), name, keyPath, convertDartToNative_Dictionary(options)));
|
||||
return _blink.BlinkIDBObjectStore.instance.createIndex_Callback_3_(this, name, keyPath, convertDartToNative_Dictionary(options));
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.createIndex_Callback_2_(unwrap_jso(this), name, keyPath));
|
||||
return _blink.BlinkIDBObjectStore.instance.createIndex_Callback_2_(this, name, keyPath);
|
||||
}
|
||||
|
||||
@DomName('IDBObjectStore.delete')
|
||||
@DocsEditable()
|
||||
Request _delete(Object key) => wrap_jso(_blink.BlinkIDBObjectStore.instance.delete_Callback_1_(unwrap_jso(this), key));
|
||||
Request _delete(Object key) => _blink.BlinkIDBObjectStore.instance.delete_Callback_1_(this, key);
|
||||
|
||||
@DomName('IDBObjectStore.deleteIndex')
|
||||
@DocsEditable()
|
||||
void deleteIndex(String name) => _blink.BlinkIDBObjectStore.instance.deleteIndex_Callback_1_(unwrap_jso(this), name);
|
||||
void deleteIndex(String name) => _blink.BlinkIDBObjectStore.instance.deleteIndex_Callback_1_(this, name);
|
||||
|
||||
@DomName('IDBObjectStore.get')
|
||||
@DocsEditable()
|
||||
Request _get(Object key) => wrap_jso(_blink.BlinkIDBObjectStore.instance.get_Callback_1_(unwrap_jso(this), key));
|
||||
Request _get(Object key) => _blink.BlinkIDBObjectStore.instance.get_Callback_1_(this, key);
|
||||
|
||||
Request getAll(Object range, [int maxCount]) {
|
||||
if (maxCount != null) {
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.getAll_Callback_2_(unwrap_jso(this), range, maxCount));
|
||||
return _blink.BlinkIDBObjectStore.instance.getAll_Callback_2_(this, range, maxCount);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.getAll_Callback_1_(unwrap_jso(this), range));
|
||||
return _blink.BlinkIDBObjectStore.instance.getAll_Callback_1_(this, range);
|
||||
}
|
||||
|
||||
Request getAllKeys(Object range, [int maxCount]) {
|
||||
if (maxCount != null) {
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.getAllKeys_Callback_2_(unwrap_jso(this), range, maxCount));
|
||||
return _blink.BlinkIDBObjectStore.instance.getAllKeys_Callback_2_(this, range, maxCount);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.getAllKeys_Callback_1_(unwrap_jso(this), range));
|
||||
return _blink.BlinkIDBObjectStore.instance.getAllKeys_Callback_1_(this, range);
|
||||
}
|
||||
|
||||
@DomName('IDBObjectStore.index')
|
||||
@DocsEditable()
|
||||
Index index(String name) => wrap_jso(_blink.BlinkIDBObjectStore.instance.index_Callback_1_(unwrap_jso(this), name));
|
||||
Index index(String name) => _blink.BlinkIDBObjectStore.instance.index_Callback_1_(this, name);
|
||||
|
||||
Request _openCursor(Object range, [String direction]) {
|
||||
if (direction != null) {
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.openCursor_Callback_2_(unwrap_jso(this), range, direction));
|
||||
return _blink.BlinkIDBObjectStore.instance.openCursor_Callback_2_(this, range, direction);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.openCursor_Callback_1_(unwrap_jso(this), range));
|
||||
return _blink.BlinkIDBObjectStore.instance.openCursor_Callback_1_(this, range);
|
||||
}
|
||||
|
||||
Request openKeyCursor(Object range, [String direction]) {
|
||||
if (direction != null) {
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.openKeyCursor_Callback_2_(unwrap_jso(this), range, direction));
|
||||
return _blink.BlinkIDBObjectStore.instance.openKeyCursor_Callback_2_(this, range, direction);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.openKeyCursor_Callback_1_(unwrap_jso(this), range));
|
||||
return _blink.BlinkIDBObjectStore.instance.openKeyCursor_Callback_1_(this, range);
|
||||
}
|
||||
|
||||
Request _put(Object value, [Object key]) {
|
||||
if (key != null) {
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.put_Callback_2_(unwrap_jso(this), convertDartToNative_SerializedScriptValue(value), convertDartToNative_SerializedScriptValue(key)));
|
||||
return _blink.BlinkIDBObjectStore.instance.put_Callback_2_(this, convertDartToNative_SerializedScriptValue(value), convertDartToNative_SerializedScriptValue(key));
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBObjectStore.instance.put_Callback_1_(unwrap_jso(this), convertDartToNative_SerializedScriptValue(value)));
|
||||
return _blink.BlinkIDBObjectStore.instance.put_Callback_1_(this, convertDartToNative_SerializedScriptValue(value));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1137,11 +1135,7 @@ class OpenDBRequest extends Request {
|
|||
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static OpenDBRequest internalCreateOpenDBRequest() {
|
||||
return new OpenDBRequest._internalWrap();
|
||||
}
|
||||
|
||||
external factory OpenDBRequest._internalWrap();
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
OpenDBRequest.internal_() : super.internal_();
|
||||
|
@ -1194,11 +1188,7 @@ class Request extends EventTarget {
|
|||
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static Request internalCreateRequest() {
|
||||
return new Request._internalWrap();
|
||||
}
|
||||
|
||||
external factory Request._internalWrap();
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
Request.internal_() : super.internal_();
|
||||
|
@ -1206,23 +1196,23 @@ class Request extends EventTarget {
|
|||
|
||||
@DomName('IDBRequest.error')
|
||||
@DocsEditable()
|
||||
DomError get error => wrap_jso(_blink.BlinkIDBRequest.instance.error_Getter_(unwrap_jso(this)));
|
||||
DomError get error => _blink.BlinkIDBRequest.instance.error_Getter_(this);
|
||||
|
||||
@DomName('IDBRequest.readyState')
|
||||
@DocsEditable()
|
||||
String get readyState => _blink.BlinkIDBRequest.instance.readyState_Getter_(unwrap_jso(this));
|
||||
String get readyState => _blink.BlinkIDBRequest.instance.readyState_Getter_(this);
|
||||
|
||||
@DomName('IDBRequest.result')
|
||||
@DocsEditable()
|
||||
Object get result => wrap_jso(_blink.BlinkIDBRequest.instance.result_Getter_(unwrap_jso(this)));
|
||||
Object get result => _convertNativeToDart_IDBAny(_blink.BlinkIDBRequest.instance.result_Getter_(this));
|
||||
|
||||
@DomName('IDBRequest.source')
|
||||
@DocsEditable()
|
||||
Object get source => wrap_jso(_blink.BlinkIDBRequest.instance.source_Getter_(unwrap_jso(this)));
|
||||
Object get source => (_blink.BlinkIDBRequest.instance.source_Getter_(this));
|
||||
|
||||
@DomName('IDBRequest.transaction')
|
||||
@DocsEditable()
|
||||
Transaction get transaction => wrap_jso(_blink.BlinkIDBRequest.instance.transaction_Getter_(unwrap_jso(this)));
|
||||
Transaction get transaction => _blink.BlinkIDBRequest.instance.transaction_Getter_(this);
|
||||
|
||||
/// Stream of `error` events handled by this [Request].
|
||||
@DomName('IDBRequest.onerror')
|
||||
|
@ -1307,11 +1297,7 @@ class Transaction extends EventTarget {
|
|||
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static Transaction internalCreateTransaction() {
|
||||
return new Transaction._internalWrap();
|
||||
}
|
||||
|
||||
external factory Transaction._internalWrap();
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
Transaction.internal_() : super.internal_();
|
||||
|
@ -1319,28 +1305,28 @@ class Transaction extends EventTarget {
|
|||
|
||||
@DomName('IDBTransaction.db')
|
||||
@DocsEditable()
|
||||
Database get db => wrap_jso(_blink.BlinkIDBTransaction.instance.db_Getter_(unwrap_jso(this)));
|
||||
Database get db => _blink.BlinkIDBTransaction.instance.db_Getter_(this);
|
||||
|
||||
@DomName('IDBTransaction.error')
|
||||
@DocsEditable()
|
||||
DomError get error => wrap_jso(_blink.BlinkIDBTransaction.instance.error_Getter_(unwrap_jso(this)));
|
||||
DomError get error => _blink.BlinkIDBTransaction.instance.error_Getter_(this);
|
||||
|
||||
@DomName('IDBTransaction.mode')
|
||||
@DocsEditable()
|
||||
String get mode => _blink.BlinkIDBTransaction.instance.mode_Getter_(unwrap_jso(this));
|
||||
String get mode => _blink.BlinkIDBTransaction.instance.mode_Getter_(this);
|
||||
|
||||
@DomName('IDBTransaction.objectStoreNames')
|
||||
@DocsEditable()
|
||||
@Experimental() // untriaged
|
||||
List<String> get objectStoreNames => wrap_jso(_blink.BlinkIDBTransaction.instance.objectStoreNames_Getter_(unwrap_jso(this)));
|
||||
List<String> get objectStoreNames => _blink.BlinkIDBTransaction.instance.objectStoreNames_Getter_(this);
|
||||
|
||||
@DomName('IDBTransaction.abort')
|
||||
@DocsEditable()
|
||||
void abort() => _blink.BlinkIDBTransaction.instance.abort_Callback_0_(unwrap_jso(this));
|
||||
void abort() => _blink.BlinkIDBTransaction.instance.abort_Callback_0_(this);
|
||||
|
||||
@DomName('IDBTransaction.objectStore')
|
||||
@DocsEditable()
|
||||
ObjectStore objectStore(String name) => wrap_jso(_blink.BlinkIDBTransaction.instance.objectStore_Callback_1_(unwrap_jso(this), name));
|
||||
ObjectStore objectStore(String name) => _blink.BlinkIDBTransaction.instance.objectStore_Callback_1_(this, name);
|
||||
|
||||
/// Stream of `abort` events handled by this [Transaction].
|
||||
@DomName('IDBTransaction.onabort')
|
||||
|
@ -1377,18 +1363,14 @@ class VersionChangeEvent extends Event {
|
|||
factory VersionChangeEvent(String type, [Map eventInitDict]) {
|
||||
if (eventInitDict != null) {
|
||||
var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
|
||||
return wrap_jso(_blink.BlinkIDBVersionChangeEvent.instance.constructorCallback_2_(type, eventInitDict_1));
|
||||
return _blink.BlinkIDBVersionChangeEvent.instance.constructorCallback_2_(type, eventInitDict_1);
|
||||
}
|
||||
return wrap_jso(_blink.BlinkIDBVersionChangeEvent.instance.constructorCallback_1_(type));
|
||||
return _blink.BlinkIDBVersionChangeEvent.instance.constructorCallback_1_(type);
|
||||
}
|
||||
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static VersionChangeEvent internalCreateVersionChangeEvent() {
|
||||
return new VersionChangeEvent._internalWrap();
|
||||
}
|
||||
|
||||
external factory VersionChangeEvent._internalWrap();
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
VersionChangeEvent.internal_() : super.internal_();
|
||||
|
@ -1397,19 +1379,19 @@ class VersionChangeEvent extends Event {
|
|||
@DomName('IDBVersionChangeEvent.dataLoss')
|
||||
@DocsEditable()
|
||||
@Experimental() // untriaged
|
||||
String get dataLoss => _blink.BlinkIDBVersionChangeEvent.instance.dataLoss_Getter_(unwrap_jso(this));
|
||||
String get dataLoss => _blink.BlinkIDBVersionChangeEvent.instance.dataLoss_Getter_(this);
|
||||
|
||||
@DomName('IDBVersionChangeEvent.dataLossMessage')
|
||||
@DocsEditable()
|
||||
@Experimental() // untriaged
|
||||
String get dataLossMessage => _blink.BlinkIDBVersionChangeEvent.instance.dataLossMessage_Getter_(unwrap_jso(this));
|
||||
String get dataLossMessage => _blink.BlinkIDBVersionChangeEvent.instance.dataLossMessage_Getter_(this);
|
||||
|
||||
@DomName('IDBVersionChangeEvent.newVersion')
|
||||
@DocsEditable()
|
||||
int get newVersion => _blink.BlinkIDBVersionChangeEvent.instance.newVersion_Getter_(unwrap_jso(this));
|
||||
int get newVersion => _blink.BlinkIDBVersionChangeEvent.instance.newVersion_Getter_(this);
|
||||
|
||||
@DomName('IDBVersionChangeEvent.oldVersion')
|
||||
@DocsEditable()
|
||||
int get oldVersion => _blink.BlinkIDBVersionChangeEvent.instance.oldVersion_Getter_(unwrap_jso(this));
|
||||
int get oldVersion => _blink.BlinkIDBVersionChangeEvent.instance.oldVersion_Getter_(this);
|
||||
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -92,6 +92,7 @@ import 'dart:nativewrappers';
|
|||
import 'dart:math' as math;
|
||||
import 'dart:mirrors' as mirrors;
|
||||
import 'dart:html' as html;
|
||||
import 'dart:_blink' as _blink;
|
||||
import 'dart:html_common' as html_common;
|
||||
import 'dart:indexed_db' as indexed_db;
|
||||
import 'dart:typed_data';
|
||||
|
@ -120,7 +121,7 @@ _buildArgs(Invocation invocation) {
|
|||
varArgs[mirrors.MirrorSystem.getName(symbol)] = val;
|
||||
});
|
||||
return invocation.positionalArguments.toList()
|
||||
..add(maybeWrapTypedInterop(new JsObject.jsify(varArgs)));
|
||||
..add(JsNative.jsify(varArgs));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -401,12 +402,21 @@ String _accessJsPathHelper(Iterable<String> parts) {
|
|||
return sb.toString();
|
||||
}
|
||||
|
||||
// TODO(jacobr): remove these helpers and add JsNative.setPropertyDotted,
|
||||
// getPropertyDotted, and callMethodDotted helpers that would be simpler
|
||||
// and more efficient.
|
||||
String _accessJsPathSetter(String path) {
|
||||
var parts = path.split(".");
|
||||
return "${_JS_LIBRARY_PREFIX}.JsNative.setProperty(${_accessJsPathHelper(parts.getRange(0, parts.length - 1))
|
||||
}, '${parts.last}', v)";
|
||||
}
|
||||
|
||||
String _accessJsPathCallMethodHelper(String path) {
|
||||
var parts = path.split(".");
|
||||
return "${_JS_LIBRARY_PREFIX}.JsNative.callMethod(${_accessJsPathHelper(parts.getRange(0, parts.length - 1))
|
||||
}, '${parts.last}',";
|
||||
}
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
void addMemberHelper(
|
||||
mirrors.MethodMirror declaration, String path, StringBuffer sb,
|
||||
|
@ -426,11 +436,11 @@ void addMemberHelper(
|
|||
sb.write(" ");
|
||||
if (declaration.isGetter) {
|
||||
sb.write(
|
||||
"get $name => ${_JS_LIBRARY_PREFIX}.maybeWrapTypedInterop(${_accessJsPath(path)});");
|
||||
"get $name => ${_accessJsPath(path)};");
|
||||
} else if (declaration.isSetter) {
|
||||
sb.write("set $name(v) {\n"
|
||||
" ${_JS_LIBRARY_PREFIX}.safeForTypedInterop(v);\n"
|
||||
" return ${_JS_LIBRARY_PREFIX}.maybeWrapTypedInterop(${_accessJsPathSetter(path)});\n"
|
||||
" return ${_accessJsPathSetter(path)};\n"
|
||||
"}\n");
|
||||
} else {
|
||||
sb.write("$name(");
|
||||
|
@ -463,19 +473,19 @@ void addMemberHelper(
|
|||
for (var arg in args) {
|
||||
sb.write(" ${_JS_LIBRARY_PREFIX}.safeForTypedInterop($arg);\n");
|
||||
}
|
||||
sb.write(" return ${_JS_LIBRARY_PREFIX}.maybeWrapTypedInterop(");
|
||||
sb.write(" return ");
|
||||
if (declaration.isConstructor) {
|
||||
sb.write("new ${_JS_LIBRARY_PREFIX}.JsObject(");
|
||||
sb.write("${_JS_LIBRARY_PREFIX}.JsNative.callConstructor(");
|
||||
sb..write(_accessJsPath(path))..write(",");
|
||||
} else {
|
||||
sb.write(_accessJsPathCallMethodHelper(path));
|
||||
}
|
||||
sb
|
||||
..write(_accessJsPath(path))
|
||||
..write(declaration.isConstructor ? "," : ".apply(")
|
||||
..write("[${args.join(",")}]");
|
||||
sb.write("[${args.join(",")}]");
|
||||
|
||||
if (hasOptional) {
|
||||
sb.write(".takeWhile((i) => i != ${_UNDEFINED_VAR}).toList()");
|
||||
}
|
||||
sb.write("));");
|
||||
sb.write(");");
|
||||
sb.write("}\n");
|
||||
}
|
||||
sb.write("\n");
|
||||
|
@ -562,7 +572,7 @@ _generateLibraryCodegen(uri, library, staticCodegen) {
|
|||
..write('}');
|
||||
}
|
||||
sbPatch.write(") {\n"
|
||||
" var ret = new ${_JS_LIBRARY_PREFIX}.JsObject.jsify({});\n");
|
||||
" var ret = ${_JS_LIBRARY_PREFIX}.JsNative.newObject();\n");
|
||||
i = 0;
|
||||
for (var p in declaration.parameters) {
|
||||
assert(p.isNamed); // TODO(jacobr): throw.
|
||||
|
@ -571,14 +581,14 @@ _generateLibraryCodegen(uri, library, staticCodegen) {
|
|||
mirrors.MirrorSystem.getName(p.simpleName));
|
||||
sbPatch.write(" if($name != ${_UNDEFINED_VAR}) {\n"
|
||||
" ${_JS_LIBRARY_PREFIX}.safeForTypedInterop($name);\n"
|
||||
" ret['$jsName'] = $name;\n"
|
||||
" ${_JS_LIBRARY_PREFIX}.JsNative.setProperty(ret, '$jsName', $name);\n"
|
||||
" }\n");
|
||||
i++;
|
||||
}
|
||||
|
||||
sbPatch.write(
|
||||
" return new ${_JS_LIBRARY_PREFIX}.JSObject.create(ret);\n"
|
||||
" }\n");
|
||||
" return ret;"
|
||||
"}\n");
|
||||
} else if (declaration.isConstructor ||
|
||||
declaration.isFactoryConstructor) {
|
||||
sbPatch.write(" ");
|
||||
|
@ -607,8 +617,7 @@ _generateLibraryCodegen(uri, library, staticCodegen) {
|
|||
});
|
||||
}
|
||||
if (isDom) {
|
||||
sbPatch.write(" factory ${className}._internalWrap() => "
|
||||
"new ${classNameImpl}.internal_();\n");
|
||||
sbPatch.write(" static Type get instanceRuntimeType => ${classNameImpl};\n");
|
||||
}
|
||||
if (sbPatch.isNotEmpty) {
|
||||
var typeVariablesClause = '';
|
||||
|
@ -757,27 +766,15 @@ abstract class JSObjectInterfacesDom $implementsClauseDom {
|
|||
}
|
||||
|
||||
patch class JSObject {
|
||||
factory JSObject.create(JsObject jsObject) {
|
||||
var ret = new JSObjectImpl.internal()..blink_jsObject = jsObject;
|
||||
jsObject._dartHtmlWrapper = ret;
|
||||
return ret;
|
||||
}
|
||||
static Type get instanceRuntimeType => JSObjectImpl;
|
||||
}
|
||||
|
||||
patch class JSFunction {
|
||||
factory JSFunction.create(JsObject jsObject) {
|
||||
var ret = new JSFunctionImpl.internal()..blink_jsObject = jsObject;
|
||||
jsObject._dartHtmlWrapper = ret;
|
||||
return ret;
|
||||
}
|
||||
static Type get instanceRuntimeType => JSFunctionImpl;
|
||||
}
|
||||
|
||||
patch class JSArray {
|
||||
factory JSArray.create(JsObject jsObject) {
|
||||
var ret = new JSArrayImpl.internal()..blink_jsObject = jsObject;
|
||||
jsObject._dartHtmlWrapper = ret;
|
||||
return ret;
|
||||
}
|
||||
static Type get instanceRuntimeType => JSArrayImpl;
|
||||
}
|
||||
|
||||
_registerAllJsInterfaces() {
|
||||
|
@ -959,49 +956,44 @@ JsObject get context {
|
|||
return _cachedContext;
|
||||
}
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
maybeWrapTypedInterop(o) => html_common.wrap_jso_no_SerializedScriptvalue(o);
|
||||
|
||||
_maybeWrap(o) {
|
||||
var wrapped = html_common.wrap_jso_no_SerializedScriptvalue(o);
|
||||
if (identical(wrapped, o)) return o;
|
||||
return (wrapped is html.Blob ||
|
||||
wrapped is html.Event ||
|
||||
wrapped is indexed_db.KeyRange ||
|
||||
wrapped is html.ImageData ||
|
||||
wrapped is html.Node ||
|
||||
wrapped is TypedData ||
|
||||
wrapped is html.Window) ? wrapped : o;
|
||||
_lookupType(o, bool isCrossFrame, bool isElement) {
|
||||
try {
|
||||
var type = html_common.lookupType(o, isElement);
|
||||
var typeMirror = mirrors.reflectType(type);
|
||||
var legacyInteropConvertToNative = typeMirror.isSubtypeOf(mirrors.reflectType(html.Blob)) ||
|
||||
typeMirror.isSubtypeOf(mirrors.reflectType(html.Event)) ||
|
||||
typeMirror.isSubtypeOf(mirrors.reflectType(indexed_db.KeyRange)) ||
|
||||
typeMirror.isSubtypeOf(mirrors.reflectType(html.ImageData)) ||
|
||||
typeMirror.isSubtypeOf(mirrors.reflectType(html.Node)) ||
|
||||
// TypedData is removed from this list as it is converted directly
|
||||
// rather than flowing through the interceptor code path.
|
||||
// typeMirror.isSubtypeOf(mirrors.reflectType(typed_data.TypedData)) ||
|
||||
typeMirror.isSubtypeOf(mirrors.reflectType(html.Window));
|
||||
if (isCrossFrame && !typeMirror.isSubtypeOf(mirrors.reflectType(html.Window))) {
|
||||
// TODO(jacobr): evaluate using the true cross frame Window class, etc.
|
||||
// as well as triggering that legacy JS Interop returns raw JsObject
|
||||
// instances.
|
||||
legacyInteropConvertToNative = false;
|
||||
}
|
||||
return [type, legacyInteropConvertToNative];
|
||||
} catch (e) { }
|
||||
return [JSObject.instanceRuntimeType, false];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the dart wrapper object for object. Top-level so we
|
||||
* we can access it from other libraries without it being
|
||||
* a public instance field on JsObject.
|
||||
* Base class for both the legacy JsObject class and the modern JSObject class.
|
||||
* This allows the JsNative utility class tobehave identically whether it is
|
||||
* called on a JsObject or a JSObject.
|
||||
*/
|
||||
@Deprecated("Internal Use Only")
|
||||
getDartHtmlWrapperFor(JsObject object) => object._dartHtmlWrapper;
|
||||
class _JSObjectBase extends NativeFieldWrapperClass2 {
|
||||
String _toString() native "JSObject_toString";
|
||||
_callMethod(String name, List args) native "JSObject_callMethod";
|
||||
_operator_getter(String property) native "JSObject_[]";
|
||||
_operator_setter(String property, value) native "JSObject_[]=";
|
||||
bool _hasProperty(String property) native "JsObject_hasProperty";
|
||||
bool _instanceof(/*JsFunction|JSFunction*/ type) native "JsObject_instanceof";
|
||||
|
||||
/**
|
||||
* Set the dart wrapper object for object. Top-level so we
|
||||
* we can access it from other libraries without it being
|
||||
* a public instance field on JsObject.
|
||||
*/
|
||||
@Deprecated("Internal Use Only")
|
||||
void setDartHtmlWrapperFor(JsObject object, wrapper) {
|
||||
object._dartHtmlWrapper = wrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by callMethod to get the JS object for each argument passed if the
|
||||
* argument is a Dart class instance that delegates to a DOM object. See
|
||||
* wrap_jso defined in dart:html.
|
||||
*/
|
||||
@Deprecated("Internal Use Only")
|
||||
unwrap_jso(dartClass_instance) {
|
||||
if (dartClass_instance is JSObject &&
|
||||
dartClass_instance is! JsObject) return dartClass_instance.blink_jsObject;
|
||||
else return dartClass_instance;
|
||||
int get hashCode native "JSObject_hashCode";
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1010,22 +1002,16 @@ unwrap_jso(dartClass_instance) {
|
|||
* The properties of the JavaScript object are accessible via the `[]` and
|
||||
* `[]=` operators. Methods are callable via [callMethod].
|
||||
*/
|
||||
class JsObject extends NativeFieldWrapperClass2 {
|
||||
class JsObject extends _JSObjectBase {
|
||||
JsObject.internal();
|
||||
|
||||
/**
|
||||
* If this JsObject is wrapped, e.g. DOM objects, then we can save the
|
||||
* wrapper here and preserve its identity.
|
||||
*/
|
||||
var _dartHtmlWrapper;
|
||||
|
||||
/**
|
||||
* Constructs a new JavaScript object from [constructor] and returns a proxy
|
||||
* to it.
|
||||
*/
|
||||
factory JsObject(JsFunction constructor, [List arguments]) {
|
||||
try {
|
||||
return html_common.unwrap_jso(_create(constructor, arguments));
|
||||
return _create(constructor, arguments);
|
||||
} catch (e) {
|
||||
// Re-throw any errors (returned as a string) as a DomException.
|
||||
throw new html.DomException.jsInterop(e);
|
||||
|
@ -1050,6 +1036,7 @@ class JsObject extends NativeFieldWrapperClass2 {
|
|||
if (object is num || object is String || object is bool || object == null) {
|
||||
throw new ArgumentError("object cannot be a num, string, bool, or null");
|
||||
}
|
||||
if (object is JsObject) return object;
|
||||
return _fromBrowserObject(object);
|
||||
}
|
||||
|
||||
|
@ -1071,7 +1058,7 @@ class JsObject extends NativeFieldWrapperClass2 {
|
|||
|
||||
static JsObject _jsify(object) native "JsObject_jsify";
|
||||
|
||||
static JsObject _fromBrowserObject(object) => html_common.unwrap_jso(object);
|
||||
static JsObject _fromBrowserObject(object) native "JsObject_fromBrowserObject";
|
||||
|
||||
/**
|
||||
* Returns the value associated with [property] from the proxied JavaScript
|
||||
|
@ -1081,14 +1068,14 @@ class JsObject extends NativeFieldWrapperClass2 {
|
|||
*/
|
||||
operator [](property) {
|
||||
try {
|
||||
return _maybeWrap(_operator_getter(property));
|
||||
return _operator_getterLegacy(property);
|
||||
} catch (e) {
|
||||
// Re-throw any errors (returned as a string) as a DomException.
|
||||
throw new html.DomException.jsInterop(e);
|
||||
}
|
||||
}
|
||||
|
||||
_operator_getter(property) native "JsObject_[]";
|
||||
_operator_getterLegacy(property) native "JsObject_[]Legacy";
|
||||
|
||||
/**
|
||||
* Sets the value associated with [property] on the proxied JavaScript
|
||||
|
@ -1098,27 +1085,23 @@ class JsObject extends NativeFieldWrapperClass2 {
|
|||
*/
|
||||
operator []=(property, value) {
|
||||
try {
|
||||
_operator_setter(property, value);
|
||||
_operator_setterLegacy(property, value);
|
||||
} catch (e) {
|
||||
// Re-throw any errors (returned as a string) as a DomException.
|
||||
throw new html.DomException.jsInterop(e);
|
||||
}
|
||||
}
|
||||
|
||||
_operator_setter(property, value) native "JsObject_[]=";
|
||||
_operator_setterLegacy(property, value) native "JsObject_[]=Legacy";
|
||||
|
||||
int get hashCode native "JsObject_hashCode";
|
||||
|
||||
operator ==(other) {
|
||||
var is_JsObject = other is JsObject;
|
||||
if (!is_JsObject) {
|
||||
other = html_common.unwrap_jso(other);
|
||||
is_JsObject = other is JsObject;
|
||||
}
|
||||
return is_JsObject && _identityEquality(this, other);
|
||||
if (other is! JsObject && other is! JSObject) return false;
|
||||
return _identityEquality(this, other);
|
||||
}
|
||||
|
||||
static bool _identityEquality(JsObject a, JsObject b)
|
||||
static bool _identityEquality(a, b)
|
||||
native "JsObject_identityEquality";
|
||||
|
||||
/**
|
||||
|
@ -1127,7 +1110,7 @@ class JsObject extends NativeFieldWrapperClass2 {
|
|||
*
|
||||
* This is the equivalent of the `in` operator in JavaScript.
|
||||
*/
|
||||
bool hasProperty(String property) native "JsObject_hasProperty";
|
||||
bool hasProperty(String property) => _hasProperty(property);
|
||||
|
||||
/**
|
||||
* Removes [property] from the JavaScript object.
|
||||
|
@ -1141,7 +1124,7 @@ class JsObject extends NativeFieldWrapperClass2 {
|
|||
*
|
||||
* This is the equivalent of the `instanceof` operator in JavaScript.
|
||||
*/
|
||||
bool instanceof(JsFunction type) native "JsObject_instanceof";
|
||||
bool instanceof(JsFunction type) => _instanceof(type);
|
||||
|
||||
/**
|
||||
* Returns the result of the JavaScript objects `toString` method.
|
||||
|
@ -1164,7 +1147,7 @@ class JsObject extends NativeFieldWrapperClass2 {
|
|||
*/
|
||||
callMethod(String method, [List args]) {
|
||||
try {
|
||||
return _maybeWrap(_callMethod(method, args));
|
||||
return _callMethodLegacy(method, args);
|
||||
} catch (e) {
|
||||
if (hasProperty(method)) {
|
||||
// Return a DomException if DOM call returned an error.
|
||||
|
@ -1175,19 +1158,26 @@ class JsObject extends NativeFieldWrapperClass2 {
|
|||
}
|
||||
}
|
||||
|
||||
_callMethod(String name, List args) native "JsObject_callMethod";
|
||||
_callMethodLegacy(String name, List args) native "JsObject_callMethodLegacy";
|
||||
}
|
||||
|
||||
|
||||
/// Base class for all JS objects used through dart:html and typed JS interop.
|
||||
@Deprecated("Internal Use Only")
|
||||
class JSObject {
|
||||
class JSObject extends _JSObjectBase {
|
||||
JSObject.internal() {}
|
||||
external factory JSObject.create(JsObject jsObject);
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
JsObject blink_jsObject;
|
||||
|
||||
String toString() => blink_jsObject.toString();
|
||||
/**
|
||||
* Returns the result of the JavaScript objects `toString` method.
|
||||
*/
|
||||
String toString() {
|
||||
try {
|
||||
return _toString();
|
||||
} catch (e) {
|
||||
return super.toString();
|
||||
}
|
||||
}
|
||||
|
||||
noSuchMethod(Invocation invocation) {
|
||||
throwError() {
|
||||
|
@ -1204,7 +1194,7 @@ class JSObject {
|
|||
!_allowedMethods.containsKey(invocation.memberName)) {
|
||||
throwError();
|
||||
}
|
||||
var ret = maybeWrapTypedInterop(blink_jsObject._operator_getter(name));
|
||||
var ret = _operator_getter(name);
|
||||
if (matches != null) return ret;
|
||||
if (ret is Function ||
|
||||
(ret is JsFunction /* shouldn't be needed in the future*/) &&
|
||||
|
@ -1213,7 +1203,7 @@ class JSObject {
|
|||
throwError();
|
||||
} else {
|
||||
// TODO(jacobr): should we throw if the JavaScript object doesn't have the property?
|
||||
return maybeWrapTypedInterop(blink_jsObject._operator_getter(name));
|
||||
return _operator_getter(name);
|
||||
}
|
||||
} else if (invocation.isSetter) {
|
||||
if (CHECK_JS_INVOCATIONS) {
|
||||
|
@ -1223,8 +1213,7 @@ class JSObject {
|
|||
}
|
||||
assert(name.endsWith("="));
|
||||
name = name.substring(0, name.length - 1);
|
||||
return maybeWrapTypedInterop(blink_jsObject._operator_setter(
|
||||
name, invocation.positionalArguments.first));
|
||||
return _operator_setter(name, invocation.positionalArguments.first);
|
||||
} else {
|
||||
// TODO(jacobr): also allow calling getters that look like functions.
|
||||
var matches;
|
||||
|
@ -1233,8 +1222,7 @@ class JSObject {
|
|||
if (matches == null ||
|
||||
!matches.checkInvocation(invocation)) throwError();
|
||||
}
|
||||
var ret = maybeWrapTypedInterop(
|
||||
blink_jsObject._callMethod(name, _buildArgs(invocation)));
|
||||
var ret = _callMethod(name, _buildArgs(invocation));
|
||||
if (CHECK_JS_INVOCATIONS) {
|
||||
if (!matches._checkReturnType(ret)) {
|
||||
html.window.console.error("Return value for method: ${name} is "
|
||||
|
@ -1250,21 +1238,56 @@ class JSObject {
|
|||
@Deprecated("Internal Use Only")
|
||||
class JSArray extends JSObject with ListMixin {
|
||||
JSArray.internal() : super.internal();
|
||||
external factory JSArray.create(JsObject jsObject);
|
||||
operator [](int index) =>
|
||||
maybeWrapTypedInterop(JsNative.getArrayIndex(blink_jsObject, index));
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
operator []=(int index, value) => blink_jsObject[index] = value;
|
||||
// Reuse JsArray_length as length behavior is unchanged.
|
||||
int get length native "JsArray_length";
|
||||
|
||||
int get length => blink_jsObject.length;
|
||||
set length(int newLength) => blink_jsObject.length = newLength;
|
||||
set length(int length) {
|
||||
_operator_setter('length', length);
|
||||
}
|
||||
|
||||
_checkIndex(int index, {bool insert: false}) {
|
||||
int length = insert ? this.length + 1 : this.length;
|
||||
if (index is int && (index < 0 || index >= length)) {
|
||||
throw new RangeError.range(index, 0, length);
|
||||
}
|
||||
}
|
||||
|
||||
_checkRange(int start, int end) {
|
||||
int cachedLength = this.length;
|
||||
if (start < 0 || start > cachedLength) {
|
||||
throw new RangeError.range(start, 0, cachedLength);
|
||||
}
|
||||
if (end < start || end > cachedLength) {
|
||||
throw new RangeError.range(end, start, cachedLength);
|
||||
}
|
||||
}
|
||||
|
||||
_indexed_getter(int index) native "JSArray_indexed_getter";
|
||||
_indexed_setter(int index, o) native "JSArray_indexed_setter";
|
||||
|
||||
// Methods required by ListMixin
|
||||
|
||||
operator [](index) {
|
||||
if (index is int) {
|
||||
_checkIndex(index);
|
||||
}
|
||||
|
||||
return _indexed_getter(index);
|
||||
}
|
||||
|
||||
void operator []=(int index, value) {
|
||||
_checkIndex(index);
|
||||
_indexed_setter(index, value);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
class JSFunction extends JSObject implements Function {
|
||||
JSFunction.internal() : super.internal();
|
||||
|
||||
external factory JSFunction.create(JsObject jsObject);
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
call(
|
||||
[a1 = _UNDEFINED,
|
||||
|
@ -1277,48 +1300,49 @@ class JSFunction extends JSObject implements Function {
|
|||
a8 = _UNDEFINED,
|
||||
a9 = _UNDEFINED,
|
||||
a10 = _UNDEFINED]) {
|
||||
return maybeWrapTypedInterop(blink_jsObject
|
||||
.apply(_stripUndefinedArgs([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10])));
|
||||
return _apply(_stripUndefinedArgs([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10]));
|
||||
}
|
||||
|
||||
noSuchMethod(Invocation invocation) {
|
||||
if (invocation.isMethod && invocation.memberName == #call) {
|
||||
return maybeWrapTypedInterop(
|
||||
blink_jsObject.apply(_buildArgs(invocation)));
|
||||
return _apply(_buildArgs(invocation));
|
||||
}
|
||||
return super.noSuchMethod(invocation);
|
||||
}
|
||||
|
||||
dynamic _apply(List args, {thisArg}) native "JSFunction_apply";
|
||||
|
||||
static JSFunction _createWithThis(Function f) native "JSFunction_createWithThis";
|
||||
static JSFunction _create(Function f) native "JSFunction_create";
|
||||
}
|
||||
|
||||
// JavaScript interop methods that do not automatically wrap to dart:html types.
|
||||
// Warning: this API is not exposed to dart:js.
|
||||
// TODO(jacobr): rename to JSNative and make at least part of this API public.
|
||||
@Deprecated("Internal Use Only")
|
||||
class JsNative {
|
||||
static getProperty(o, name) {
|
||||
o = unwrap_jso(o);
|
||||
return o != null ? o._operator_getter(name) : null;
|
||||
}
|
||||
static JSObject jsify(object) native "JSObject_jsify";
|
||||
static JSObject newObject() native "JSObject_newObject";
|
||||
static JSArray newArray() native "JSObject_newArray";
|
||||
|
||||
static setProperty(o, name, value) {
|
||||
return unwrap_jso(o)._operator_setter(name, value);
|
||||
}
|
||||
static hasProperty(_JSObjectBase o, name) => o._hasProperty(name);
|
||||
static getProperty(_JSObjectBase o, name) => o._operator_getter(name);
|
||||
static setProperty(_JSObjectBase o, name, value) => o._operator_setter(name, value);
|
||||
static callMethod(_JSObjectBase o, String method, List args) => o._callMethod(method, args);
|
||||
static instanceof(_JSObjectBase o, /*JsFunction|JSFunction*/ type) => o._instanceof(type);
|
||||
static callConstructor0(_JSObjectBase constructor) native "JSNative_callConstructor0";
|
||||
static callConstructor(_JSObjectBase constructor, List args) native "JSNative_callConstructor";
|
||||
|
||||
static callMethod(o, String method, List args) {
|
||||
return unwrap_jso(o)._callMethod(method, args);
|
||||
}
|
||||
|
||||
static getArrayIndex(JsArray array, int index) {
|
||||
array._checkIndex(index);
|
||||
return getProperty(array, index);
|
||||
}
|
||||
static toTypedObject(JsObject o) native "JSNative_toTypedObject";
|
||||
|
||||
/**
|
||||
* Same behavior as new JsFunction.withThis except that JavaScript "this" is not
|
||||
* wrapped.
|
||||
*/
|
||||
static JsFunction withThis(Function f) native "JsFunction_withThisNoWrap";
|
||||
static JSFunction withThis(Function f) native "JsFunction_withThisNoWrap";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Proxies a JavaScript Function object.
|
||||
*/
|
||||
|
@ -1336,7 +1360,7 @@ class JsFunction extends JsObject {
|
|||
* supplied it is the value of `this` for the invocation.
|
||||
*/
|
||||
dynamic apply(List args, {thisArg}) =>
|
||||
_maybeWrap(_apply(args, thisArg: thisArg));
|
||||
_apply(args, thisArg: thisArg);
|
||||
|
||||
dynamic _apply(List args, {thisArg}) native "JsFunction_apply";
|
||||
|
||||
|
@ -1488,15 +1512,6 @@ void argsSafeForTypedInterop(Iterable args) {
|
|||
}
|
||||
}
|
||||
|
||||
List _stripAndWrapArgs(Iterable args) {
|
||||
var ret = [];
|
||||
for (var arg in args) {
|
||||
if (arg == _UNDEFINED) break;
|
||||
ret.add(maybeWrapTypedInterop(arg));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a method that can be called with an arbitrary number (for n less
|
||||
* than 11) of arguments without violating Dart type checks.
|
||||
|
@ -1515,90 +1530,6 @@ Function _wrapAsDebuggerVarArgsFunction(JsFunction jsFunction) => (
|
|||
jsFunction._applyDebuggerOnly(
|
||||
_stripUndefinedArgs([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10]));
|
||||
|
||||
/// This helper is purely a hack so we can reuse JsFunction.withThis even when
|
||||
/// we don't care about passing JS "this". In an ideal world we would implement
|
||||
/// helpers in C++ that directly implement allowInterop and
|
||||
/// allowInteropCaptureThis.
|
||||
class _CreateDartFunctionForInteropIgnoreThis implements Function {
|
||||
Function _fn;
|
||||
|
||||
_CreateDartFunctionForInteropIgnoreThis(this._fn);
|
||||
|
||||
call(
|
||||
[ignoredThis = _UNDEFINED,
|
||||
a1 = _UNDEFINED,
|
||||
a2 = _UNDEFINED,
|
||||
a3 = _UNDEFINED,
|
||||
a4 = _UNDEFINED,
|
||||
a5 = _UNDEFINED,
|
||||
a6 = _UNDEFINED,
|
||||
a7 = _UNDEFINED,
|
||||
a8 = _UNDEFINED,
|
||||
a9 = _UNDEFINED,
|
||||
a10 = _UNDEFINED]) {
|
||||
var ret = Function.apply(
|
||||
_fn, _stripAndWrapArgs([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10]));
|
||||
safeForTypedInterop(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
noSuchMethod(Invocation invocation) {
|
||||
if (invocation.isMethod && invocation.memberName == #call) {
|
||||
// Named arguments not yet supported.
|
||||
if (invocation.namedArguments.isNotEmpty) return;
|
||||
var ret = Function.apply(
|
||||
_fn, _stripAndWrapArgs(invocation.positionalArguments.skip(1)));
|
||||
// TODO(jacobr): it would be nice to check that the return value is safe
|
||||
// for interop but we don't want to break existing addEventListener users.
|
||||
// safeForTypedInterop(ret);
|
||||
safeForTypedInterop(ret);
|
||||
return ret;
|
||||
}
|
||||
return super.noSuchMethod(invocation);
|
||||
}
|
||||
}
|
||||
|
||||
/// See comment for [_CreateDartFunctionForInteropIgnoreThis].
|
||||
/// This Function exists purely because JsObject doesn't have the DOM type
|
||||
/// conversion semantics we want for JS typed interop.
|
||||
class _CreateDartFunctionForInterop implements Function {
|
||||
Function _fn;
|
||||
|
||||
_CreateDartFunctionForInterop(this._fn);
|
||||
|
||||
call(
|
||||
[a1 = _UNDEFINED,
|
||||
a2 = _UNDEFINED,
|
||||
a3 = _UNDEFINED,
|
||||
a4 = _UNDEFINED,
|
||||
a5 = _UNDEFINED,
|
||||
a6 = _UNDEFINED,
|
||||
a7 = _UNDEFINED,
|
||||
a8 = _UNDEFINED,
|
||||
a9 = _UNDEFINED,
|
||||
a10 = _UNDEFINED]) {
|
||||
var ret = Function.apply(
|
||||
_fn, _stripAndWrapArgs([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10]));
|
||||
safeForTypedInterop(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
noSuchMethod(Invocation invocation) {
|
||||
if (invocation.isMethod && invocation.memberName == #call) {
|
||||
// Named arguments not yet supported.
|
||||
if (invocation.namedArguments.isNotEmpty) return;
|
||||
var ret = Function.apply(
|
||||
_fn, _stripAndWrapArgs(invocation.positionalArguments));
|
||||
safeForTypedInterop(ret);
|
||||
return ret;
|
||||
}
|
||||
return super.noSuchMethod(invocation);
|
||||
}
|
||||
}
|
||||
|
||||
/// Cached JSFunction associated with the Dart Function.
|
||||
Expando<JSFunction> _interopExpando = new Expando<JSFunction>();
|
||||
|
||||
/// Returns a wrapper around function [f] that can be called from JavaScript
|
||||
/// using the package:js Dart-JavaScript interop.
|
||||
///
|
||||
|
@ -1615,14 +1546,7 @@ JSFunction allowInterop(Function f) {
|
|||
// The function is already a JSFunction... no need to do anything.
|
||||
return f;
|
||||
} else {
|
||||
var ret = _interopExpando[f];
|
||||
if (ret == null) {
|
||||
// TODO(jacobr): we could optimize this.
|
||||
ret = new JSFunction.create(new JsFunction.withThis(
|
||||
new _CreateDartFunctionForInteropIgnoreThis(f)));
|
||||
_interopExpando[f] = ret;
|
||||
}
|
||||
return ret;
|
||||
return JSFunction._create(f);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1646,10 +1570,11 @@ JSFunction allowInteropCaptureThis(Function f) {
|
|||
var ret = _interopCaptureThisExpando[f];
|
||||
if (ret == null) {
|
||||
// TODO(jacobr): we could optimize this.
|
||||
ret = new JSFunction.create(
|
||||
new JsFunction.withThis(new _CreateDartFunctionForInterop(f)));
|
||||
ret = JSFunction._createWithThis(f);
|
||||
_interopCaptureThisExpando[f] = ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
debugPrint(_) {}
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -29,22 +29,11 @@ import 'dart:js' as js;
|
|||
// FIXME: Can we make this private?
|
||||
@Deprecated("Internal Use Only")
|
||||
final web_sqlBlinkMap = {
|
||||
'Database': () => SqlDatabase,
|
||||
'SQLError': () => SqlError,
|
||||
'SQLResultSet': () => SqlResultSet,
|
||||
'SQLResultSetRowList': () => SqlResultSetRowList,
|
||||
'SQLTransaction': () => SqlTransaction,
|
||||
|
||||
};
|
||||
|
||||
// FIXME: Can we make this private?
|
||||
@Deprecated("Internal Use Only")
|
||||
final web_sqlBlinkFunctionMap = {
|
||||
'Database': () => SqlDatabase.internalCreateSqlDatabase,
|
||||
'SQLError': () => SqlError.internalCreateSqlError,
|
||||
'SQLResultSet': () => SqlResultSet.internalCreateSqlResultSet,
|
||||
'SQLResultSetRowList': () => SqlResultSetRowList.internalCreateSqlResultSetRowList,
|
||||
'SQLTransaction': () => SqlTransaction.internalCreateSqlTransaction,
|
||||
'Database': () => SqlDatabase.instanceRuntimeType,
|
||||
'SQLError': () => SqlError.instanceRuntimeType,
|
||||
'SQLResultSet': () => SqlResultSet.instanceRuntimeType,
|
||||
'SQLResultSetRowList': () => SqlResultSetRowList.instanceRuntimeType,
|
||||
'SQLTransaction': () => SqlTransaction.instanceRuntimeType,
|
||||
|
||||
};
|
||||
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
||||
|
@ -109,68 +98,60 @@ class SqlDatabase extends DartHtmlDomObject {
|
|||
// To suppress missing implicit constructor warnings.
|
||||
factory SqlDatabase._() { throw new UnsupportedError("Not supported"); }
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static SqlDatabase internalCreateSqlDatabase() {
|
||||
return new SqlDatabase._internalWrap();
|
||||
}
|
||||
|
||||
factory SqlDatabase._internalWrap() {
|
||||
return new SqlDatabase.internal_();
|
||||
}
|
||||
@Deprecated("Internal Use Only")
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
SqlDatabase.internal_() { }
|
||||
|
||||
bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
|
||||
int get hashCode => unwrap_jso(this).hashCode;
|
||||
|
||||
/// Checks if this type is supported on the current platform.
|
||||
static bool get supported => true;
|
||||
|
||||
@DomName('Database.version')
|
||||
@DocsEditable()
|
||||
String get version => _blink.BlinkDatabase.instance.version_Getter_(unwrap_jso(this));
|
||||
String get version => _blink.BlinkDatabase.instance.version_Getter_(this);
|
||||
|
||||
void changeVersion(String oldVersion, String newVersion, [SqlTransactionCallback callback, SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) {
|
||||
if (successCallback != null) {
|
||||
_blink.BlinkDatabase.instance.changeVersion_Callback_5_(unwrap_jso(this), oldVersion, newVersion, unwrap_jso((transaction) => callback(wrap_jso(transaction))), unwrap_jso((error) => errorCallback(wrap_jso(error))), unwrap_jso(() => successCallback()));
|
||||
_blink.BlinkDatabase.instance.changeVersion_Callback_5_(this, oldVersion, newVersion, callback, errorCallback, successCallback);
|
||||
return;
|
||||
}
|
||||
if (errorCallback != null) {
|
||||
_blink.BlinkDatabase.instance.changeVersion_Callback_4_(unwrap_jso(this), oldVersion, newVersion, unwrap_jso((transaction) => callback(wrap_jso(transaction))), unwrap_jso((error) => errorCallback(wrap_jso(error))));
|
||||
_blink.BlinkDatabase.instance.changeVersion_Callback_4_(this, oldVersion, newVersion, callback, errorCallback);
|
||||
return;
|
||||
}
|
||||
if (callback != null) {
|
||||
_blink.BlinkDatabase.instance.changeVersion_Callback_3_(unwrap_jso(this), oldVersion, newVersion, unwrap_jso((transaction) => callback(wrap_jso(transaction))));
|
||||
_blink.BlinkDatabase.instance.changeVersion_Callback_3_(this, oldVersion, newVersion, callback);
|
||||
return;
|
||||
}
|
||||
_blink.BlinkDatabase.instance.changeVersion_Callback_2_(unwrap_jso(this), oldVersion, newVersion);
|
||||
_blink.BlinkDatabase.instance.changeVersion_Callback_2_(this, oldVersion, newVersion);
|
||||
return;
|
||||
}
|
||||
|
||||
void readTransaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) {
|
||||
if (successCallback != null) {
|
||||
_blink.BlinkDatabase.instance.readTransaction_Callback_3_(unwrap_jso(this), unwrap_jso((transaction) => callback(wrap_jso(transaction))), unwrap_jso((error) => errorCallback(wrap_jso(error))), unwrap_jso(() => successCallback()));
|
||||
_blink.BlinkDatabase.instance.readTransaction_Callback_3_(this, callback, errorCallback, successCallback);
|
||||
return;
|
||||
}
|
||||
if (errorCallback != null) {
|
||||
_blink.BlinkDatabase.instance.readTransaction_Callback_2_(unwrap_jso(this), unwrap_jso((transaction) => callback(wrap_jso(transaction))), unwrap_jso((error) => errorCallback(wrap_jso(error))));
|
||||
_blink.BlinkDatabase.instance.readTransaction_Callback_2_(this, callback, errorCallback);
|
||||
return;
|
||||
}
|
||||
_blink.BlinkDatabase.instance.readTransaction_Callback_1_(unwrap_jso(this), unwrap_jso((transaction) => callback(wrap_jso(transaction))));
|
||||
_blink.BlinkDatabase.instance.readTransaction_Callback_1_(this, callback);
|
||||
return;
|
||||
}
|
||||
|
||||
void transaction(SqlTransactionCallback callback, [SqlTransactionErrorCallback errorCallback, VoidCallback successCallback]) {
|
||||
if (successCallback != null) {
|
||||
_blink.BlinkDatabase.instance.transaction_Callback_3_(unwrap_jso(this), unwrap_jso((transaction) => callback(wrap_jso(transaction))), unwrap_jso((error) => errorCallback(wrap_jso(error))), unwrap_jso(() => successCallback()));
|
||||
_blink.BlinkDatabase.instance.transaction_Callback_3_(this, callback, errorCallback, successCallback);
|
||||
return;
|
||||
}
|
||||
if (errorCallback != null) {
|
||||
_blink.BlinkDatabase.instance.transaction_Callback_2_(unwrap_jso(this), unwrap_jso((transaction) => callback(wrap_jso(transaction))), unwrap_jso((error) => errorCallback(wrap_jso(error))));
|
||||
_blink.BlinkDatabase.instance.transaction_Callback_2_(this, callback, errorCallback);
|
||||
return;
|
||||
}
|
||||
_blink.BlinkDatabase.instance.transaction_Callback_1_(unwrap_jso(this), unwrap_jso((transaction) => callback(wrap_jso(transaction))));
|
||||
_blink.BlinkDatabase.instance.transaction_Callback_1_(this, callback);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -190,21 +171,13 @@ class SqlError extends DartHtmlDomObject {
|
|||
// To suppress missing implicit constructor warnings.
|
||||
factory SqlError._() { throw new UnsupportedError("Not supported"); }
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static SqlError internalCreateSqlError() {
|
||||
return new SqlError._internalWrap();
|
||||
}
|
||||
|
||||
factory SqlError._internalWrap() {
|
||||
return new SqlError.internal_();
|
||||
}
|
||||
@Deprecated("Internal Use Only")
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
SqlError.internal_() { }
|
||||
|
||||
bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
|
||||
int get hashCode => unwrap_jso(this).hashCode;
|
||||
|
||||
@DomName('SQLError.CONSTRAINT_ERR')
|
||||
@DocsEditable()
|
||||
static const int CONSTRAINT_ERR = 6;
|
||||
|
@ -239,11 +212,11 @@ class SqlError extends DartHtmlDomObject {
|
|||
|
||||
@DomName('SQLError.code')
|
||||
@DocsEditable()
|
||||
int get code => _blink.BlinkSQLError.instance.code_Getter_(unwrap_jso(this));
|
||||
int get code => _blink.BlinkSQLError.instance.code_Getter_(this);
|
||||
|
||||
@DomName('SQLError.message')
|
||||
@DocsEditable()
|
||||
String get message => _blink.BlinkSQLError.instance.message_Getter_(unwrap_jso(this));
|
||||
String get message => _blink.BlinkSQLError.instance.message_Getter_(this);
|
||||
|
||||
}
|
||||
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
||||
|
@ -261,32 +234,24 @@ class SqlResultSet extends DartHtmlDomObject {
|
|||
// To suppress missing implicit constructor warnings.
|
||||
factory SqlResultSet._() { throw new UnsupportedError("Not supported"); }
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static SqlResultSet internalCreateSqlResultSet() {
|
||||
return new SqlResultSet._internalWrap();
|
||||
}
|
||||
|
||||
factory SqlResultSet._internalWrap() {
|
||||
return new SqlResultSet.internal_();
|
||||
}
|
||||
@Deprecated("Internal Use Only")
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
SqlResultSet.internal_() { }
|
||||
|
||||
bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
|
||||
int get hashCode => unwrap_jso(this).hashCode;
|
||||
|
||||
@DomName('SQLResultSet.insertId')
|
||||
@DocsEditable()
|
||||
int get insertId => _blink.BlinkSQLResultSet.instance.insertId_Getter_(unwrap_jso(this));
|
||||
int get insertId => _blink.BlinkSQLResultSet.instance.insertId_Getter_(this);
|
||||
|
||||
@DomName('SQLResultSet.rows')
|
||||
@DocsEditable()
|
||||
SqlResultSetRowList get rows => wrap_jso(_blink.BlinkSQLResultSet.instance.rows_Getter_(unwrap_jso(this)));
|
||||
SqlResultSetRowList get rows => _blink.BlinkSQLResultSet.instance.rows_Getter_(this);
|
||||
|
||||
@DomName('SQLResultSet.rowsAffected')
|
||||
@DocsEditable()
|
||||
int get rowsAffected => _blink.BlinkSQLResultSet.instance.rowsAffected_Getter_(unwrap_jso(this));
|
||||
int get rowsAffected => _blink.BlinkSQLResultSet.instance.rowsAffected_Getter_(this);
|
||||
|
||||
}
|
||||
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
||||
|
@ -304,32 +269,24 @@ class SqlResultSetRowList extends DartHtmlDomObject with ListMixin<Map>, Immutab
|
|||
// To suppress missing implicit constructor warnings.
|
||||
factory SqlResultSetRowList._() { throw new UnsupportedError("Not supported"); }
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static SqlResultSetRowList internalCreateSqlResultSetRowList() {
|
||||
return new SqlResultSetRowList._internalWrap();
|
||||
}
|
||||
|
||||
factory SqlResultSetRowList._internalWrap() {
|
||||
return new SqlResultSetRowList.internal_();
|
||||
}
|
||||
@Deprecated("Internal Use Only")
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
SqlResultSetRowList.internal_() { }
|
||||
|
||||
bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
|
||||
int get hashCode => unwrap_jso(this).hashCode;
|
||||
|
||||
@DomName('SQLResultSetRowList.length')
|
||||
@DocsEditable()
|
||||
int get length => _blink.BlinkSQLResultSetRowList.instance.length_Getter_(unwrap_jso(this));
|
||||
int get length => _blink.BlinkSQLResultSetRowList.instance.length_Getter_(this);
|
||||
|
||||
Map operator[](int index) {
|
||||
if (index < 0 || index >= length)
|
||||
throw new RangeError.index(index, this);
|
||||
return wrap_jso(_blink.BlinkSQLResultSetRowList.instance.item_Callback_1_(unwrap_jso(this), index));
|
||||
return _nativeIndexedGetter(index);
|
||||
}
|
||||
|
||||
Map _nativeIndexedGetter(int index) => wrap_jso(_blink.BlinkSQLResultSetRowList.instance.item_Callback_1_(unwrap_jso(this), index));
|
||||
Map _nativeIndexedGetter(int index) => convertNativeToDart_Dictionary(_blink.BlinkSQLResultSetRowList.instance.item_Callback_1_(this, index));
|
||||
|
||||
void operator[]=(int index, Map value) {
|
||||
throw new UnsupportedError("Cannot assign element of immutable List.");
|
||||
|
@ -371,7 +328,7 @@ class SqlResultSetRowList extends DartHtmlDomObject with ListMixin<Map>, Immutab
|
|||
|
||||
@DomName('SQLResultSetRowList.item')
|
||||
@DocsEditable()
|
||||
Object item(int index) => wrap_jso(_blink.BlinkSQLResultSetRowList.instance.item_Callback_1_(unwrap_jso(this), index));
|
||||
Object item(int index) => convertNativeToDart_Dictionary(_blink.BlinkSQLResultSetRowList.instance.item_Callback_1_(this, index));
|
||||
|
||||
}
|
||||
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
||||
|
@ -392,35 +349,27 @@ class SqlTransaction extends DartHtmlDomObject {
|
|||
// To suppress missing implicit constructor warnings.
|
||||
factory SqlTransaction._() { throw new UnsupportedError("Not supported"); }
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static SqlTransaction internalCreateSqlTransaction() {
|
||||
return new SqlTransaction._internalWrap();
|
||||
}
|
||||
|
||||
factory SqlTransaction._internalWrap() {
|
||||
return new SqlTransaction.internal_();
|
||||
}
|
||||
@Deprecated("Internal Use Only")
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
SqlTransaction.internal_() { }
|
||||
|
||||
bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);
|
||||
int get hashCode => unwrap_jso(this).hashCode;
|
||||
|
||||
void executeSql(String sqlStatement, [List arguments, SqlStatementCallback callback, SqlStatementErrorCallback errorCallback]) {
|
||||
if (errorCallback != null) {
|
||||
_blink.BlinkSQLTransaction.instance.executeSql_Callback_4_(unwrap_jso(this), sqlStatement, arguments, unwrap_jso((transaction, resultSet) => callback(wrap_jso(transaction), wrap_jso(resultSet))), unwrap_jso((transaction, error) => errorCallback(wrap_jso(transaction), wrap_jso(error))));
|
||||
_blink.BlinkSQLTransaction.instance.executeSql_Callback_4_(this, sqlStatement, arguments, callback, errorCallback);
|
||||
return;
|
||||
}
|
||||
if (callback != null) {
|
||||
_blink.BlinkSQLTransaction.instance.executeSql_Callback_3_(unwrap_jso(this), sqlStatement, arguments, unwrap_jso((transaction, resultSet) => callback(wrap_jso(transaction), wrap_jso(resultSet))));
|
||||
_blink.BlinkSQLTransaction.instance.executeSql_Callback_3_(this, sqlStatement, arguments, callback);
|
||||
return;
|
||||
}
|
||||
if (arguments != null) {
|
||||
_blink.BlinkSQLTransaction.instance.executeSql_Callback_2_(unwrap_jso(this), sqlStatement, arguments);
|
||||
_blink.BlinkSQLTransaction.instance.executeSql_Callback_2_(this, sqlStatement, arguments);
|
||||
return;
|
||||
}
|
||||
_blink.BlinkSQLTransaction.instance.executeSql_Callback_1_(unwrap_jso(this), sqlStatement);
|
||||
_blink.BlinkSQLTransaction.instance.executeSql_Callback_1_(this, sqlStatement);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -299,19 +299,6 @@ WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-obje
|
|||
WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/t06: StaticWarning # Please triage this failure.
|
||||
LayoutTests/fast/dom/navigatorcontentutils/unregister-protocol-handler_t01: StaticWarning # Please triage this failure.
|
||||
|
||||
# Missing concrete implementation of setter 'XPathNSResolver.blink_jsObject' and getter 'XPathNSResolver.blink_jsObject'
|
||||
# TODO(terry): Dartium only because of implements instead of extends consider fixing by making blink_jsObject private
|
||||
# with private wrap_jso and unwrap_jso in each library that delegates to the public wrap/unwrap_jso.
|
||||
LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t02: StaticWarning # Please triage this failure.
|
||||
LayoutTests/fast/xpath/4XPath/Core/test_node_test_t01: StaticWarning # Please triage this failure.
|
||||
LayoutTests/fast/xpath/4XPath/Core/test_node_test_t02: StaticWarning # Please triage this failure.
|
||||
LayoutTests/fast/xpath/attr-namespace_t01: StaticWarning # Please triage this failure.
|
||||
LayoutTests/fast/xpath/attr-namespace_t02: StaticWarning # Please triage this failure.
|
||||
LayoutTests/fast/xpath/node-name-case-sensitivity_t01: StaticWarning # Please triage this failure.
|
||||
LayoutTests/fast/xpath/node-name-case-sensitivity_t02: StaticWarning # Please triage this failure.
|
||||
LayoutTests/fast/xpath/py-dom-xpath/data_t01: StaticWarning # Please triage this failure.
|
||||
LayoutTests/fast/svg/getbbox_t01: StaticWarning # Please triage this failure.
|
||||
|
||||
# co19 roll to Sep 29 2015 (3ed795ea02e022ef19c77cf1b6095b7c8f5584d0)
|
||||
Language/Classes/Abstract_Instance_Members/invocation_t03: MissingStaticWarning # Please triage this failure.
|
||||
Language/Classes/Abstract_Instance_Members/invocation_t04: MissingStaticWarning # Please triage this failure.
|
||||
|
|
|
@ -7,16 +7,11 @@ cross_frame_test: Skip # Test reloads itself. Issue 18558
|
|||
|
||||
[ $compiler == none && ($runtime == dartium || $runtime == drt) ]
|
||||
|
||||
js_array_test: Skip # Dartium JSInterop failure
|
||||
mirrors_js_typed_interop_test: Fail # Missing expected failure (Issue 25044)
|
||||
js_typed_interop_side_cast_exp_test: Fail, OK # tests dart2js-specific behavior.
|
||||
|
||||
cross_domain_iframe_test: RuntimeError # Dartium JSInterop failure
|
||||
indexeddb_2_test: Fail # Dartium JSInterop failure. Identity preservation on array deferred copy.
|
||||
js_test/transferrables: RuntimeError # Dartium JSInterop failure
|
||||
js_test/JsArray: RuntimeError # Dartium JSInterop failure
|
||||
native_gc_test: Skip # Dartium JSInterop failure
|
||||
transferables_test: RuntimeError # Dartium JSInterop failure
|
||||
|
||||
[ $compiler == none && ($runtime == drt || $runtime == dartium ) ]
|
||||
worker_api_test: Fail # Issue 10223
|
||||
|
|
|
@ -511,8 +511,10 @@ main() {
|
|||
|
||||
expect(descriptor.value, equals("a"));
|
||||
expect(descriptor.writable, isTrue);
|
||||
expect(descriptor.enumerable, isTrue);
|
||||
expect(descriptor.configurable, isTrue);
|
||||
// TODO(jacobr): commented out until https://github.com/dart-lang/sdk/issues/26128
|
||||
// is fixed.
|
||||
// expect(descriptor.enumerable, isTrue);
|
||||
// expect(descriptor.configurable, isTrue);
|
||||
|
||||
descriptor = getOwnPropertyDescriptor(list, "length");
|
||||
expect(descriptor.value, equals(2));
|
||||
|
|
|
@ -240,34 +240,31 @@ main() {
|
|||
expect(identical(c1, c2), isTrue);
|
||||
});
|
||||
|
||||
/*
|
||||
TODO(jacobr): enable this test when dartium supports maintaining proxy
|
||||
equality.
|
||||
|
||||
test('identical JS objects should have identical proxies', () {
|
||||
var o1 = new JsObject(context['Foo'], [1]);
|
||||
context['f1'] = o1;
|
||||
var o2 = context['f1'];
|
||||
expect(equals(o1, o2), isTrue);
|
||||
expect(identical(o1, o2), isTrue);
|
||||
});
|
||||
|
||||
/*
|
||||
TODO(jacobr): enable this test when dartium supports maintaining proxy
|
||||
equality.
|
||||
test('identical Dart objects should have identical proxies', () {
|
||||
var o1 = new TestDartObject();
|
||||
expect(context.callMethod('identical', [o1, o1]), isTrue);
|
||||
});
|
||||
|
||||
test('identical Dart functions should have identical proxies', () {
|
||||
var f1 = () => print("I'm a Function!");
|
||||
expect(context.callMethod('identical', [f1, f1]), isTrue);
|
||||
});
|
||||
*/
|
||||
|
||||
// TODO(jacobr): switch from equals to indentical when dartium supports
|
||||
// maintaining proxy equality.
|
||||
test('identical JS functions should have equal proxies', () {
|
||||
test('identical Dart functions should have identical proxies', () {
|
||||
var f1 = allowInterop(() => print("I'm a Function!"));
|
||||
expect(context.callMethod('identical', [f1, f1]), isTrue);
|
||||
});
|
||||
|
||||
test('identical JS functions should have identical proxies', () {
|
||||
var f1 = context['Object'];
|
||||
var f2 = context['Object'];
|
||||
expect(f1, equals(f2));
|
||||
expect(identical(f1, f2), isTrue);
|
||||
});
|
||||
|
||||
// TODO(justinfagnani): old tests duplicate checks above, remove
|
||||
|
@ -454,7 +451,7 @@ main() {
|
|||
expect(context['razzle'].apply([]), equals(42));
|
||||
});
|
||||
|
||||
test('JsFunction.apply on a function that uses "this"', () {
|
||||
test('JsFunction.apply on a function that uses this', () {
|
||||
var object = new Object();
|
||||
expect(context['returnThis'].apply([], thisArg: object), same(object));
|
||||
});
|
||||
|
@ -517,7 +514,7 @@ main() {
|
|||
test('pass Array to JS', () {
|
||||
context['a'] = [1, 2, 3];
|
||||
expect(context.callMethod('isPropertyInstanceOf',
|
||||
['a', context['Array']]), isFalse);
|
||||
['a', context['Array']]), isTrue);
|
||||
var a = context['a'];
|
||||
expect(a, new isInstanceOf<List>());
|
||||
expect(a, isNot(new isInstanceOf<JsArray>()));
|
||||
|
|
|
@ -18,7 +18,7 @@ main() {
|
|||
});
|
||||
|
||||
test("Access through dart:html", () {
|
||||
var dartPerformance = wrap_jso(js.context['performance']);
|
||||
var dartPerformance = js.JsNative.toTypedObject(js.context['performance']);
|
||||
var dartEntries = dartPerformance.getEntries();
|
||||
dartEntries.forEach((x) {
|
||||
expect(x is PerformanceEntry, isTrue);
|
||||
|
|
|
@ -9,7 +9,7 @@ execfile(os.path.join(path, 'src', 'dart', 'tools', 'deps', 'dartium.deps', 'DEP
|
|||
|
||||
vars.update({
|
||||
"dartium_chromium_commit": "b16942297fc65fd478c6f46afd1c3aaecde77009",
|
||||
"dartium_webkit_commit": "140b0cde50780b4d76d33260d3154946ca55ee08",
|
||||
"dartium_webkit_commit": "5da3130867ba3d07759388e4e5166facf6cf8f94",
|
||||
"chromium_base_revision": "338390",
|
||||
|
||||
# We use mirrors of all github repos to guarantee reproducibility and
|
||||
|
|
|
@ -16927,12 +16927,24 @@
|
|||
"blitFramebuffer": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"bufferByteData": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"bufferData": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"bufferDataTyped": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"bufferSubByteData": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"bufferSubData": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"bufferSubDataTyped": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"canvas": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
|
@ -17365,6 +17377,18 @@
|
|||
"texImage2D": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"texImage2DCanvas": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"texImage2DImage": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"texImage2DImageData": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"texImage2DVideo": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"texImage3D": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
|
@ -17383,6 +17407,18 @@
|
|||
"texSubImage2D": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"texSubImage2DCanvas": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"texSubImage2DImage": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"texSubImage2DImageData": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"texSubImage2DVideo": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
"texSubImage3D": {
|
||||
"support_level": "untriaged"
|
||||
},
|
||||
|
|
|
@ -154,7 +154,7 @@ $endif
|
|||
$if DARTIUM
|
||||
bool _hasProperty(String propertyName) =>
|
||||
$if JSINTEROP
|
||||
_blink.BlinkCSSStyleDeclaration.instance.$__propertyQuery___Callback_1_(unwrap_jso(this), propertyName) != null;
|
||||
_blink.BlinkCSSStyleDeclaration.instance.$__propertyQuery___Callback_1_(this, propertyName);
|
||||
$else
|
||||
_blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_1(this, propertyName);
|
||||
$endif
|
||||
|
|
|
@ -7,9 +7,85 @@
|
|||
"""Generates sdk/lib/_blink/dartium/_blink_dartium.dart file."""
|
||||
|
||||
import os
|
||||
|
||||
from sets import Set
|
||||
from generator import AnalyzeOperation, AnalyzeConstructor
|
||||
|
||||
# This is list of all methods with native c++ implementations
|
||||
# If performing a dartium merge, the best practice is to comment out this list,
|
||||
# ensure everything runs, and then uncomment this list which might possibly
|
||||
# introduce breaking changes due to changes to these method signatures.
|
||||
_js_custom_members = Set([
|
||||
'Document.createElement',
|
||||
'Element.id',
|
||||
'Element.tagName',
|
||||
'Element.className',
|
||||
'Element.setAttribute',
|
||||
'Element.getAttribute',
|
||||
# Consider adding this method so there is a fast path to access only
|
||||
# element children.
|
||||
# 'NonDocumentTypeChildNode.nextElementSibling',
|
||||
'Node.appendChild', # actually not removed, just native implementation.
|
||||
'Node.cloneNode',
|
||||
'Node.insertBefore',
|
||||
'Node.lastChild',
|
||||
'Node.firstChild',
|
||||
'Node.parentElement',
|
||||
'Node.parentNode',
|
||||
'Node.childNodes',
|
||||
'Node.removeChild',
|
||||
'Node.contains',
|
||||
'Node.nextSibling',
|
||||
'Node.previousSibling',
|
||||
'ChildNode.remove',
|
||||
'Document.createTextNode',
|
||||
'Window.location',
|
||||
'Location.href',
|
||||
'Node.querySelector',
|
||||
|
||||
'HTMLElement.hidden',
|
||||
'HTMLElement.style',
|
||||
'Element.attributes',
|
||||
'Window.innerWidth',
|
||||
|
||||
'NodeList.length',
|
||||
'NodeList.item',
|
||||
'ParentNode.children',
|
||||
'ParentNode.firstElementChild',
|
||||
'ParentNode.lastElementChild',
|
||||
'Event.target',
|
||||
'MouseEvent.clientY',
|
||||
'MouseEvent.clientX',
|
||||
|
||||
'Node.nodeType',
|
||||
'Node.textContent',
|
||||
|
||||
'HTMLCollection.length',
|
||||
'HTMLCollection.item',
|
||||
'Node.lastElementChild',
|
||||
'Node.firstElementChild',
|
||||
'HTMLElement_tabIndex',
|
||||
|
||||
'Element.clientWidth',
|
||||
'Element.clientHeight',
|
||||
'Document.body',
|
||||
'Element.removeAttribute',
|
||||
'Element.getBoundingClientRect',
|
||||
'CSSStyleDeclaration.getPropertyValue',
|
||||
'CSSStyleDeclaration.setProperty',
|
||||
'CSSStyleDeclaration.__propertyQuery__',
|
||||
|
||||
# TODO(jacobr): consider implementing these methods as well as they show
|
||||
# up in benchmarks for some sample applications.
|
||||
#'Document.createEvent',
|
||||
#'Document.initEvent',
|
||||
#'EventTarget.dispatchEvent',
|
||||
])
|
||||
|
||||
# Uncomment out this line to short circuited native methods and run all of
|
||||
# dart:html through JS interop except for createElement which is slightly more
|
||||
# tightly natively wired.
|
||||
# _js_custom_members = Set([])
|
||||
|
||||
HEADER = """/* Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
||||
* for details. All rights reserved. Use of this source code is governed by a
|
||||
* BSD-style license that can be found in the LICENSE file.
|
||||
|
@ -50,13 +126,14 @@ class Blink_Utils {
|
|||
|
||||
static register(document, tag, customType, extendsTagName) native "Utils_register";
|
||||
|
||||
static createElement(document, tagName) native "Utils_createElement";
|
||||
|
||||
static constructElement(element_type, jsObject) native "Utils_constructor_create";
|
||||
// Defines an interceptor if there is an appropriate JavaScript prototype to define it on.
|
||||
// In any case, returns a typed JS wrapper compatibile with dart:html and the new
|
||||
// typed JS Interop.
|
||||
static defineInterceptorCustomElement(jsObject, Type type) native "Utils_defineInterceptorCustomElement";
|
||||
static setInstanceInterceptor(o, Type type, {bool customElement: false}) native "Utils_setInstanceInterceptor";
|
||||
|
||||
// This method will throw if the element isn't actually a real Element.
|
||||
static initializeCustomElement(element) native "Utils_initializeCustomElement";
|
||||
|
||||
static changeElementWrapper(element, type) native "Utils_changeElementWrapper";
|
||||
}
|
||||
|
||||
class Blink_DOMWindowCrossFrame {
|
||||
|
@ -106,9 +183,63 @@ class Blink_DOMStringMap {
|
|||
}
|
||||
|
||||
// Calls through JsNative but returns DomException instead of error strings.
|
||||
class Stats {
|
||||
Stats(this.name) {
|
||||
counts = new Map<String, int>();
|
||||
}
|
||||
|
||||
String name;
|
||||
Map<String, int> counts;
|
||||
clear() {
|
||||
counts.clear();
|
||||
}
|
||||
|
||||
track(String v) {
|
||||
counts[v] = counts.putIfAbsent(v, ()=> 0) + 1;
|
||||
}
|
||||
toString() {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.write('================');
|
||||
sb.write('$name ${counts.length}');
|
||||
var keys = counts.keys.toList();
|
||||
keys.sort((a,b) => counts[b].compareTo(counts[a]));
|
||||
for (var key in keys) {
|
||||
print("$key => ${counts[key]}");
|
||||
}
|
||||
sb.write('---------------');
|
||||
sb.write('================');
|
||||
return sb;
|
||||
}
|
||||
}
|
||||
|
||||
bool TRACK_STATS = true;
|
||||
dumpStats() {
|
||||
print("------------ STATS ----------------");
|
||||
print(Blink_JsNative_DomException.getPropertyStats.toString());
|
||||
print(Blink_JsNative_DomException.setPropertyStats.toString());
|
||||
print(Blink_JsNative_DomException.callMethodStats.toString());
|
||||
print(Blink_JsNative_DomException.constructorStats.toString());
|
||||
print("-----------------------------------");
|
||||
}
|
||||
|
||||
clearStats() {
|
||||
Blink_JsNative_DomException.getPropertyStats.clear();
|
||||
Blink_JsNative_DomException.setPropertyStats.clear();
|
||||
Blink_JsNative_DomException.callMethodStats.clear();
|
||||
Blink_JsNative_DomException.constructorStats.clear();
|
||||
}
|
||||
|
||||
class Blink_JsNative_DomException {
|
||||
static getProperty(js.JsObject o, name) {
|
||||
static var getPropertyStats = new Stats('get property');
|
||||
static var setPropertyStats = new Stats('set property');
|
||||
static var callMethodStats = new Stats('call method');
|
||||
static var constructorStats = new Stats('constructor');
|
||||
|
||||
static var constructors = new Map<String, dynamic>();
|
||||
|
||||
static getProperty(o, String name) {
|
||||
try {
|
||||
if (TRACK_STATS) getPropertyStats.track(name);
|
||||
return js.JsNative.getProperty(o, name);
|
||||
} catch (e) {
|
||||
// Re-throw any errors (returned as a string) as a DomException.
|
||||
|
@ -116,8 +247,51 @@ class Blink_JsNative_DomException {
|
|||
}
|
||||
}
|
||||
|
||||
static callMethod(js.JsObject o, String method, List args) {
|
||||
static propertyQuery(o, String name) {
|
||||
try {
|
||||
if (TRACK_STATS) getPropertyStats.track('__propertyQuery__');
|
||||
return js.JsNative.getProperty(o, name);
|
||||
} catch (e) {
|
||||
// Re-throw any errors (returned as a string) as a DomException.
|
||||
throw new DomException.jsInterop(e);
|
||||
}
|
||||
}
|
||||
|
||||
static callConstructor0(String name) {
|
||||
try {
|
||||
if (TRACK_STATS) constructorStats.track(name);
|
||||
var constructor = constructors.putIfAbsent(name, () => js.context[name]);
|
||||
return js.JsNative.callConstructor0(constructor);
|
||||
} catch (e) {
|
||||
// Re-throw any errors (returned as a string) as a DomException.
|
||||
throw new DomException.jsInterop(e);
|
||||
}
|
||||
}
|
||||
|
||||
static callConstructor(String name, List args) {
|
||||
try {
|
||||
if (TRACK_STATS) constructorStats.track(name);
|
||||
var constructor = constructors.putIfAbsent(name, () => js.context[name]);
|
||||
return js.JsNative.callConstructor(constructor, args);
|
||||
} catch (e) {
|
||||
// Re-throw any errors (returned as a string) as a DomException.
|
||||
throw new DomException.jsInterop(e);
|
||||
}
|
||||
}
|
||||
|
||||
static setProperty(o, String name, value) {
|
||||
try {
|
||||
if (TRACK_STATS) setPropertyStats.track(name);
|
||||
return js.JsNative.setProperty(o, name, value);
|
||||
} catch (e) {
|
||||
// Re-throw any errors (returned as a string) as a DomException.
|
||||
throw new DomException.jsInterop(e);
|
||||
}
|
||||
}
|
||||
|
||||
static callMethod(o, String method, List args) {
|
||||
try {
|
||||
if (TRACK_STATS) callMethodStats.track(method);
|
||||
return js.JsNative.callMethod(o, method, args);
|
||||
} catch (e) {
|
||||
// Re-throw any errors (returned as a string) as a DomException.
|
||||
|
@ -137,38 +311,73 @@ CLASS_DEFINITION_EXTENDS = """class Blink%s extends Blink%s {
|
|||
"""
|
||||
|
||||
#(interface_name)
|
||||
CONSTRUCTOR_0 = ' constructorCallback_0_() => new js.JsObject(Blink_JsNative_DomException.getProperty(js.context, "%s"), []);\n\n'
|
||||
|
||||
#
|
||||
CONSTRUCTOR_0 = [' constructorCallback_0_()',
|
||||
' => Blink_JsNative_DomException.callConstructor0("%s");\n\n',
|
||||
' native "Blink_Constructor_%s";\n\n']
|
||||
|
||||
#(argument_count, arguments, interface_name, arguments)
|
||||
CONSTRUCTOR_ARGS = ' constructorCallback_%s_(%s) => new js.JsObject(Blink_JsNative_DomException.getProperty(js.context, "%s"), [%s]);\n\n'
|
||||
CONSTRUCTOR_ARGS = [' constructorCallback_%s_(%s)',
|
||||
' => Blink_JsNative_DomException.callConstructor("%s", [%s]);\n\n',
|
||||
' native "Blink_Constructor_Args_%s" /* %s */;\n\n']
|
||||
|
||||
#(attribute_name, attribute_name)
|
||||
ATTRIBUTE_GETTER = ' %s_Getter_(mthis) => Blink_JsNative_DomException.getProperty(mthis, "%s");\n\n'
|
||||
ATTRIBUTE_SETTER = ' %s_Setter_(mthis, __arg_0) => mthis["%s"] = __arg_0;\n\n'
|
||||
ATTRIBUTE_GETTER = [' %s_Getter_(mthis)',
|
||||
' => Blink_JsNative_DomException.getProperty(mthis /* %s */, "%s");\n\n',
|
||||
' native "Blink_Getter_%s_%s";\n\n'
|
||||
]
|
||||
|
||||
ATTRIBUTE_SETTER = [' %s_Setter_(mthis, __arg_0)',
|
||||
' => Blink_JsNative_DomException.setProperty(mthis /* %s */, "%s", __arg_0);\n\n',
|
||||
' native "Blink_Setter_%s_%s";\n\n'
|
||||
]
|
||||
|
||||
#(operation_name, operationName)
|
||||
OPERATION_0 = ' %s_Callback_0_(mthis) => Blink_JsNative_DomException.callMethod(mthis, "%s", []);\n\n'
|
||||
OPERATION_0 = [' %s_Callback_0_(mthis)',
|
||||
' => Blink_JsNative_DomException.callMethod(mthis /* %s */, "%s", []);\n\n',
|
||||
' native "Blink_Operation_0_%s_%s";\n\n'
|
||||
]
|
||||
|
||||
# getter, setter, deleter and propertyQuery code
|
||||
OPERATION_1 = ' $%s_Callback_1_(mthis, __arg_0) => Blink_JsNative_DomException.callMethod(mthis, "%s", [__arg_0]);\n\n'
|
||||
OPERATION_2 = ' $%s_Callback_2_(mthis, __arg_0, __arg_1) => Blink_JsNative_DomException.callMethod(mthis, "%s", [__arg_0, __arg_1]);\n\n'
|
||||
OPERATION_PQ = ' $%s_Callback_1_(mthis, __arg_0) => mthis[__arg_0];\n\n'
|
||||
OPERATION_1 = [' $%s_Callback_1_(mthis, __arg_0)',
|
||||
' => Blink_JsNative_DomException.callMethod(mthis /* %s */, "%s", [__arg_0]);\n\n',
|
||||
' native "Blink_Operation_1_%s_%s";\n\n'
|
||||
]
|
||||
|
||||
OPERATION_2 = [' $%s_Callback_2_(mthis, __arg_0, __arg_1)',
|
||||
' => Blink_JsNative_DomException.callMethod(mthis /* %s */, "%s", [__arg_0, __arg_1]);\n\n',
|
||||
' native "Blink_Operation_2_%s_%s";\n\n']
|
||||
|
||||
OPERATION_PQ = [' $%s_Callback_1_(mthis, __arg_0)',
|
||||
' => Blink_JsNative_DomException.propertyQuery(mthis, __arg_0); /* %s */ \n\n',
|
||||
' native "Blink_Operation_PQ_%s";\n\n']
|
||||
|
||||
#(operation_name, argument_count, arguments, operation_name, arguments)
|
||||
ARGUMENT_NUM = "__arg_%s"
|
||||
OPERATION_ARGS = ' %s_Callback_%s_(mthis, %s) => Blink_JsNative_DomException.callMethod(mthis, "%s", [%s]);\n\n'
|
||||
OPERATION_ARGS = [' %s_Callback_%s_(mthis, %s)',
|
||||
' => Blink_JsNative_DomException.callMethod(mthis /* %s */, "%s", [%s]);\n\n',
|
||||
' native "Blink_Operation_%s_%s"; /* %s */\n\n']
|
||||
|
||||
|
||||
|
||||
# get class property to make static call.
|
||||
CLASS_STATIC = 'Blink_JsNative_DomException.getProperty(js.context, "%s")'
|
||||
|
||||
# name, classname_getproperty, name
|
||||
STATIC_ATTRIBUTE_GETTER = ' %s_Getter_() => Blink_JsNative_DomException.getProperty(%s, "%s");\n\n'
|
||||
STATIC_ATTRIBUTE_GETTER = [' %s_Getter_()',
|
||||
' => Blink_JsNative_DomException.getProperty(%s /* %s */, "%s");\n\n',
|
||||
' /* %s */ native "Blink_Static_getter_%s_%s"']
|
||||
|
||||
# name, classname_getproperty, name
|
||||
STATIC_OPERATION_0 = ' %s_Callback_0_() => Blink_JsNative_DomException.callMethod(%s, "%s", []);\n\n'
|
||||
STATIC_OPERATION_0 = [' %s_Callback_0_()',
|
||||
' => Blink_JsNative_DomException.callMethod(%s /* %s */, "%s", []);\n\n',
|
||||
' /* %s */ native "Blink_Static_Operation_0_%s_%s']
|
||||
|
||||
# name, argsCount, args, classname_getproperty, name, args
|
||||
STATIC_OPERATION_ARGS = ' %s_Callback_%s_(%s) => Blink_JsNative_DomException.callMethod(%s, "%s", [%s]);\n\n'
|
||||
STATIC_OPERATION_ARGS = [' %s_Callback_%s_(%s)',
|
||||
' => Blink_JsNative_DomException.callMethod(%s /* %s */, "%s", [%s]);\n\n',
|
||||
' /* %s */ native "Blink_Static_Operations_%s_%s" /* %s */ \n\n']
|
||||
|
||||
CLASS_DEFINITION_END = """}
|
||||
|
||||
|
@ -197,6 +406,27 @@ constructor_renames = {
|
|||
def rename_constructor(name):
|
||||
return constructor_renames[name] if name in constructor_renames else name
|
||||
|
||||
|
||||
def _Find_Match(interface_id, member, member_prefix, candidates):
|
||||
member_name = interface_id + '.' + member
|
||||
if member_name in candidates:
|
||||
return member_name
|
||||
member_name = interface_id + '.' + member_prefix + member
|
||||
if member_name in candidates:
|
||||
return member_name
|
||||
member_name = interface_id + '.*'
|
||||
if member_name in candidates:
|
||||
return member_name
|
||||
|
||||
def _Is_Native(interface, member):
|
||||
return _Find_Match(interface, member, '', _js_custom_members)
|
||||
|
||||
def Select_Stub(template, is_native):
|
||||
if is_native:
|
||||
return template[0] + template[2]
|
||||
else:
|
||||
return template[0] + template[1]
|
||||
|
||||
def Generate_Blink(output_dir, database, type_registry):
|
||||
blink_filename = os.path.join(output_dir, '_blink_dartium.dart')
|
||||
blink_file = open(blink_filename, 'w')
|
||||
|
@ -226,7 +456,7 @@ def Generate_Blink(output_dir, database, type_registry):
|
|||
_Emit_Blink_Constructors(blink_file, analyzed_constructors)
|
||||
elif 'Constructor' in interface.ext_attrs:
|
||||
# Zero parameter constructor.
|
||||
blink_file.write(CONSTRUCTOR_0 % rename_constructor(name))
|
||||
blink_file.write(Select_Stub(CONSTRUCTOR_0, _Is_Native(name, 'constructor')) % rename_constructor(name))
|
||||
|
||||
_Process_Attributes(blink_file, interface, interface.attributes)
|
||||
_Process_Operations(blink_file, interface, interface.operations)
|
||||
|
@ -250,27 +480,29 @@ def _Emit_Blink_Constructors(blink_file, analyzed_constructors):
|
|||
|
||||
for callback_index in range(arg_min_count, arg_max_count):
|
||||
if callback_index == 0:
|
||||
blink_file.write(CONSTRUCTOR_0 % (rename_constructor(name)))
|
||||
blink_file.write(Select_Stub(CONSTRUCTOR_0, _Is_Native(name, 'constructor')) % (rename_constructor(name)))
|
||||
else:
|
||||
arguments = []
|
||||
for i in range(0, callback_index):
|
||||
arguments.append(ARGUMENT_NUM % i)
|
||||
argument_list = ', '.join(arguments)
|
||||
blink_file.write(CONSTRUCTOR_ARGS % (callback_index, argument_list, rename_constructor(name), argument_list))
|
||||
blink_file.write(
|
||||
Select_Stub(CONSTRUCTOR_ARGS, _Is_Native(name, 'constructor')) % (callback_index, argument_list, rename_constructor(name), argument_list))
|
||||
|
||||
def _Process_Attributes(blink_file, interface, attributes):
|
||||
# Emit an interface's attributes and operations.
|
||||
for attribute in sorted(attributes, ConstantOutputOrder):
|
||||
name = attribute.id
|
||||
is_native = _Is_Native(interface.id, name)
|
||||
if attribute.is_read_only:
|
||||
if attribute.is_static:
|
||||
class_property = CLASS_STATIC % interface.id
|
||||
blink_file.write(STATIC_ATTRIBUTE_GETTER % (name, class_property, name))
|
||||
blink_file.write(Select_Stub(STATIC_ATTRIBUTE_GETTER, is_native) % (name, class_property, interface.id, name))
|
||||
else:
|
||||
blink_file.write(ATTRIBUTE_GETTER % (name, name))
|
||||
blink_file.write(Select_Stub(ATTRIBUTE_GETTER, is_native) % (name, interface.id, name))
|
||||
else:
|
||||
blink_file.write(ATTRIBUTE_GETTER % (name, name))
|
||||
blink_file.write(ATTRIBUTE_SETTER % (name, name))
|
||||
blink_file.write(Select_Stub(ATTRIBUTE_GETTER, is_native) % (name, interface.id, name))
|
||||
blink_file.write(Select_Stub(ATTRIBUTE_SETTER, is_native) % (name, interface.id, name))
|
||||
|
||||
def _Process_Operations(blink_file, interface, operations):
|
||||
analyzeOperations = []
|
||||
|
@ -292,6 +524,7 @@ def _Emit_Blink_Operation(blink_file, interface, analyzeOperations):
|
|||
analyzed = AnalyzeOperation(interface, analyzeOperations)
|
||||
(arg_min_count, arg_max_count) = generate_parameter_entries(analyzed.param_infos)
|
||||
name = analyzed.js_name
|
||||
is_native = _Is_Native(interface.id, name)
|
||||
|
||||
operation = analyzeOperations[0]
|
||||
if (name.startswith('__') and \
|
||||
|
@ -299,13 +532,13 @@ def _Emit_Blink_Operation(blink_file, interface, analyzeOperations):
|
|||
'setter' in operation.specials or \
|
||||
'deleter' in operation.specials)):
|
||||
if name == '__propertyQuery__':
|
||||
blink_file.write(OPERATION_PQ % (name))
|
||||
blink_file.write(Select_Stub(OPERATION_PQ, is_native) % (name, interface.id))
|
||||
else:
|
||||
arg_min_count = arg_max_count
|
||||
if arg_max_count == 2:
|
||||
blink_file.write(OPERATION_1 % (name, name))
|
||||
blink_file.write(Select_Stub(OPERATION_1, is_native) % (name, interface.id, name))
|
||||
elif arg_max_count == 3:
|
||||
blink_file.write(OPERATION_2 % (name, name))
|
||||
blink_file.write(Select_Stub(OPERATION_2, is_native) % (name, interface.id, name))
|
||||
else:
|
||||
print "FATAL ERROR: _blink emitter operator %s.%s" % (interface.id, name)
|
||||
exit
|
||||
|
@ -316,9 +549,9 @@ def _Emit_Blink_Operation(blink_file, interface, analyzeOperations):
|
|||
if callback_index == 0:
|
||||
if operation.is_static:
|
||||
class_property = CLASS_STATIC % interface.id
|
||||
blink_file.write(STATIC_OPERATION_0 % (name, class_property, name))
|
||||
blink_file.write(Select_Stub(STATIC_OPERATION_0, is_native) % (name, class_property, interface.id, name))
|
||||
else:
|
||||
blink_file.write(OPERATION_0 % (name, name))
|
||||
blink_file.write(Select_Stub(OPERATION_0, is_native) % (name, interface.id, name))
|
||||
else:
|
||||
arguments = []
|
||||
for i in range(0, callback_index):
|
||||
|
@ -326,6 +559,6 @@ def _Emit_Blink_Operation(blink_file, interface, analyzeOperations):
|
|||
argument_list = ', '.join(arguments)
|
||||
if operation.is_static:
|
||||
class_property = CLASS_STATIC % interface.id
|
||||
blink_file.write(STATIC_OPERATION_ARGS % (name, callback_index, argument_list, class_property, name, argument_list))
|
||||
blink_file.write(Select_Stub(STATIC_OPERATION_ARGS, is_native) % (name, callback_index, argument_list, class_property, interface.id, name, argument_list))
|
||||
else:
|
||||
blink_file.write(OPERATION_ARGS % (name, callback_index, argument_list, name, argument_list))
|
||||
blink_file.write(Select_Stub(OPERATION_ARGS, is_native) % (name, callback_index, argument_list, interface.id, name, argument_list))
|
||||
|
|
|
@ -543,29 +543,28 @@ class OperationInfo(object):
|
|||
type_id = p.type_id
|
||||
# Unwrap the type to get the JsObject if Type is:
|
||||
#
|
||||
# - known IDL type
|
||||
# - type_id is None then it's probably a union type or overloaded
|
||||
# it's a dynamic/any type
|
||||
# - type is Object
|
||||
#
|
||||
# JsObject maybe stored in the Dart class.
|
||||
if (wrap_unwrap_type_blink(type_id, type_registry)):
|
||||
type_is_callback = self.isCallback(type_registry, type_id)
|
||||
if (dart_js_interop and type_id == 'EventListener' and
|
||||
self.name in ['addEventListener', 'removeEventListener']):
|
||||
# Events fired need use a JsFunction not a anonymous closure to
|
||||
# Events fired need use a JSFunction not a anonymous closure to
|
||||
# insure the event can really be removed.
|
||||
parameters.append('unwrap_jso(js.allowInterop(%s))' % p.name)
|
||||
elif dart_js_interop and type_id == 'FontFaceSetForEachCallback':
|
||||
parameters.append('js.allowInterop(%s)' % p.name)
|
||||
# These commented out cases don't actually generate any code.
|
||||
# elif dart_js_interop and type_id == 'FontFaceSetForEachCallback':
|
||||
# forEach is supported in the DOM for FontFaceSet as it iterates
|
||||
# over the Javascript Object the callback parameters are also
|
||||
# Javascript objects and must be wrapped.
|
||||
parameters.append('unwrap_jso((fontFace, fontFaceAgain, set) => %s(wrap_jso(fontFace), wrap_jso(fontFaceAgain), wrap_jso(set)))' % p.name)
|
||||
elif dart_js_interop and type_id == 'HeadersForEachCallback':
|
||||
# parameters.append('(fontFace, fontFaceAgain, set) => %s(fontFace, fontFaceAgain, wrap_jso(set))' % p.name)
|
||||
# elif dart_js_interop and type_id == 'HeadersForEachCallback':
|
||||
# forEach is supported in the DOM for Headers as it iterates
|
||||
# over the Javascript Object the callback parameters are also
|
||||
# Javascript objects and must be wrapped.
|
||||
parameters.append('unwrap_jso((String value, String key, map) => %s(value, key, wrap_jso(map)))' % p.name)
|
||||
# parameters.append('(String value, String key, map) => %s(value, key, wrap_jso(map))' % p.name)
|
||||
elif dart_js_interop and type_is_callback and not(isRemoveOperation):
|
||||
# Any remove operation that has a a callback doesn't need wrapping.
|
||||
# TODO(terry): Kind of hacky but handles all the cases we care about
|
||||
|
@ -579,15 +578,15 @@ class OperationInfo(object):
|
|||
dart_type = type_registry.DartType(callback_arg.type.id) + ' '
|
||||
callback_args_decl.append('%s%s' % (dart_type, callback_arg.id))
|
||||
if wrap_unwrap_type_blink(callback_arg.type.id, type_registry):
|
||||
callback_args_call.append('wrap_jso(%s)' % callback_arg.id)
|
||||
callback_args_call.append(callback_arg.id)
|
||||
else:
|
||||
callback_args_call.append(callback_arg.id)
|
||||
parameters.append('unwrap_jso((%s) => %s(%s))' %
|
||||
parameters.append('(%s) => %s(%s)' %
|
||||
(", ".join(callback_args_decl),
|
||||
p.name,
|
||||
", ".join(callback_args_call)))
|
||||
else:
|
||||
parameters.append('unwrap_jso(%s)' % p.name)
|
||||
parameters.append(p.name)
|
||||
else:
|
||||
if dart_js_interop:
|
||||
conversion = backend._InputConversion(p.type_id, self.declared_name)
|
||||
|
@ -1495,6 +1494,8 @@ def get_list_type(return_type):
|
|||
# Get the list type NNNN inside of List<NNNN>
|
||||
return return_type[5:-1] if isList(return_type) else return_type
|
||||
|
||||
# TODO(jacobr): remove these obsolete methods as we don't actually
|
||||
# perform any wrapping.
|
||||
def wrap_unwrap_list_blink(return_type, type_registry):
|
||||
"""Return True if the type is the list type is a blink know
|
||||
type e.g., List<Node>, List<FontFace>, etc."""
|
||||
|
@ -1508,14 +1509,9 @@ def wrap_unwrap_type_blink(return_type, type_registry):
|
|||
unwrap_jso"""
|
||||
if return_type and return_type.startswith('Html'):
|
||||
return_type = return_type.replace('Html', 'HTML', 1)
|
||||
return (type_registry.HasInterface(return_type) or not(return_type) or
|
||||
return (not(return_type) or
|
||||
return_type == 'Object' or
|
||||
return_type == 'dynamic' or
|
||||
return_type == 'Future' or
|
||||
return_type == 'SqlDatabase' or # renamed to Database
|
||||
return_type == 'HTMLElement' or
|
||||
return_type == 'MutationObserver' or
|
||||
(return_type.endswith('[]') and return_type != 'DOMString[]'))
|
||||
return_type == 'dynamic')
|
||||
|
||||
def wrap_type_blink(return_type, type_registry):
|
||||
"""Returns True if the type is a blink type that requires wrap_jso but
|
||||
|
|
|
@ -626,7 +626,7 @@ class HtmlDartGenerator(object):
|
|||
(factory_params, converted_arguments) = self._ConvertArgumentTypes(
|
||||
stmts_emitter, arguments, argument_count, constructor_info)
|
||||
args = ', '.join(converted_arguments)
|
||||
call_template = 'wrap_jso($FACTORY_NAME($FACTORY_PARAMS))'
|
||||
call_template = '$FACTORY_NAME($FACTORY_PARAMS)'
|
||||
else:
|
||||
qualified_name = emitter.Format(
|
||||
'$FACTORY.$NAME',
|
||||
|
|
|
@ -586,7 +586,7 @@ class HtmlDartInterfaceGenerator(object):
|
|||
class_modifiers = ''
|
||||
else:
|
||||
# For Dartium w/ JsInterop these suppressed interfaces are needed to
|
||||
# instanciate the internal classes when wrap_jso is called for a JS object.
|
||||
# instanciate the internal classes.
|
||||
if (self._renamer.ShouldSuppressInterface(self._interface) and
|
||||
not(isinstance(self._backend, Dart2JSBackend)) and
|
||||
self._options.dart_js_interop):
|
||||
|
@ -600,21 +600,10 @@ class HtmlDartInterfaceGenerator(object):
|
|||
|
||||
class_name = self._interface_type_info.implementation_name()
|
||||
|
||||
js_interop_equivalence_op = \
|
||||
' bool operator ==(other) => unwrap_jso(other) == unwrap_jso(this) || identical(this, other);\n' \
|
||||
+ ' int get hashCode => unwrap_jso(this).hashCode;\n'
|
||||
# ClientRect overrides the equivalence operator.
|
||||
if interface_name == 'ClientRect' or interface_name == 'DomRectReadOnly':
|
||||
js_interop_equivalence_op = ''
|
||||
|
||||
js_interop_wrapper = '''
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
static {0} internalCreate{0}() {{
|
||||
return new {0}._internalWrap();
|
||||
}}
|
||||
|
||||
external factory {0}._internalWrap();
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
{0}.internal_() : super.internal_();
|
||||
|
@ -622,19 +611,13 @@ class HtmlDartInterfaceGenerator(object):
|
|||
'''.format(class_name)
|
||||
if base_class == 'NativeFieldWrapperClass2' or base_class == 'DartHtmlDomObject':
|
||||
js_interop_wrapper = '''
|
||||
@Deprecated("Internal Use Only")
|
||||
static {0} internalCreate{0}() {{
|
||||
return new {0}._internalWrap();
|
||||
}}
|
||||
|
||||
factory {0}._internalWrap() {{
|
||||
return new {0}.internal_();
|
||||
}}
|
||||
@Deprecated("Internal Use Only")
|
||||
external static Type get instanceRuntimeType;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
{0}.internal_() {{ }}
|
||||
|
||||
{1}'''.format(class_name, js_interop_equivalence_op)
|
||||
'''.format(class_name)
|
||||
# Change to use the synthesized class so we can construct with a mixin
|
||||
# classes prefixed with name of NativeFieldWrapperClass2 don't have a
|
||||
# default constructor so classes with mixins can't be new'd.
|
||||
|
@ -1285,13 +1268,9 @@ class DartLibrary():
|
|||
emitters = library_emitter.Emit(
|
||||
self._template, AUXILIARY_DIR=massage_path(auxiliary_dir))
|
||||
if isinstance(emitters, tuple):
|
||||
if self._dart_js_interop:
|
||||
imports_emitter, map_emitter, function_emitter = emitters
|
||||
else:
|
||||
imports_emitter, map_emitter = emitters
|
||||
function_emitter = None
|
||||
else:
|
||||
imports_emitter, map_emitter, function_emitter = emitters, None, None
|
||||
imports_emitter, map_emitter = emitters, None
|
||||
|
||||
for path in sorted(self._paths):
|
||||
relpath = os.path.relpath(path, library_file_dir)
|
||||
|
@ -1304,26 +1283,10 @@ class DartLibrary():
|
|||
items.sort()
|
||||
for (idl_name, dart_name) in items:
|
||||
map_emitter.Emit(
|
||||
" '$IDL_NAME': () => $DART_NAME,\n",
|
||||
" '$IDL_NAME': () => $DART_NAME.instanceRuntimeType,\n",
|
||||
IDL_NAME=idl_name,
|
||||
DART_NAME=dart_name)
|
||||
|
||||
# Emit the $!TYPE_FUNCTION_MAP
|
||||
if function_emitter:
|
||||
items = self._typeMap.items()
|
||||
items.sort()
|
||||
for (idl_name, dart_name) in items:
|
||||
# DOMStringMap is in the abstract list but is used as a concrete class
|
||||
# in Dartium.
|
||||
if not IsPureInterface(idl_name):
|
||||
# Handle classes that are concrete (abstract can't be instantiated).
|
||||
function_emitter.Emit(
|
||||
" '$IDL_NAME': () => $DART_NAME.internalCreate$DART_NAME,\n",
|
||||
IDL_NAME=idl_name,
|
||||
DART_NAME=dart_name)
|
||||
if self._dart_path.endswith('html_dartium.dart'):
|
||||
function_emitter.Emit(" 'polymer-element': () => HtmlElement.internalCreateHtmlElement,\n")
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -22,6 +22,8 @@ _url_utils = ['hash', 'host', 'hostname', 'origin',
|
|||
'password', 'pathname', 'port', 'protocol',
|
||||
'search', 'username']
|
||||
|
||||
_promise_to_future = Conversion('convertNativePromiseToDartFuture', 'dynamic', 'Future')
|
||||
|
||||
def array_type(data_type):
|
||||
matched = re.match(r'([\w\d_\s]+)\[\]', data_type)
|
||||
if not matched:
|
||||
|
@ -108,6 +110,16 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
def CustomJSMembers(self):
|
||||
return {}
|
||||
|
||||
def _OutputConversion(self, idl_type, member):
|
||||
conversion = FindConversion(idl_type, 'get', self._interface.id, member)
|
||||
# TODO(jacobr) handle promise consistently in dart2js and dartium.
|
||||
if idl_type == 'Promise':
|
||||
return _promise_to_future
|
||||
if conversion:
|
||||
if conversion.function_name in ('_convertNativeToDart_Window', '_convertNativeToDart_EventTarget', 'convertNativeToDart_DateTime', 'convertNativeToDart_ImageData'):
|
||||
return None
|
||||
return conversion
|
||||
|
||||
def _InputConversion(self, idl_type, member):
|
||||
return FindConversion(idl_type, 'set', self._interface.id, member)
|
||||
|
||||
|
@ -250,7 +262,7 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
self._members_emitter.Emit(
|
||||
'\n @DocsEditable()\n'
|
||||
' static $INTERFACE_NAME $FACTORY_METHOD_NAME($PARAMETERS) => '
|
||||
'wrap_jso($TOPLEVEL_NAME($OUTPARAMETERS));\n',
|
||||
'$TOPLEVEL_NAME($OUTPARAMETERS);\n',
|
||||
INTERFACE_NAME=self._interface_type_info.interface_name(),
|
||||
FACTORY_METHOD_NAME=factory_method_name,
|
||||
PARAMETERS=typed_formals,
|
||||
|
@ -272,7 +284,7 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
self._interface, self._interface.id, ' ')
|
||||
|
||||
self._members_emitter.Emit(
|
||||
'\n $(ANNOTATIONS)factory $CTOR($PARAMS) => wrap_jso(_create($FACTORY_PARAMS));\n',
|
||||
'\n $(ANNOTATIONS)factory $CTOR($PARAMS) => _create($FACTORY_PARAMS);\n',
|
||||
ANNOTATIONS=annotations,
|
||||
CTOR=constructor_info._ConstructorFullName(self._DartType),
|
||||
PARAMS=constructor_info.ParametersAsDeclaration(self._DartType),
|
||||
|
@ -536,7 +548,7 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
# JsObject maybe stored in the Dart class.
|
||||
return_wrap_jso = wrap_return_type_blink(return_type, attr.type.id, self._type_registry)
|
||||
wrap_unwrap_list.append(return_wrap_jso) # wrap_jso the returned object
|
||||
wrap_unwrap_list.append(self._dart_use_blink) # this must be unwrap_jso
|
||||
wrap_unwrap_list.append(self._dart_use_blink)
|
||||
|
||||
# This seems to have been replaced with Custom=Getter (see above), but
|
||||
# check to be sure we don't see the old syntax
|
||||
|
@ -545,10 +557,13 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
auto_scope_setup = self._GenerateAutoSetupScope(attr.id, native_suffix)
|
||||
native_entry = \
|
||||
self.DeriveNativeEntry(attr.id, 'Getter', None)
|
||||
output_conversion = self._OutputConversion(attr.type.id, attr.id)
|
||||
|
||||
cpp_callback_name = self._GenerateNativeBinding(attr.id, 1,
|
||||
dart_declaration, attr.is_static, return_type, parameters,
|
||||
native_suffix, is_custom, auto_scope_setup, native_entry=native_entry,
|
||||
wrap_unwrap_list=wrap_unwrap_list, dictionary_return=dictionary_returned)
|
||||
wrap_unwrap_list=wrap_unwrap_list, dictionary_return=dictionary_returned,
|
||||
output_conversion=output_conversion)
|
||||
if is_custom:
|
||||
return
|
||||
|
||||
|
@ -583,9 +598,7 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
|
||||
# Is the setter value a DartClass (that has a JsObject) or the type is
|
||||
# None (it's a dynamic/any type) then unwrap_jso before passing to blink.
|
||||
parameters = ['unwrap_jso(value)' if (isinstance(type_info, InterfaceIDLTypeInfo) or
|
||||
not(attr.type.id) or ptype == 'Object')
|
||||
else 'value']
|
||||
parameters = ['value']
|
||||
|
||||
dart_declaration = 'set %s(%s value)' % (html_name, ptype)
|
||||
is_custom = _IsCustom(attr) and (_IsCustomValue(attr, None) or
|
||||
|
@ -651,6 +664,12 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
self._EmitExplicitIndexedGetter(dart_element_type)
|
||||
else:
|
||||
is_custom = any((op.id == 'item' and _IsCustom(op)) for op in self._interface.operations)
|
||||
|
||||
output_conversion = self._OutputConversion(element_type, 'item')
|
||||
conversion_name = ''
|
||||
if output_conversion:
|
||||
conversion_name = output_conversion.function_name
|
||||
|
||||
# First emit a toplevel function to do the native call
|
||||
# Calls to this are emitted elsewhere,
|
||||
dart_native_name, resolver_string = \
|
||||
|
@ -663,40 +682,22 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
dart_native_name)
|
||||
|
||||
type_info = self._TypeInfo(element_type)
|
||||
# Does nativeIndexGetter return a DartClass (JsObject) if so wrap_jso.
|
||||
wrap_jso_start = ''
|
||||
wrap_jso_end = ''
|
||||
if (isinstance(type_info, InterfaceIDLTypeInfo) or
|
||||
wrap_type_blink(type_info.narrow_dart_type(), self._type_registry)):
|
||||
wrap_jso_start = 'wrap_jso('
|
||||
wrap_jso_end = ')'
|
||||
blinkNativeIndexed = """
|
||||
$TYPE operator[](int index) {
|
||||
if (index < 0 || index >= length)
|
||||
throw new RangeError.index(index, this);
|
||||
return %s$(DART_NATIVE_NAME)(unwrap_jso(this), index)%s;
|
||||
return _nativeIndexedGetter(index);
|
||||
}
|
||||
|
||||
$TYPE _nativeIndexedGetter(int index) => %s$(DART_NATIVE_NAME)(unwrap_jso(this), index)%s;
|
||||
""" % (wrap_jso_start, wrap_jso_end, wrap_jso_start, wrap_jso_end)
|
||||
# Wrap the type to store the JsObject if Type is:
|
||||
#
|
||||
# - known IDL type
|
||||
# - type_id is None then it's probably a union type or overloaded
|
||||
# it's a dynamic/any type
|
||||
# - type is Object
|
||||
#
|
||||
# JsObject maybe stored in the Dart class.
|
||||
if isinstance(type_info, InterfaceIDLTypeInfo) or not(type_info) or dart_element_type == 'Object':
|
||||
$TYPE _nativeIndexedGetter(int index) => $(CONVERSION_NAME)($(DART_NATIVE_NAME)(this, index));
|
||||
"""
|
||||
blinkNativeIndexedGetter = \
|
||||
' {0}$(DART_NATIVE_NAME)(unwrap_jso(this), index){1};\n'.format('wrap_jso(', ')')
|
||||
else:
|
||||
blinkNativeIndexedGetter = \
|
||||
' $(DART_NATIVE_NAME)(unwrap_jso(this), index);\n'
|
||||
' $(DART_NATIVE_NAME)(this, index);\n'
|
||||
self._members_emitter.Emit(blinkNativeIndexed,
|
||||
DART_NATIVE_NAME=dart_qualified_name,
|
||||
TYPE=self.SecureOutputType(element_type),
|
||||
INTERFACE=self._interface.id)
|
||||
INTERFACE=self._interface.id,
|
||||
CONVERSION_NAME=conversion_name)
|
||||
|
||||
if self._HasNativeIndexSetter():
|
||||
self._EmitNativeIndexSetter(dart_element_type)
|
||||
|
@ -798,6 +799,8 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
|
||||
operation = info.operations[0]
|
||||
|
||||
output_conversion = self._OutputConversion(operation.type.id, operation.id)
|
||||
|
||||
dictionary_returned = False
|
||||
# Return type for dictionary is any (untyped).
|
||||
if operation.type.id == 'Dictionary':
|
||||
|
@ -821,20 +824,14 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
if self._dart_use_blink:
|
||||
# Wrap the type to store the JsObject if Type is:
|
||||
#
|
||||
# - known IDL type
|
||||
# - type_id is None then it's probably a union type or overloaded
|
||||
# it's a dynamic/any type
|
||||
# - type is Object
|
||||
#
|
||||
# JsObject maybe stored in the Dart class.
|
||||
return_wrap_jso = wrap_return_type_blink(return_type, info.type_name, self._type_registry)
|
||||
return_type_info = self._type_registry.TypeInfo(info.type_name)
|
||||
if (isinstance(return_type_info, SequenceIDLTypeInfo) and
|
||||
not isinstance(return_type_info._item_info, PrimitiveIDLTypeInfo)):
|
||||
return_wrap_jso = True
|
||||
# wrap_jso the returned object
|
||||
wrap_unwrap_list.append(return_wrap_jso)
|
||||
# The 'this' parameter must be unwrap_jso
|
||||
wrap_unwrap_list.append(self._dart_use_blink)
|
||||
|
||||
if info.callback_args:
|
||||
|
@ -852,7 +849,8 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
native_suffix, is_custom, auto_scope_setup,
|
||||
native_entry=native_entry,
|
||||
wrap_unwrap_list=wrap_unwrap_list,
|
||||
dictionary_return=dictionary_returned)
|
||||
dictionary_return=dictionary_returned,
|
||||
output_conversion=output_conversion)
|
||||
if not is_custom:
|
||||
self._GenerateOperationNativeCallback(operation, operation.arguments, cpp_callback_name, auto_scope_setup)
|
||||
else:
|
||||
|
@ -880,7 +878,7 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
base_name = '_%s_%s' % (operation.id, version)
|
||||
static = True
|
||||
if not operation.is_static:
|
||||
actuals = ['unwrap_jso(this)' if self._dart_use_blink else 'this'] + actuals
|
||||
actuals = ['this'] + actuals
|
||||
formals = ['mthis'] + formals
|
||||
actuals_s = ", ".join(actuals)
|
||||
formals_s = ", ".join(formals)
|
||||
|
@ -892,9 +890,6 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
overload_name = \
|
||||
self.DeriveQualifiedBlinkName(self._interface.id,
|
||||
overload_base_name)
|
||||
if return_wrap_jso:
|
||||
call_emitter.Emit('wrap_jso($NAME($ARGS))', NAME=overload_name, ARGS=actuals_s)
|
||||
else:
|
||||
call_emitter.Emit('$NAME($ARGS)', NAME=overload_name, ARGS=actuals_s)
|
||||
auto_scope_setup = \
|
||||
self._GenerateAutoSetupScope(base_name, native_suffix)
|
||||
|
@ -927,7 +922,7 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
def _GenerateNativeBinding(self, idl_name, argument_count, dart_declaration,
|
||||
static, return_type, parameters, native_suffix, is_custom,
|
||||
auto_scope_setup=True, emit_metadata=True, emit_to_native=False,
|
||||
native_entry=None, wrap_unwrap_list=[], dictionary_return=False):
|
||||
native_entry=None, wrap_unwrap_list=[], dictionary_return=False, output_conversion=None):
|
||||
metadata = []
|
||||
if emit_metadata:
|
||||
metadata = self._metadata.GetFormattedMetadata(
|
||||
|
@ -946,9 +941,6 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
|
||||
if not static:
|
||||
formals = ", ".join(['mthis'] + parameters)
|
||||
if wrap_unwrap_list and wrap_unwrap_list[1]:
|
||||
actuals = ", ".join(['unwrap_jso(this)'] + parameters)
|
||||
else:
|
||||
actuals = ", ".join(['this'] + parameters)
|
||||
else:
|
||||
formals = ", ".join(parameters)
|
||||
|
@ -969,11 +961,17 @@ class DartiumBackend(HtmlDartGenerator):
|
|||
emit_template = '''
|
||||
$METADATA$DART_DECLARATION => $DART_NAME($ACTUALS);
|
||||
'''
|
||||
if wrap_unwrap_list and wrap_unwrap_list[0]:
|
||||
if output_conversion and not dictionary_return:
|
||||
conversion_template = '''
|
||||
$METADATA$DART_DECLARATION => %s($DART_NAME($ACTUALS));
|
||||
'''
|
||||
emit_template = conversion_template % output_conversion.function_name
|
||||
|
||||
elif wrap_unwrap_list and wrap_unwrap_list[0]:
|
||||
if return_type == 'Rectangle':
|
||||
jso_util_method = 'make_dart_rectangle'
|
||||
elif wrap_unwrap_list[0]:
|
||||
jso_util_method = 'wrap_jso'
|
||||
jso_util_method = ''
|
||||
|
||||
if dictionary_return:
|
||||
emit_jso_template = '''
|
||||
|
|
|
@ -29,40 +29,11 @@ class _VMElementUpgrader implements ElementUpgrader {
|
|||
}
|
||||
|
||||
Element upgrade(element) {
|
||||
var jsObject;
|
||||
var tag;
|
||||
var isNativeElementExtension = false;
|
||||
|
||||
try {
|
||||
tag = _getCustomElementName(element);
|
||||
} catch (e) {
|
||||
isNativeElementExtension = element.localName == _extendsTag;
|
||||
// Only exact type matches are supported- cannot be a subclass.
|
||||
if (element.runtimeType != _nativeType) {
|
||||
throw new ArgumentError('element is not subclass of $_nativeType');
|
||||
}
|
||||
|
||||
if (element.runtimeType == HtmlElement || element.runtimeType == TemplateElement) {
|
||||
if (tag != _extendsTag) {
|
||||
throw new UnsupportedError('$tag is not registered.');
|
||||
}
|
||||
jsObject = unwrap_jso(element);
|
||||
} else if (element.runtimeType == js.JsObject) {
|
||||
// It's a Polymer core element (written in JS).
|
||||
jsObject = element;
|
||||
} else if (isNativeElementExtension) {
|
||||
// Extending a native element.
|
||||
jsObject = element.blink_jsObject;
|
||||
|
||||
// Element to extend is the real tag.
|
||||
tag = element.localName;
|
||||
} else if (tag != null && element.localName != tag) {
|
||||
throw new UnsupportedError('Element is incorrect type. Got ${element.runtimeType}, expected native Html or Svg element to extend.');
|
||||
} else if (tag == null) {
|
||||
throw new UnsupportedError('Element is incorrect type. Got ${element.runtimeType}, expected HtmlElement/JsObject.');
|
||||
}
|
||||
|
||||
// Remember Dart class to tagName for any upgrading done in wrap_jso.
|
||||
addCustomElementType(tag, _type, _extendsTag);
|
||||
|
||||
return _createCustomUpgrader(_type, jsObject);
|
||||
return _createCustomUpgrader(_type, element);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -30,13 +30,7 @@ part of html;
|
|||
@Experimental()
|
||||
class KeyEvent extends _WrappedEvent implements KeyboardEvent {
|
||||
/** Needed because KeyboardEvent is implements.
|
||||
* TODO(terry): Consider making blink_jsObject private (add underscore) for
|
||||
* all blink_jsObject. Then needed private wrap/unwrap_jso
|
||||
* functions that delegate to a public wrap/unwrap_jso.
|
||||
*/
|
||||
@Deprecated("Internal Use Only")
|
||||
js.JsObject blink_jsObject;
|
||||
|
||||
/** The parent KeyboardEvent that this KeyEvent is wrapping and "fixing". */
|
||||
KeyboardEvent _parent;
|
||||
|
||||
|
|
|
@ -6,15 +6,14 @@ part of dart.html;
|
|||
|
||||
/**
|
||||
* Helper class to implement custom events which wrap DOM events.
|
||||
* TODO(jacobr): consider using dart JsNative.$setInstanceInterceptor
|
||||
* instead of using wrappers as that would allow passing these wrappers
|
||||
* back through dispatchEvent unlike the current implementation.
|
||||
* See https://github.com/dart-lang/sdk/issues/16869
|
||||
*/
|
||||
class _WrappedEvent implements Event {
|
||||
/** Needed because KeyboardEvent is implements.
|
||||
* TODO(terry): Consider making blink_jsObject private (add underscore) for
|
||||
* all blink_jsObject. Then needed private wrap/unwrap_jso
|
||||
* functions that delegate to a public wrap/unwrap_jso.
|
||||
*/
|
||||
js.JsObject blink_jsObject;
|
||||
|
||||
final Event wrapped;
|
||||
|
||||
/** The CSS selector involved with event delegation. */
|
||||
|
|
|
@ -124,8 +124,6 @@ class _Utils {
|
|||
}
|
||||
}
|
||||
|
||||
static maybeUnwrapJso(obj) => unwrap_jso(obj);
|
||||
|
||||
static List convertToList(List list) {
|
||||
// FIXME: [possible optimization]: do not copy the array if Dart_IsArray is fine w/ it.
|
||||
final length = list.length;
|
||||
|
@ -189,15 +187,14 @@ class _Utils {
|
|||
return element;
|
||||
}
|
||||
|
||||
static window() => wrap_jso(js.context['window']);
|
||||
|
||||
static forwardingPrint(String message) => _blink.Blink_Utils.forwardingPrint(message);
|
||||
static void spawnDomHelper(Function f, int replyTo) =>
|
||||
_blink.Blink_Utils.spawnDomHelper(f, replyTo);
|
||||
|
||||
// TODO(vsm): Make this API compatible with spawnUri. It should also
|
||||
// return a Future<Isolate>.
|
||||
static spawnDomUri(String uri) => wrap_jso(_blink.Blink_Utils.spawnDomUri(uri));
|
||||
// TODO(jacobr): IS THIS RIGHT? I worry we have broken conversion from Promise to Future.
|
||||
static spawnDomUri(String uri) => _blink.Blink_Utils.spawnDomUri(uri);
|
||||
|
||||
// The following methods were added for debugger integration to make working
|
||||
// with the Dart C mirrors API simpler.
|
||||
|
@ -774,13 +771,13 @@ class _Utils {
|
|||
return [
|
||||
"inspect",
|
||||
(o) {
|
||||
host.callMethod("_inspect", [unwrap_jso(o)]);
|
||||
js.JsNative.callMethod(host, "_inspect", [o]);
|
||||
return o;
|
||||
},
|
||||
"dir",
|
||||
window().console.dir,
|
||||
window.console.dir,
|
||||
"dirxml",
|
||||
window().console.dirxml
|
||||
window.console.dirxml
|
||||
// FIXME: add copy method.
|
||||
];
|
||||
}
|
||||
|
@ -804,38 +801,34 @@ class _Utils {
|
|||
}
|
||||
|
||||
static void _register(Document document, String tag, Type customType,
|
||||
String extendsTagName) => _blink.Blink_Utils.register(unwrap_jso(document), tag, customType, extendsTagName);
|
||||
String extendsTagName) => _blink.Blink_Utils.register(document, tag, customType, extendsTagName);
|
||||
|
||||
static Element createElement(Document document, String tagName) =>
|
||||
wrap_jso(_blink.Blink_Utils.createElement(unwrap_jso(document), tagName));
|
||||
|
||||
static Element changeElementWrapper(HtmlElement element, Type type) =>
|
||||
wrap_jso(_blink.Blink_Utils.changeElementWrapper(unwrap_jso(element), type));
|
||||
_blink.Blink_Utils.createElement(document, tagName);
|
||||
}
|
||||
|
||||
// TODO(jacobr): this seems busted. I believe we are actually
|
||||
// giving users real windows for opener, parent, top, etc.
|
||||
// Or worse, we are probaly returning a raw JSObject.
|
||||
class _DOMWindowCrossFrame extends DartHtmlDomObject implements
|
||||
WindowBase {
|
||||
/** Needed because KeyboardEvent is implements.
|
||||
* TODO(terry): Consider making blink_jsObject private (add underscore) for
|
||||
* all blink_jsObject. Then needed private wrap/unwrap_jso
|
||||
* functions that delegate to a public wrap/unwrap_jso.
|
||||
*/
|
||||
js.JsObject blink_jsObject;
|
||||
|
||||
_DOMWindowCrossFrame.internal();
|
||||
|
||||
static _createSafe(win) => _blink.Blink_Utils.setInstanceInterceptor(win, _DOMWindowCrossFrame);
|
||||
|
||||
// Fields.
|
||||
HistoryBase get history => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_history(unwrap_jso(this)));
|
||||
LocationBase get location => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_location(unwrap_jso(this)));
|
||||
bool get closed => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_closed(unwrap_jso(this)));
|
||||
WindowBase get opener => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_opener(unwrap_jso(this)));
|
||||
WindowBase get parent => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_parent(unwrap_jso(this)));
|
||||
WindowBase get top => wrap_jso(_blink.Blink_DOMWindowCrossFrame.get_top(unwrap_jso(this)));
|
||||
HistoryBase get history => _blink.Blink_DOMWindowCrossFrame.get_history(this);
|
||||
LocationBase get location => _blink.Blink_DOMWindowCrossFrame.get_location(this);
|
||||
bool get closed => _blink.Blink_DOMWindowCrossFrame.get_closed(this);
|
||||
WindowBase get opener => _blink.Blink_DOMWindowCrossFrame.get_opener(this);
|
||||
WindowBase get parent => _blink.Blink_DOMWindowCrossFrame.get_parent(this);
|
||||
WindowBase get top => _blink.Blink_DOMWindowCrossFrame.get_top(this);
|
||||
|
||||
// Methods.
|
||||
void close() => _blink.Blink_DOMWindowCrossFrame.close(unwrap_jso(this));
|
||||
void close() => _blink.Blink_DOMWindowCrossFrame.close(this);
|
||||
void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) =>
|
||||
_blink.Blink_DOMWindowCrossFrame.postMessage(unwrap_jso(this),
|
||||
_blink.Blink_DOMWindowCrossFrame.postMessage(this,
|
||||
convertDartToNative_SerializedScriptValue(message), targetOrigin, messagePorts);
|
||||
|
||||
// Implementation support.
|
||||
|
@ -869,9 +862,9 @@ class _HistoryCrossFrame extends DartHtmlDomObject implements HistoryBase {
|
|||
_HistoryCrossFrame.internal();
|
||||
|
||||
// Methods.
|
||||
void back() => _blink.Blink_HistoryCrossFrame.back(unwrap_jso(this));
|
||||
void forward() => _blink.Blink_HistoryCrossFrame.forward(unwrap_jso(this));
|
||||
void go(int distance) => _blink.Blink_HistoryCrossFrame.go(unwrap_jso(this), distance);
|
||||
void back() => _blink.Blink_HistoryCrossFrame.back(this);
|
||||
void forward() => _blink.Blink_HistoryCrossFrame.forward(this);
|
||||
void go(int distance) => _blink.Blink_HistoryCrossFrame.go(this, distance);
|
||||
|
||||
// Implementation support.
|
||||
String get typeName => "History";
|
||||
|
@ -881,7 +874,7 @@ class _LocationCrossFrame extends DartHtmlDomObject implements LocationBase {
|
|||
_LocationCrossFrame.internal();
|
||||
|
||||
// Fields.
|
||||
set href(String h) => _blink.Blink_LocationCrossFrame.set_href(unwrap_jso(this), h);
|
||||
set href(String h) => _blink.Blink_LocationCrossFrame.set_href(this, h);
|
||||
|
||||
// Implementation support.
|
||||
String get typeName => "Location";
|
||||
|
|
|
@ -150,7 +150,4 @@ Future<Isolate> spawnDomUri(Uri uri, List<String> args, message) {
|
|||
throw new UnimplementedError();
|
||||
}
|
||||
|
||||
/// Dartium functions that are a NOOP in dart2js.
|
||||
unwrap_jso(dartClass_instance) => dartClass_instance;
|
||||
wrap_jso(jsObject) => jsObject;
|
||||
createCustomUpgrader(Type customElementClass, $this) => $this;
|
||||
|
|
|
@ -37,7 +37,6 @@ import 'dart:_internal' hide Symbol;
|
|||
import 'dart:html_common';
|
||||
import 'dart:indexed_db';
|
||||
import 'dart:indexed_db' show indexed_dbBlinkMap;
|
||||
import 'dart:indexed_db' show indexed_dbBlinkFunctionMap;
|
||||
import 'dart:isolate';
|
||||
import 'dart:js' as js;
|
||||
import "dart:convert";
|
||||
|
@ -49,17 +48,14 @@ import 'dart:nativewrappers';
|
|||
import 'dart:typed_data';
|
||||
import 'dart:web_gl' as gl;
|
||||
import 'dart:web_gl' show web_glBlinkMap;
|
||||
import 'dart:web_gl' show web_glBlinkFunctionMap;
|
||||
import 'dart:web_sql';
|
||||
// Not actually used, but imported since dart:html can generate these objects.
|
||||
import 'dart:svg' as svg;
|
||||
import 'dart:svg' show svgBlinkMap;
|
||||
import 'dart:svg' show svgBlinkFunctionMap;
|
||||
import 'dart:svg' show Matrix;
|
||||
import 'dart:svg' show SvgSvgElement;
|
||||
import 'dart:web_audio' as web_audio;
|
||||
import 'dart:web_audio' show web_audioBlinkMap;
|
||||
import 'dart:web_audio' show web_audioBlinkFunctionMap;
|
||||
import 'dart:_blink' as _blink;
|
||||
import 'dart:developer';
|
||||
|
||||
|
@ -118,7 +114,7 @@ Window get window {
|
|||
}
|
||||
$if DARTIUM
|
||||
$if JSINTEROP
|
||||
_window = wrap_jso(js.JsNative.getProperty(js.context, 'window'));
|
||||
_window = js.JsNative.toTypedObject(js.context);
|
||||
$else
|
||||
_window = _Utils.window();
|
||||
$endif
|
||||
|
@ -161,11 +157,19 @@ final htmlBlinkMap = {
|
|||
'JsObject': () => js.JsObject,
|
||||
'JsFunction': () => js.JsFunction,
|
||||
'JsArray': () => js.JsArray,
|
||||
// We have to call .instanceRuntimeType as these classes have a private
|
||||
// implementation class defined dynamically at runtime via a patch file.
|
||||
'JSObject': () => js.JSObject.instanceRuntimeType,
|
||||
'JSFunction': () => js.JSFunction.instanceRuntimeType,
|
||||
'JSArray': () => js.JSArray.instanceRuntimeType,
|
||||
$!TYPE_MAP
|
||||
};
|
||||
|
||||
// TODO(leafp): We may want to move this elsewhere if html becomes
|
||||
// a package to avoid dartium depending on pkg:html.
|
||||
@Deprecated("Internal Use Only")
|
||||
getHtmlCreateType(String key) => _getType(key);
|
||||
|
||||
Type _getType(String key) {
|
||||
var result;
|
||||
|
||||
|
@ -252,102 +256,15 @@ Type _getSvgType(String key) {
|
|||
return null;
|
||||
}
|
||||
|
||||
// TODO(jacobr): it would be nice to place this in a consistent place for dart2js and dartium.
|
||||
_convertNativeToDart_XHR_Response(o) {
|
||||
if (o is Document) {
|
||||
return o;
|
||||
}
|
||||
return convertNativeToDart_SerializedScriptValue(o);
|
||||
}
|
||||
|
||||
$if JSINTEROP
|
||||
// FIXME: Can we make this private?
|
||||
@Deprecated("Internal Use Only")
|
||||
final htmlBlinkFunctionMap = {
|
||||
$!TYPE_FUNCTION_MAP
|
||||
};
|
||||
|
||||
// TODO(terry): We may want to move this elsewhere if html becomes
|
||||
// a package to avoid dartium depending on pkg:html.
|
||||
@Deprecated("Internal Use Only")
|
||||
getHtmlCreateFunction(String key) {
|
||||
var result;
|
||||
|
||||
// TODO(vsm): Add Cross Frame and JS types here as well.
|
||||
|
||||
// Check the html library.
|
||||
result = _getHtmlFunction(key);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Check the web gl library.
|
||||
result = _getWebGlFunction(key);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Check the indexed db library.
|
||||
result = _getIndexDbFunction(key);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Check the web audio library.
|
||||
result = _getWebAudioFunction(key);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Check the web sql library.
|
||||
result = _getWebSqlFunction(key);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Check the svg library.
|
||||
result = _getSvgFunction(key);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
Function _getHtmlFunction(String key) {
|
||||
if (htmlBlinkFunctionMap.containsKey(key)) {
|
||||
return htmlBlinkFunctionMap[key]();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Function _getWebGlFunction(String key) {
|
||||
if (web_glBlinkFunctionMap.containsKey(key)) {
|
||||
return web_glBlinkFunctionMap[key]();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Function _getIndexDbFunction(String key) {
|
||||
if (indexed_dbBlinkFunctionMap.containsKey(key)) {
|
||||
return indexed_dbBlinkFunctionMap[key]();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Function _getWebAudioFunction(String key) {
|
||||
if (web_audioBlinkFunctionMap.containsKey(key)) {
|
||||
return web_audioBlinkFunctionMap[key]();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Function _getWebSqlFunction(String key) {
|
||||
if (web_sqlBlinkFunctionMap.containsKey(key)) {
|
||||
return web_sqlBlinkFunctionMap[key]();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Function _getSvgFunction(String key) {
|
||||
if (svgBlinkFunctionMap.containsKey(key)) {
|
||||
return svgBlinkFunctionMap[key]();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
********** **********
|
||||
|
@ -368,22 +285,14 @@ String _getCustomElementName(element) {
|
|||
var jsObject;
|
||||
var tag = "";
|
||||
var runtimeType = element.runtimeType;
|
||||
if (runtimeType == HtmlElement) {
|
||||
tag = element.localName;
|
||||
} else if (runtimeType == TemplateElement) {
|
||||
if (runtimeType == TemplateElement) {
|
||||
// Data binding with a Dart class.
|
||||
tag = element.attributes['is'];
|
||||
} else if (runtimeType == js.JsObject) {
|
||||
// It's a Polymer core element (written in JS).
|
||||
// Make sure it's an element anything else we can ignore.
|
||||
if (element.hasProperty('nodeType') && element['nodeType'] == 1) {
|
||||
if (js.JsNative.callMethod(element, 'hasAttribute', ['is'])) {
|
||||
// It's data binding use the is attribute.
|
||||
tag = js.JsNative.callMethod(element, 'getAttribute', ['is']);
|
||||
} else {
|
||||
} else if (element is HtmlElement) {
|
||||
tag = element.attributes['is'];
|
||||
if (tag == null) {
|
||||
// It's a custom element we want the local name.
|
||||
tag = element['localName'];
|
||||
}
|
||||
tag = element.localName;
|
||||
}
|
||||
} else {
|
||||
throw new UnsupportedError('Element is incorrect type. Got ${runtimeType}, expected HtmlElement/HtmlTemplate/JsObject.');
|
||||
|
@ -412,12 +321,16 @@ debug_or_assert(message, expression) {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO(jacobr): we shouldn't be generating this call in the dart:html
|
||||
// bindings but we are.
|
||||
_convertDartToNative_EventTarget(target) => target;
|
||||
|
||||
@Deprecated("Internal Use Only")
|
||||
Map<String, dynamic> convertNativeObjectToDartMap(js.JsObject jsObject) {
|
||||
var result = new Map();
|
||||
var keys = js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'Object'), 'keys', [jsObject]);
|
||||
for (var key in keys) {
|
||||
result[key] = wrap_jso(js.JsNative.getProperty(jsObject, key));
|
||||
result[key] = js.JsNative.getProperty(jsObject, key);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -426,25 +339,7 @@ Map<String, dynamic> convertNativeObjectToDartMap(js.JsObject jsObject) {
|
|||
* Upgrade the JS HTMLElement to the Dart class. Used by Dart's Polymer.
|
||||
*/
|
||||
_createCustomUpgrader(Type customElementClass, $this) {
|
||||
var dartClass;
|
||||
try {
|
||||
dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
|
||||
} catch (e) {
|
||||
// Did the dartClass get allocated but the created failed? Otherwise, other
|
||||
// components inside of this failed somewhere (could be JS custom element).
|
||||
if (dartClass != null) {
|
||||
// Yes, mark as didn't upgrade.
|
||||
dartClass._badUpgrade();
|
||||
}
|
||||
throw e;
|
||||
} finally {
|
||||
// Need to remember the Dart class that was created for this custom so
|
||||
// return it and setup the blink_jsObject to the $this that we'll be working
|
||||
// with as we talk to blink.
|
||||
js.setDartHtmlWrapperFor($this, dartClass);
|
||||
}
|
||||
|
||||
return dartClass;
|
||||
return _blink.Blink_Utils.setInstanceInterceptor($this, customElementClass, customElement: true);
|
||||
}
|
||||
|
||||
$else
|
||||
|
|
|
@ -112,10 +112,66 @@ final indexed_dbBlinkMap = {
|
|||
$!TYPE_MAP
|
||||
};
|
||||
|
||||
$if JSINTEROP
|
||||
// FIXME: Can we make this private?
|
||||
@Deprecated("Internal Use Only")
|
||||
final indexed_dbBlinkFunctionMap = {
|
||||
$!TYPE_FUNCTION_MAP
|
||||
};
|
||||
$endif
|
||||
|
||||
//
|
||||
// Per http://www.w3.org/TR/IndexedDB/#key-construct
|
||||
//
|
||||
// "A value is said to be a valid key if it is one of the following types: Array
|
||||
// JavaScript objects [ECMA-262], DOMString [WEBIDL], Date [ECMA-262] or float
|
||||
// [WEBIDL]. However Arrays are only valid keys if every item in the array is
|
||||
// defined and is a valid key (i.e. sparse arrays can not be valid keys) and if
|
||||
// the Array doesn't directly or indirectly contain itself. Any non-numeric
|
||||
// properties are ignored, and thus does not affect whether the Array is a valid
|
||||
// key. Additionally, if the value is of type float, it is only a valid key if
|
||||
// it is not NaN, and if the value is of type Date it is only a valid key if its
|
||||
// [[PrimitiveValue]] internal property, as defined by [ECMA-262], is not NaN."
|
||||
|
||||
// What is required is to ensure that an Lists in the key are actually
|
||||
// JavaScript arrays, and any Dates are JavaScript Dates.
|
||||
|
||||
|
||||
/**
|
||||
* 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 (object is DateTime) 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 (nativeKey is DateTime) {
|
||||
throw new UnimplementedError('Key containing DateTime');
|
||||
}
|
||||
// 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);
|
||||
}
|
|
@ -28,11 +28,3 @@ $!GENERATED_DART_FILES
|
|||
final svgBlinkMap = {
|
||||
$!TYPE_MAP
|
||||
};
|
||||
|
||||
$if JSINTEROP
|
||||
// FIXME: Can we make this private?
|
||||
@Deprecated("Internal Use Only")
|
||||
final svgBlinkFunctionMap = {
|
||||
$!TYPE_FUNCTION_MAP
|
||||
};
|
||||
$endif
|
||||
|
|
|
@ -22,11 +22,3 @@ $!GENERATED_DART_FILES
|
|||
final web_audioBlinkMap = {
|
||||
$!TYPE_MAP
|
||||
};
|
||||
|
||||
$if JSINTEROP
|
||||
// FIXME: Can we make this private?
|
||||
@Deprecated("Internal Use Only")
|
||||
final web_audioBlinkFunctionMap = {
|
||||
$!TYPE_FUNCTION_MAP
|
||||
};
|
||||
$endif
|
||||
|
|
|
@ -24,11 +24,3 @@ $!GENERATED_DART_FILES
|
|||
final web_glBlinkMap = {
|
||||
$!TYPE_MAP
|
||||
};
|
||||
|
||||
$if JSINTEROP
|
||||
// FIXME: Can we make this private?
|
||||
@Deprecated("Internal Use Only")
|
||||
final web_glBlinkFunctionMap = {
|
||||
$!TYPE_FUNCTION_MAP
|
||||
};
|
||||
$endif
|
||||
|
|
|
@ -30,11 +30,3 @@ $!GENERATED_DART_FILES
|
|||
final web_sqlBlinkMap = {
|
||||
$!TYPE_MAP
|
||||
};
|
||||
|
||||
$if JSINTEROP
|
||||
// FIXME: Can we make this private?
|
||||
@Deprecated("Internal Use Only")
|
||||
final web_sqlBlinkFunctionMap = {
|
||||
$!TYPE_FUNCTION_MAP
|
||||
};
|
||||
$endif
|
|
@ -31,15 +31,15 @@ $else
|
|||
// TODO: any coercions on the elements of blobParts, e.g. coerce a typed
|
||||
// array to ArrayBuffer if it is a total view.
|
||||
|
||||
var parts = convertDartToNative_List(blobParts.map(unwrap_jso).toList());
|
||||
var parts = convertDartToNative_List(blobParts);
|
||||
if (type == null && endings == null) {
|
||||
return wrap_jso(_blink.BlinkBlob.instance.constructorCallback_1_(parts));
|
||||
return _blink.BlinkBlob.instance.constructorCallback_1_(parts);
|
||||
}
|
||||
var bag = {};
|
||||
if (type != null) bag['type'] = type;
|
||||
if (endings != null) bag['endings'] = endings;
|
||||
return wrap_jso(_blink.BlinkBlob.instance.constructorCallback_2_(parts,
|
||||
convertDartToNative_Dictionary(bag)));
|
||||
return _blink.BlinkBlob.instance.constructorCallback_2_(parts,
|
||||
convertDartToNative_Dictionary(bag));
|
||||
}
|
||||
$endif
|
||||
$endif
|
||||
|
|
|
@ -63,7 +63,7 @@ $endif
|
|||
$if DARTIUM
|
||||
bool _hasProperty(String propertyName) =>
|
||||
$if JSINTEROP
|
||||
_blink.BlinkCSSStyleDeclaration.instance.$__propertyQuery___Callback_1_(unwrap_jso(this), propertyName) != null;
|
||||
_blink.BlinkCSSStyleDeclaration.instance.$__propertyQuery___Callback_1_(this, propertyName);
|
||||
$else
|
||||
_blink.BlinkCSSStyleDeclaration.$__propertyQuery___Callback_1(this, propertyName);
|
||||
$endif
|
||||
|
|
|
@ -23,9 +23,7 @@ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
|
|||
// first-chance exceptions. Can expand this list in the future as needed.
|
||||
if (detail is List || detail is Map || detail is String || detail is num) {
|
||||
try {
|
||||
$if DART2JS
|
||||
detail = convertDartToNative_SerializedScriptValue(detail);
|
||||
$endif
|
||||
e._initCustomEvent(type, canBubble, cancelable, detail);
|
||||
} catch(_) {
|
||||
e._initCustomEvent(type, canBubble, cancelable, null);
|
||||
|
@ -34,11 +32,6 @@ $endif
|
|||
e._initCustomEvent(type, canBubble, cancelable, null);
|
||||
}
|
||||
|
||||
$if DARTIUM
|
||||
// Need for identity.
|
||||
js.setDartHtmlWrapperFor(e.blink_jsObject, e);
|
||||
|
||||
$endif
|
||||
return e;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ $else
|
|||
// TODO(alanknight): I think that all the __getter__ generators should just
|
||||
// do property access, but that's major surgery. This one is a problem, so
|
||||
// just hard-code it for now.
|
||||
return _blink.Blink_JsNative_DomException.getProperty(unwrap_jso(this), index);
|
||||
return _blink.Blink_JsNative_DomException.getProperty(this, index);
|
||||
$endif
|
||||
}
|
||||
|
||||
|
|
|
@ -68,23 +68,9 @@ $if DART2JS
|
|||
? _createElement_2(tagName)
|
||||
: _createElement(tagName, typeExtension);
|
||||
$else
|
||||
var newElement = (typeExtension == null) ?
|
||||
_blink.BlinkDocument.instance.createElement_Callback_1_(unwrap_jso(this), tagName) :
|
||||
_blink.BlinkDocument.instance.createElement_Callback_2_(unwrap_jso(this), tagName, typeExtension);
|
||||
|
||||
var wrapped = js.getDartHtmlWrapperFor(newElement); // Here's our Dart class.
|
||||
if (wrapped != null) {
|
||||
wrapped.blink_jsObject = newElement;
|
||||
} else {
|
||||
wrapped = wrap_jso(newElement);
|
||||
if (wrapped == null) {
|
||||
wrapped = wrap_jso_custom_element(newElement);
|
||||
} else {
|
||||
js.setDartHtmlWrapperFor(wrapped.blink_jsObject, wrapped);
|
||||
}
|
||||
}
|
||||
|
||||
return wrapped;
|
||||
return (typeExtension == null) ?
|
||||
_blink.BlinkDocument.instance.createElement_Callback_1_(this, tagName) :
|
||||
_blink.BlinkDocument.instance.createElement_Callback_2_(this, tagName, typeExtension);
|
||||
$endif
|
||||
}
|
||||
|
||||
|
@ -110,25 +96,9 @@ $if DART2JS
|
|||
? _createElementNS_2(namespaceURI, qualifiedName)
|
||||
: _createElementNS(namespaceURI, qualifiedName, typeExtension);
|
||||
$else
|
||||
var newElement = (typeExtension == null) ?
|
||||
_blink.BlinkDocument.instance.createElementNS_Callback_2_(unwrap_jso(this), namespaceURI, qualifiedName) :
|
||||
_blink.BlinkDocument.instance.createElementNS_Callback_3_(unwrap_jso(this), namespaceURI, qualifiedName, typeExtension);
|
||||
|
||||
var wrapped;
|
||||
|
||||
wrapped = js.getDartHtmlWrapperFor(newElement); // Here's our Dart class.
|
||||
if (wrapped != null) {
|
||||
wrapped.blink_jsObject = newElement;
|
||||
} else {
|
||||
wrapped = wrap_jso(newElement);
|
||||
if (wrapped == null) {
|
||||
wrapped = wrap_jso_custom_element(newElement);
|
||||
} else {
|
||||
js.setDartHtmlWrapperFor(wrapped.blink_jsObject, wrapped); // Here's our Dart class.
|
||||
}
|
||||
}
|
||||
|
||||
return wrapped;
|
||||
return (typeExtension == null) ?
|
||||
_blink.BlinkDocument.instance.createElementNS_Callback_2_(this, namespaceURI, qualifiedName) :
|
||||
_blink.BlinkDocument.instance.createElementNS_Callback_3_(this, namespaceURI, qualifiedName, typeExtension);
|
||||
$endif
|
||||
}
|
||||
|
||||
|
|
|
@ -9,8 +9,8 @@ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
|
|||
$!MEMBERS
|
||||
$if DARTIUM
|
||||
// Override this methods for Dartium _DocumentType can't be abstract.
|
||||
Element get nextElementSibling => wrap_jso(_blink.BlinkDocumentType.instance.nextElementSibling_Getter_(unwrap_jso(this)));
|
||||
Element get previousElementSibling => wrap_jso(_blink.BlinkDocumentType.instance.previousElementSibling_Getter_(unwrap_jso(this)));
|
||||
Element get nextElementSibling => _blink.BlinkDocumentType.instance.nextElementSibling_Getter_(this);
|
||||
Element get previousElementSibling => _blink.BlinkDocumentType.instance.previousElementSibling_Getter_(this);
|
||||
$endif
|
||||
}
|
||||
|
||||
|
|
|
@ -380,7 +380,15 @@ $(ANNOTATIONS)$(NATIVESPEC)class $CLASSNAME$EXTENDS$IMPLEMENTS {
|
|||
* }
|
||||
* document.registerElement('x-custom', CustomElement);
|
||||
*/
|
||||
$if DART2JS
|
||||
Element.created() : super._created();
|
||||
$else
|
||||
Element.created() : super._created() {
|
||||
// Validate that this is a custom element & possibly perform additional
|
||||
// initialization.
|
||||
_blink.Blink_Utils.initializeCustomElement(this);
|
||||
}
|
||||
$endif
|
||||
|
||||
/**
|
||||
* Creates the HTML element specified by the tag name.
|
||||
|
@ -1483,24 +1491,20 @@ $else
|
|||
static var _htmlCollection = js.context["HTMLCollection"];
|
||||
static var _nodeList = js.context["NodeList"];
|
||||
|
||||
static const _evilAttributeNames =
|
||||
const ['attributes', 'lastChild', 'children', 'childNodes'];
|
||||
|
||||
static bool _hasCorruptedAttributes(Element element) {
|
||||
var attributes = unwrap_jso(element)["attributes"];
|
||||
if (!attributes.instanceof(_namedNodeMap)) {
|
||||
return true;
|
||||
}
|
||||
var childNodes = unwrap_jso(element.childNodes);
|
||||
var length = childNodes["length"];
|
||||
var lastChild = unwrap_jso(element.lastChild);
|
||||
if (null != lastChild &&
|
||||
lastChild != childNodes[length - 1]) {
|
||||
return true;
|
||||
}
|
||||
var children = unwrap_jso(element._children);
|
||||
if (null != children) { // On Safari, children can apparently be null.
|
||||
if (!children.instanceof(_htmlCollection) ||
|
||||
children.instanceof(_nodeList)) {
|
||||
return true;
|
||||
}
|
||||
// We have trusted access to children and to attributes of objects,
|
||||
// so we can inspect directly for attempts at DOM clobbering.
|
||||
var child = element.firstChild;
|
||||
while( child != null) {
|
||||
if (child is Element) {
|
||||
for (var attributeName in ["id", "name"]) {
|
||||
var childAttribute = child.getAttribute(attributeName);
|
||||
if (_evilAttributeNames.contains(childAttribute)) return true;
|
||||
}}
|
||||
child = child.nextNode;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -1509,6 +1513,7 @@ $else
|
|||
static bool _hasCorruptedAttributesAdditionalCheck(Element element) => false;
|
||||
$endif
|
||||
|
||||
$if DART2JS
|
||||
static String _safeTagName(element) {
|
||||
String result = 'element tag unavailable';
|
||||
try {
|
||||
|
@ -1518,6 +1523,15 @@ $endif
|
|||
} catch (e) {}
|
||||
return result;
|
||||
}
|
||||
$else
|
||||
static String _safeTagName(element) {
|
||||
try {
|
||||
// Safe as we plumb directly to a C++ native method.
|
||||
return element.tagName;
|
||||
} catch (e) {}
|
||||
return 'element tag unavailable';
|
||||
}
|
||||
$endif
|
||||
|
||||
$if DART2JS
|
||||
@DomName('Element.offsetParent')
|
||||
|
@ -1570,52 +1584,52 @@ $if DART2JS
|
|||
|
||||
$else
|
||||
// Need to explicitly delegate because Element is no longer abstract for Dartium.
|
||||
bool get isContentEditable => _blink.BlinkHTMLElement.instance.isContentEditable_Getter_(unwrap_jso(this));
|
||||
void click() => _blink.BlinkHTMLElement.instance.click_Callback_0_(unwrap_jso(this));
|
||||
bool get isContentEditable => _blink.BlinkHTMLElement.instance.isContentEditable_Getter_(this);
|
||||
void click() => _blink.BlinkHTMLElement.instance.click_Callback_0_(this);
|
||||
|
||||
@DomName('Element.offsetParent')
|
||||
@DocsEditable()
|
||||
Element get offsetParent => wrap_jso(_blink.BlinkElement.instance.offsetParent_Getter_(unwrap_jso(this)));
|
||||
Element get offsetParent => _blink.BlinkElement.instance.offsetParent_Getter_(this);
|
||||
|
||||
@DomName('Element.offsetHeight')
|
||||
@DocsEditable()
|
||||
int get offsetHeight => _blink.BlinkElement.instance.offsetHeight_Getter_(unwrap_jso(this));
|
||||
int get offsetHeight => _blink.BlinkElement.instance.offsetHeight_Getter_(this);
|
||||
|
||||
@DomName('Element.offsetLeft')
|
||||
@DocsEditable()
|
||||
int get offsetLeft => _blink.BlinkElement.instance.offsetLeft_Getter_(unwrap_jso(this));
|
||||
int get offsetLeft => _blink.BlinkElement.instance.offsetLeft_Getter_(this);
|
||||
|
||||
@DomName('Element.offsetTop')
|
||||
@DocsEditable()
|
||||
int get offsetTop => _blink.BlinkElement.instance.offsetTop_Getter_(unwrap_jso(this));
|
||||
int get offsetTop => _blink.BlinkElement.instance.offsetTop_Getter_(this);
|
||||
|
||||
@DomName('Element.offsetWidth')
|
||||
@DocsEditable()
|
||||
int get offsetWidth => _blink.BlinkElement.instance.offsetWidth_Getter_(unwrap_jso(this));
|
||||
int get offsetWidth => _blink.BlinkElement.instance.offsetWidth_Getter_(this);
|
||||
|
||||
@DomName('Element.scrollHeight')
|
||||
@DocsEditable()
|
||||
int get scrollHeight => _blink.BlinkElement.instance.scrollHeight_Getter_(unwrap_jso(this)).round();
|
||||
int get scrollHeight => _blink.BlinkElement.instance.scrollHeight_Getter_(this).round();
|
||||
|
||||
@DomName('Element.scrollLeft')
|
||||
@DocsEditable()
|
||||
int get scrollLeft => _blink.BlinkElement.instance.scrollLeft_Getter_(unwrap_jso(this)).round();
|
||||
int get scrollLeft => _blink.BlinkElement.instance.scrollLeft_Getter_(this).round();
|
||||
|
||||
@DomName('Element.scrollLeft')
|
||||
@DocsEditable()
|
||||
set scrollLeft(int value) => _blink.BlinkElement.instance.scrollLeft_Setter_(unwrap_jso(this), value.round());
|
||||
set scrollLeft(int value) => _blink.BlinkElement.instance.scrollLeft_Setter_(this, value.round());
|
||||
|
||||
@DomName('Element.scrollTop')
|
||||
@DocsEditable()
|
||||
int get scrollTop => _blink.BlinkElement.instance.scrollTop_Getter_(unwrap_jso(this)).round();
|
||||
int get scrollTop => _blink.BlinkElement.instance.scrollTop_Getter_(this).round();
|
||||
|
||||
@DomName('Element.scrollTop')
|
||||
@DocsEditable()
|
||||
set scrollTop(int value) => _blink.BlinkElement.instance.scrollTop_Setter_(unwrap_jso(this), value.round());
|
||||
set scrollTop(int value) => _blink.BlinkElement.instance.scrollTop_Setter_(this, value.round());
|
||||
|
||||
@DomName('Element.scrollWidth')
|
||||
@DocsEditable()
|
||||
int get scrollWidth => _blink.BlinkElement.instance.scrollWidth_Getter_(unwrap_jso(this)).round();
|
||||
int get scrollWidth => _blink.BlinkElement.instance.scrollWidth_Getter_(this).round();
|
||||
$endif
|
||||
|
||||
$!MEMBERS
|
||||
|
|
|
@ -13,7 +13,7 @@ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
|
|||
$if DART2JS
|
||||
var res = JS('Null|String|NativeByteBuffer', '#.result', this);
|
||||
$else
|
||||
var res = _blink.BlinkFileReader.instance.result_Getter_(unwrap_jso(this));
|
||||
var res = _blink.BlinkFileReader.instance.result_Getter_(this);
|
||||
$endif
|
||||
if (res is ByteBuffer) {
|
||||
return new Uint8List.view(res);
|
||||
|
|
|
@ -10,9 +10,9 @@ $!MEMBERS
|
|||
$if JSINTEROP
|
||||
factory AudioElement([String src]) {
|
||||
if (src == null)
|
||||
return wrap_jso(_blink.BlinkHTMLAudioElement.instance.constructorCallback_0_());
|
||||
return _blink.BlinkHTMLAudioElement.instance.constructorCallback_0_();
|
||||
else
|
||||
return wrap_jso(_blink.BlinkHTMLAudioElement.instance.constructorCallback_1_(src));
|
||||
return _blink.BlinkHTMLAudioElement.instance.constructorCallback_1_(src);
|
||||
}
|
||||
$else
|
||||
factory AudioElement([String src]) => new AudioElement._(src);
|
||||
|
|
|
@ -413,9 +413,6 @@ $else
|
|||
}
|
||||
var elemProto = js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'Object'), "create", [js.JsNative.getProperty(baseElement, 'prototype')]);
|
||||
|
||||
// Remember for any upgrading done in wrap_jso.
|
||||
addCustomElementType(tag, customElementClass, extendsTag);
|
||||
|
||||
// TODO(terry): Hack to stop recursion re-creating custom element when the
|
||||
// created() constructor of the custom element does e.g.,
|
||||
//
|
||||
|
@ -427,77 +424,42 @@ $else
|
|||
// until stack overflow.
|
||||
//
|
||||
// See https://github.com/dart-lang/sdk/issues/23666
|
||||
int creating = 0;
|
||||
int creating = 0; // TODO(jacobr): I think I broke thise case. Will fix monday.
|
||||
|
||||
// If any JS code is hooked we want to call it too.
|
||||
var oldCreatedCallback = elemProto['createdCallback'];
|
||||
var oldAttributeChangedCallback = elemProto['attributeChangedCallback'];
|
||||
var oldAttachedCallback = elemProto['attachedCallback'];
|
||||
var oldDetachedCallback = elemProto['detachedCallback'];
|
||||
|
||||
// TODO(jacobr): warning:
|
||||
elemProto['createdCallback'] = js.JsNative.withThis(($this) {
|
||||
if (_getJSClassName(reflectClass(customElementClass).superclass) != null && creating < 2) {
|
||||
creating++;
|
||||
|
||||
var dartClass;
|
||||
try {
|
||||
if (extendsTag != null) {
|
||||
// If we're extending a native element then create that element.
|
||||
// Then upgrade that element to the customElementClass through
|
||||
// normal flow.
|
||||
dartClass = document.createElement(extendsTag);
|
||||
js.setDartHtmlWrapperFor($this, dartClass);
|
||||
dartClass.blink_jsObject = $this;
|
||||
}
|
||||
|
||||
// Upgrade to the CustomElement Dart class.
|
||||
dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
|
||||
} catch (e) {
|
||||
// Got a problem make it an HtmlElement and rethrow the error.
|
||||
dartClass = HtmlElement.internalCreateHtmlElement();
|
||||
// We need to remember the JS object (because constructElement failed
|
||||
// it normally sets up the blink_jsObject.
|
||||
dartClass.blink_jsObject = $this;
|
||||
|
||||
// Mark to only try this once don't try upgrading from HtmlElement
|
||||
// to the user's Dart class - we had a problem.
|
||||
dartClass._badUpgrade();
|
||||
throw e;
|
||||
} finally {
|
||||
// Need to remember the Dart class that was created for this custom so
|
||||
// return it and setup the blink_jsObject to the $this that we'll be working
|
||||
// with as we talk to blink.
|
||||
js.setDartHtmlWrapperFor($this, dartClass);
|
||||
|
||||
creating--;
|
||||
}
|
||||
}
|
||||
var oldCreatedCallback = js.JsNative.getProperty(elemProto, 'createdCallback');
|
||||
var oldAttributeChangedCallback = js.JsNative.getProperty(elemProto, 'attributeChangedCallback');
|
||||
var oldAttachedCallback = js.JsNative.getProperty(elemProto, 'attachedCallback');
|
||||
var oldDetachedCallback = js.JsNative.getProperty(elemProto, 'detachedCallback');
|
||||
|
||||
js.JsNative.setProperty(elemProto, 'createdCallback', js.allowInteropCaptureThis(($this) {
|
||||
// The created callback has already been called by the very act of passing a JS
|
||||
// custom element from JS to Dart.
|
||||
if (oldCreatedCallback != null)
|
||||
oldCreatedCallback.apply([], thisArg: unwrap_jso($this));
|
||||
});
|
||||
elemProto['attributeChangedCallback'] = new js.JsFunction.withThis(($this, attrName, oldVal, newVal) {
|
||||
oldCreatedCallback.apply([], thisArg: $this);
|
||||
}));
|
||||
js.JsNative.setProperty(elemProto, 'attributeChangedCallback', js.allowInteropCaptureThis(($this, attrName, oldVal, newVal) {
|
||||
$this.attributeChanged(attrName, oldVal, newVal);
|
||||
|
||||
if (oldAttributeChangedCallback != null)
|
||||
oldAttributeChangedCallback.apply([], thisArg: unwrap_jso($this));
|
||||
});
|
||||
elemProto['attachedCallback'] = new js.JsFunction.withThis(($this) {
|
||||
oldAttributeChangedCallback.apply([], thisArg: $this);
|
||||
}));
|
||||
js.JsNative.setProperty(elemProto, 'attachedCallback', js.allowInteropCaptureThis(($this) {
|
||||
$this.attached();
|
||||
|
||||
if (oldAttachedCallback != null)
|
||||
oldAttachedCallback.apply([], thisArg: unwrap_jso($this));
|
||||
});
|
||||
elemProto['detachedCallback'] = new js.JsFunction.withThis(($this) {
|
||||
oldAttachedCallback.apply([], thisArg: $this);
|
||||
}));
|
||||
js.JsNative.setProperty(elemProto, 'detachedCallback', js.allowInteropCaptureThis(($this) {
|
||||
$this.detached();
|
||||
|
||||
if (oldDetachedCallback != null)
|
||||
oldDetachedCallback.apply([], thisArg: unwrap_jso($this));
|
||||
});
|
||||
oldDetachedCallback.apply([], thisArg: $this);
|
||||
}));
|
||||
// document.registerElement('x-foo', {prototype: elemProto, extends: extendsTag});
|
||||
var jsMap = new js.JsObject.jsify({'prototype': elemProto, 'extends': extendsTag});
|
||||
js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'document'), 'registerElement', [tag, jsMap]);
|
||||
_blink.Blink_Utils.defineInterceptorCustomElement(elemProto, customElementClass);
|
||||
js.JsNative.callMethod(document, 'registerElement', [tag, jsMap]);
|
||||
}
|
||||
$endif
|
||||
}
|
||||
|
|
|
@ -7,18 +7,4 @@ part of $LIBRARYNAME;
|
|||
@DocsEditable()
|
||||
$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
|
||||
$!MEMBERS
|
||||
$if DARTIUM
|
||||
// Flags to only try upgrading once. If there's a failure don't try upgrading
|
||||
// anymore.
|
||||
bool _badUpgradeOccurred = false;
|
||||
|
||||
/// Required for SDK Infrastructure. Internal use only.
|
||||
///
|
||||
/// Did this encounter a failure attempting to upgrade to
|
||||
/// a custom element.
|
||||
@Deprecated("Required for SDK Infrastructure. Internal use only.")
|
||||
bool get isBadUpgrade => _badUpgradeOccurred;
|
||||
|
||||
void _badUpgrade() { _badUpgradeOccurred = true; }
|
||||
$endif
|
||||
}
|
||||
|
|
|
@ -72,14 +72,14 @@ $else
|
|||
if (storeName_OR_storeNames == null) {
|
||||
throw new ArgumentError("stores may not be null in transaction");
|
||||
} else if (storeName_OR_storeNames is String || storeName_OR_storeNames is DomStringList) {
|
||||
names = unwrap_jso(storeName_OR_storeNames);
|
||||
names = storeName_OR_storeNames;
|
||||
} else if (storeName_OR_storeNames is List<String>) {
|
||||
names = convertDartToNative_List(storeName_OR_storeNames);
|
||||
} else {
|
||||
throw new ArgumentError("Invalid store(s) $store_Name_OR_storeNames");
|
||||
}
|
||||
|
||||
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), names, mode));
|
||||
return _blink.BlinkIDBDatabase.instance.transaction_Callback_2_(this, names, mode);
|
||||
}
|
||||
|
||||
Transaction transactionList(List<String> storeNames, String mode) => transaction(storeNames, mode);
|
||||
|
|
|
@ -35,7 +35,7 @@ $if DARTIUM
|
|||
@DomName('MessageEvent.data')
|
||||
@DocsEditable()
|
||||
dynamic get data => convertNativeToDart_SerializedScriptValue(
|
||||
_blink.BlinkMessageEvent.instance.data_Getter_(unwrap_jso(this)));
|
||||
_blink.BlinkMessageEvent.instance.data_Getter_(this));
|
||||
|
||||
$else
|
||||
// TODO(alanknight): This really should be generated by the
|
||||
|
|
|
@ -20,13 +20,7 @@ $endif
|
|||
}
|
||||
$if DARTIUM
|
||||
@DocsEditable()
|
||||
$if JSINTEROP
|
||||
static MutationObserver _create(callback) => wrap_jso(_blink.BlinkMutationObserver.instance.constructorCallback_1_((mutations, observer) {
|
||||
callback(wrap_jso(mutations), wrap_jso(observer));
|
||||
}));
|
||||
$else
|
||||
static MutationObserver _create(callback) => _blink.BlinkMutationObserver.instance.constructorCallback_1_(callback);
|
||||
$endif
|
||||
$endif
|
||||
|
||||
/**
|
||||
|
|
|
@ -200,14 +200,7 @@ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
|
|||
$if DART2JS
|
||||
Node._created() : super._created();
|
||||
$else
|
||||
Node._created() : super._created() {
|
||||
// By this point blink_jsObject should be setup if it's not then we weren't
|
||||
// called by the registerElement createdCallback - probably created() was
|
||||
// called directly which is verboten.
|
||||
if (this.blink_jsObject == null) {
|
||||
throw new DomException.jsInterop("the created constructor cannot be called directly");
|
||||
}
|
||||
}
|
||||
Node._created() : super._created();
|
||||
$endif
|
||||
|
||||
/**
|
||||
|
@ -304,7 +297,7 @@ $if DARTIUM
|
|||
*/
|
||||
@DomName('Node.childNodes')
|
||||
@DocsEditable()
|
||||
List<Node> get childNodes => wrap_jso(_blink.BlinkNode.instance.childNodes_Getter_(unwrap_jso(this)));
|
||||
List<Node> get childNodes => _blink.BlinkNode.instance.childNodes_Getter_(this);
|
||||
$else
|
||||
/**
|
||||
* A list of this node's children.
|
||||
|
|
|
@ -9,11 +9,11 @@ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
|
|||
$!MEMBERS
|
||||
$if DARTIUM
|
||||
// Override these methods for Dartium _SVGCursorElement can't be abstract.
|
||||
StringList get requiredExtensions => wrap_jso(_blink.BlinkSVGCursorElement.instance.requiredExtensions_Getter_(unwrap_jso(this)));
|
||||
StringList get requiredFeatures => wrap_jso(_blink.BlinkSVGCursorElement.instance.requiredFeatures_Getter_(unwrap_jso(this)));
|
||||
StringList get systemLanguage => wrap_jso(_blink.BlinkSVGCursorElement.instance.systemLanguage_Getter_(unwrap_jso(this)));
|
||||
AnimatedString get href => wrap_jso(_blink.BlinkSVGCursorElement.instance.href_Getter_(unwrap_jso(this)));
|
||||
bool hasExtension(String extension) => _blink.BlinkSVGCursorElement.instance.hasExtension_Callback_1_(unwrap_jso(this), extension);
|
||||
StringList get requiredExtensions => _blink.BlinkSVGCursorElement.instance.requiredExtensions_Getter_(this);
|
||||
StringList get requiredFeatures => _blink.BlinkSVGCursorElement.instance.requiredFeatures_Getter_(this);
|
||||
StringList get systemLanguage => _blink.BlinkSVGCursorElement.instance.systemLanguage_Getter_(this);
|
||||
AnimatedString get href => _blink.BlinkSVGCursorElement.instance.href_Getter_(this);
|
||||
bool hasExtension(String extension) => _blink.BlinkSVGCursorElement.instance.hasExtension_Callback_1_(this, extension);
|
||||
$endif
|
||||
}
|
||||
|
||||
|
|
|
@ -146,18 +146,8 @@ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
|
|||
|
||||
$if JSINTEROP
|
||||
set _svgClassName(AnimatedString value) =>
|
||||
_blink.BlinkSVGElement.instance.className_Setter_(unwrap_jso(this), unwrap_jso(value));
|
||||
_blink.BlinkSVGElement.instance.className_Setter_(this, value);
|
||||
|
||||
String get className => _svgClassName.baseVal;
|
||||
|
||||
// Unbelievable hack. We can't create an SvgAnimatedString, but we can get
|
||||
// the existing one and change its baseVal. Then we call the blink setter directly
|
||||
// TODO(alanknight): Handle suppressing the SVGAnimated<*> better
|
||||
set className(String s) {
|
||||
var oldClass = _svgClassName;
|
||||
oldClass.baseVal = s;
|
||||
_svgClassName = oldClass;
|
||||
}
|
||||
$endif
|
||||
$!MEMBERS
|
||||
}
|
||||
|
|
|
@ -9,11 +9,11 @@ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
|
|||
$!MEMBERS
|
||||
$if DARTIUM
|
||||
// Override these methods for Dartium _SVGFEDropShadowElement can't be abstract.
|
||||
AnimatedLength get height => wrap_jso(_blink.BlinkSVGFEDropShadowElement.instance.height_Getter_(unwrap_jso(this)));
|
||||
AnimatedString get result => wrap_jso(_blink.BlinkSVGFEDropShadowElement.instance.result_Getter_(unwrap_jso(this)));
|
||||
AnimatedLength get width => wrap_jso(_blink.BlinkSVGFEDropShadowElement.instance.width_Getter_(unwrap_jso(this)));
|
||||
AnimatedLength get x => wrap_jso(_blink.BlinkSVGFEDropShadowElement.instance.x_Getter_(unwrap_jso(this)));
|
||||
AnimatedLength get y => wrap_jso(_blink.BlinkSVGFEDropShadowElement.instance.y_Getter_(unwrap_jso(this)));
|
||||
AnimatedLength get height => _blink.BlinkSVGFEDropShadowElement.instance.height_Getter_(this);
|
||||
AnimatedString get result => _blink.BlinkSVGFEDropShadowElement.instance.result_Getter_(this);
|
||||
AnimatedLength get width => _blink.BlinkSVGFEDropShadowElement.instance.width_Getter_(this);
|
||||
AnimatedLength get x => _blink.BlinkSVGFEDropShadowElement.instance.x_Getter_(this);
|
||||
AnimatedLength get y => _blink.BlinkSVGFEDropShadowElement.instance.y_Getter_(this);
|
||||
$endif
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
|
|||
$!MEMBERS
|
||||
$if DARTIUM
|
||||
// Override these methods for Dartium _SVGGlyphRefElement can't be abstract.
|
||||
AnimatedString get href => wrap_jso(_blink.BlinkSVGGlyphRefElement.instance.href_Getter_(unwrap_jso(this)));
|
||||
AnimatedString get href => _blink.BlinkSVGGlyphRefElement.instance.href_Getter_(this);
|
||||
$endif
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
|
|||
$!MEMBERS
|
||||
$if DARTIUM
|
||||
// Override these methods for Dartium _SVGMPathElement can't be abstract.
|
||||
AnimatedString get href => wrap_jso(_blink.BlinkSVGMPathElement.instance.href_Getter_(unwrap_jso(this)));
|
||||
AnimatedString get href => _blink.BlinkSVGMPathElement.instance.href_Getter_(this);
|
||||
$endif
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ $if DARTIUM
|
|||
@DomName('ServiceWorkerMessageEvent.data')
|
||||
@DocsEditable()
|
||||
dynamic get data => convertNativeToDart_SerializedScriptValue(
|
||||
_blink.BlinkMessageEvent.instance.data_Getter_(unwrap_jso(this)));
|
||||
_blink.BlinkMessageEvent.instance.data_Getter_(this));
|
||||
$else
|
||||
// TODO(alanknight): This really should be generated by the
|
||||
// _OutputConversion in the systemnative.py script, but that doesn't
|
||||
|
|
|
@ -20,14 +20,14 @@ $if DART2JS
|
|||
int get __radiusX => JS('num', '#.radiusX', this).round();
|
||||
int get __radiusY => JS('num', '#.radiusY', this).round();
|
||||
$else
|
||||
int get __clientX => _blink.BlinkTouch.instance.clientX_Getter_(unwrap_jso(this)).round();
|
||||
int get __clientY => _blink.BlinkTouch.instance.clientY_Getter_(unwrap_jso(this)).round();
|
||||
int get __screenX => _blink.BlinkTouch.instance.screenX_Getter_(unwrap_jso(this)).round();
|
||||
int get __screenY => _blink.BlinkTouch.instance.screenY_Getter_(unwrap_jso(this)).round();
|
||||
int get __pageX => _blink.BlinkTouch.instance.pageX_Getter_(unwrap_jso(this)).round();
|
||||
int get __pageY => _blink.BlinkTouch.instance.pageY_Getter_(unwrap_jso(this)).round();
|
||||
int get __radiusX => _blink.BlinkTouch.instance.radiusX_Getter_(unwrap_jso(this)).round();
|
||||
int get __radiusY => _blink.BlinkTouch.instance.radiusY_Getter_(unwrap_jso(this)).round();
|
||||
int get __clientX => _blink.BlinkTouch.instance.clientX_Getter_(this).round();
|
||||
int get __clientY => _blink.BlinkTouch.instance.clientY_Getter_(this).round();
|
||||
int get __screenX => _blink.BlinkTouch.instance.screenX_Getter_(this).round();
|
||||
int get __screenY => _blink.BlinkTouch.instance.screenY_Getter_(this).round();
|
||||
int get __pageX => _blink.BlinkTouch.instance.pageX_Getter_(this).round();
|
||||
int get __pageY => _blink.BlinkTouch.instance.pageY_Getter_(this).round();
|
||||
int get __radiusX => _blink.BlinkTouch.instance.radiusX_Getter_(this).round();
|
||||
int get __radiusY => _blink.BlinkTouch.instance.radiusY_Getter_(this).round();
|
||||
$endif
|
||||
|
||||
@DomName('Touch.clientX')
|
||||
|
|
|
@ -44,7 +44,7 @@ $if DART2JS
|
|||
type, convertDartToNative_Dictionary(options));
|
||||
|
||||
$else
|
||||
return wrap_jso(_blink.BlinkWheelEvent.instance.constructorCallback_2_(type, convertDartToNative_Dictionary(options)));
|
||||
return _blink.BlinkWheelEvent.instance.constructorCallback_2_(type, convertDartToNative_Dictionary(options));
|
||||
$endif
|
||||
}
|
||||
|
||||
|
|
|
@ -297,19 +297,19 @@ $if DART2JS
|
|||
$else
|
||||
@DomName('Window.pageXOffset')
|
||||
@DocsEditable()
|
||||
int get pageXOffset => _blink.BlinkWindow.instance.pageXOffset_Getter_(unwrap_jso(this)).round();
|
||||
int get pageXOffset => _blink.BlinkWindow.instance.pageXOffset_Getter_(this).round();
|
||||
|
||||
@DomName('Window.pageYOffset')
|
||||
@DocsEditable()
|
||||
int get pageYOffset => _blink.BlinkWindow.instance.pageYOffset_Getter_(unwrap_jso(this)).round();
|
||||
int get pageYOffset => _blink.BlinkWindow.instance.pageYOffset_Getter_(this).round();
|
||||
|
||||
@DomName('Window.scrollX')
|
||||
@DocsEditable()
|
||||
int get scrollX => _blink.BlinkWindow.instance.scrollX_Getter_(unwrap_jso(this)).round();
|
||||
int get scrollX => _blink.BlinkWindow.instance.scrollX_Getter_(this).round();
|
||||
|
||||
@DomName('Window.scrollY')
|
||||
@DocsEditable()
|
||||
int get scrollY => _blink.BlinkWindow.instance.scrollY_Getter_(unwrap_jso(this)).round();
|
||||
int get scrollY => _blink.BlinkWindow.instance.scrollY_Getter_(this).round();
|
||||
$endif
|
||||
}
|
||||
|
||||
|
|
|
@ -9,15 +9,15 @@ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
|
|||
$!MEMBERS
|
||||
$if DARTIUM
|
||||
// Override these methods for Dartium _WorkerLocation can't be abstract.
|
||||
String get hash => _blink.BlinkWorkerLocation.instance.hash_Getter_(unwrap_jso(this));
|
||||
String get host => _blink.BlinkWorkerLocation.instance.host_Getter_(unwrap_jso(this));
|
||||
String get hostname => _blink.BlinkWorkerLocation.instance.hostname_Getter_(unwrap_jso(this));
|
||||
String get href => _blink.BlinkWorkerLocation.instance.href_Getter_(unwrap_jso(this));
|
||||
String get origin => _blink.BlinkWorkerLocation.instance.origin_Getter_(unwrap_jso(this));
|
||||
String get pathname => _blink.BlinkWorkerLocation.instance.pathname_Getter_(unwrap_jso(this));
|
||||
String get port => _blink.BlinkWorkerLocation.instance.port_Getter_(unwrap_jso(this));
|
||||
String get protocol => _blink.BlinkWorkerLocation.instance.protocol_Getter_(unwrap_jso(this));
|
||||
String get search => _blink.BlinkWorkerLocation.instance.search_Getter_(unwrap_jso(this));
|
||||
String get hash => _blink.BlinkWorkerLocation.instance.hash_Getter_(this);
|
||||
String get host => _blink.BlinkWorkerLocation.instance.host_Getter_(this);
|
||||
String get hostname => _blink.BlinkWorkerLocation.instance.hostname_Getter_(this);
|
||||
String get href => _blink.BlinkWorkerLocation.instance.href_Getter_(this);
|
||||
String get origin => _blink.BlinkWorkerLocation.instance.origin_Getter_(this);
|
||||
String get pathname => _blink.BlinkWorkerLocation.instance.pathname_Getter_(this);
|
||||
String get port => _blink.BlinkWorkerLocation.instance.port_Getter_(this);
|
||||
String get protocol => _blink.BlinkWorkerLocation.instance.protocol_Getter_(this);
|
||||
String get search => _blink.BlinkWorkerLocation.instance.search_Getter_(this);
|
||||
$endif
|
||||
}
|
||||
|
||||
|
|
|
@ -9,15 +9,15 @@ $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
|
|||
$!MEMBERS
|
||||
$if DARTIUM
|
||||
// Override these methods for Dartium _WorkerNavigator can't be abstract.
|
||||
String get appCodeName => _blink.BlinkWorkerNavigator.instance.appCodeName_Getter_(unwrap_jso(this));
|
||||
String get appName => _blink.BlinkWorkerNavigator.instance.appCodeName_Getter_(unwrap_jso(this));
|
||||
String get appVersion => _blink.BlinkWorkerNavigator.instance.appVersion_Getter_(unwrap_jso(this));
|
||||
bool get dartEnabled => _blink.BlinkWorkerNavigator.instance.dartEnabled_Getter_(unwrap_jso(this));
|
||||
String get platform => _blink.BlinkWorkerNavigator.instance.platform_Getter_(unwrap_jso(this));
|
||||
String get product => _blink.BlinkWorkerNavigator.instance.product_Getter_(unwrap_jso(this));
|
||||
String get userAgent => _blink.BlinkWorkerNavigator.instance.userAgent_Getter_(unwrap_jso(this));
|
||||
int get hardwareConcurrency => _blink.BlinkWorkerNavigator.instance.hardwareConcurrency_Getter_(unwrap_jso(this));
|
||||
bool get onLine => _blink.BlinkWorkerNavigator.instance.onLine_Getter_(unwrap_jso(this));
|
||||
String get appCodeName => _blink.BlinkWorkerNavigator.instance.appCodeName_Getter_(this);
|
||||
String get appName => _blink.BlinkWorkerNavigator.instance.appCodeName_Getter_(this);
|
||||
String get appVersion => _blink.BlinkWorkerNavigator.instance.appVersion_Getter_(this);
|
||||
bool get dartEnabled => _blink.BlinkWorkerNavigator.instance.dartEnabled_Getter_(this);
|
||||
String get platform => _blink.BlinkWorkerNavigator.instance.platform_Getter_(this);
|
||||
String get product => _blink.BlinkWorkerNavigator.instance.product_Getter_(this);
|
||||
String get userAgent => _blink.BlinkWorkerNavigator.instance.userAgent_Getter_(this);
|
||||
int get hardwareConcurrency => _blink.BlinkWorkerNavigator.instance.hardwareConcurrency_Getter_(this);
|
||||
bool get onLine => _blink.BlinkWorkerNavigator.instance.onLine_Getter_(this);
|
||||
$endif
|
||||
}
|
||||
|
||||
|
|
|
@ -404,9 +404,9 @@ $endif
|
|||
$if JSINTEROP
|
||||
void open(String method, String url, {bool async, String user, String password}) {
|
||||
if (async == null && user == null && password == null) {
|
||||
_blink.BlinkXMLHttpRequest.instance.open_Callback_2_(unwrap_jso(this), method, url);
|
||||
_blink.BlinkXMLHttpRequest.instance.open_Callback_2_(this, method, url);
|
||||
} else {
|
||||
_blink.BlinkXMLHttpRequest.instance.open_Callback_5_(unwrap_jso(this), method, url, async, user, password);
|
||||
_blink.BlinkXMLHttpRequest.instance.open_Callback_5_(this, method, url, async, user, password);
|
||||
}
|
||||
}
|
||||
$else
|
||||
|
|
Loading…
Reference in a new issue