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

Unified Diff: tools/dom/templates/html/dartium/html_dartium.darttemplate

Issue 1409743003: Hide internal methods like wrap_jso from the dart:html public interface (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Review fixes Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/dom/templates/html/dartium/html_dartium.darttemplate
diff --git a/tools/dom/templates/html/dartium/html_dartium.darttemplate b/tools/dom/templates/html/dartium/html_dartium.darttemplate
index 70fd100ef881467b1306038ff289f52213ea7bd8..4dc5fc93615d351b5e6f578939eb4c2b593c3d91 100644
--- a/tools/dom/templates/html/dartium/html_dartium.darttemplate
+++ b/tools/dom/templates/html/dartium/html_dartium.darttemplate
@@ -352,71 +352,14 @@ Function _getSvgFunction(String key) {
********** **********
******************************************************************************/
-// 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;
-}
-
String _getCustomElementExtends(object) {
- var entry = _getCustomElementEntry(object);
+ var entry = getCustomElementEntry(object);
if (entry != null) {
return entry['extends'];
}
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.JsObjectImpl) {
- // 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/JsObjectImpl.');
- }
-
- 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;
-}
-
// Return the tag name or is attribute of the custom element or data binding.
String _getCustomElementName(element) {
var jsObject;
@@ -455,242 +398,14 @@ class DartHtmlDomObject {
}
-// Flag to disable JS interop asserts. Setting to false will speed up the
-// wrap_jso calls.
-bool __interop_checks = false;
-
-/** Expando for JsObject, used by every Dart class associated with a Javascript
- * class (e.g., DOM, WebAudio, etc.).
- */
-
-/**
- * Return the JsObject associated with a Dart class [dartClass_instance].
- */
-unwrap_jso(dartClass_instance) => js.unwrap_jso(dartClass_instance);
-
-/**
- * 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(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;
- }
-
- var wrapper = js.getDartHtmlWrapperFor(jsObject);
- // if we have a wrapper return the Dart instance.
- if (wrapper != null) {
- var customElementClass = _getCustomElementType(wrapper.blink_jsObject);
- if (wrapper.runtimeType != customElementClass && customElementClass != null) {
- if (wrapper.runtimeType == HtmlElement && !wrapper._isBadUpgrade) {
- // We're a Dart instance if it's HtmlElement and we have a customElement
- // class then we need to upgrade.
- if (customElementClass != null) {
- var dartClass_instance;
- try {
- dartClass_instance = _blink.Blink_Utils.constructElement(customElementClass, jsObject);
- } finally {
- dartClass_instance.blink_jsObject = jsObject;
- return dartClass_instance;
- }
- }
- }
- }
-
- return wrapper;
- }
-
- if (jsObject is js.JsArray) {
- var wrappingList = new _DartHtmlWrappingList(jsObject);
- js.setDartHtmlWrapperFor(jsObject, wrappingList);
- return wrappingList;
- }
-
- // 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;
- }
-
- 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, jsObject);
- return jsObject;
- }
- var jsTypeName = js.JsNative.getProperty(constructor, 'name');
- if (jsTypeName is! String || jsTypeName.length == 0) {
- // Not an html type.
- js.setDartHtmlWrapperFor(jsObject, jsObject);
- return jsObject;
- }
-
- var dartClass_instance;
- var customElementClass = null;
- var extendsTag = "";
- var custom = _getCustomElementEntry(jsObject);
- if (custom != null) {
- customElementClass = custom['type'];
- extendsTag = custom['extends'];
- }
-
- // Custom Element to upgrade.
- // Only allow custome elements to be created in the html or svg default
- // namespace.
- var defaultNS = jsObject['namespaceURI'] == 'http://www.w3.org/1999/xhtml' ||
- jsObject['namespaceURI'] == 'http://www.w3.org/2000/svg';
- if (customElementClass != null && extendsTag == "" && defaultNS) {
- try {
- dartClass_instance = _blink.Blink_Utils.constructElement(customElementClass, jsObject);
- } finally {
- dartClass_instance.blink_jsObject = jsObject;
- js.setDartHtmlWrapperFor(jsObject, dartClass_instance);
- }
- } else {
- var func = getHtmlCreateFunction(jsTypeName);
- if (func == null) {
- if (jsTypeName == 'auto-binding') {
- func = getHtmlCreateFunction("HTMLTemplateElement");
- } else if (jsObject.toString() == "[object HTMLElement]") {
- // One last ditch effort could be a JS custom element.
- func = getHtmlCreateFunction("HTMLElement");
- }
- }
- if (func != null) {
- dartClass_instance = func();
- 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}");
- }
- }
-
- 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) {
- var wrappingList = new _DartHtmlWrappingList(jsObject);
- js.setDartHtmlWrapperFor(jsObject, wrappingList);
- return wrappingList;
- }
-
- 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, jsObject);
- return jsObject;
- }
- var jsTypeName = js.JsNative.getProperty(constructor, 'name');
- if (jsTypeName is! String || jsTypeName.length == 0) {
- // Not an html type.
- js.setDartHtmlWrapperFor(jsObject, jsObject);
- return jsObject;
- }
-
- var func = getHtmlCreateFunction(jsTypeName);
- if (func != null) {
- var dartClass_instance = func();
- dartClass_instance.blink_jsObject = jsObject;
- js.setDartHtmlWrapperFor(jsObject, dartClass_instance);
- return dartClass_instance;
- }
- return jsObject;
- } 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;
- }
-}
-
-// Upgrade a Dart HtmlElement to the user's Dart custom element class.
+/// Upgrade a Dart HtmlElement to the user's Dart custom element class.
_upgradeHtmlElement(dartInstance) {
// Only try upgrading HtmlElement (Dart class) if there is a failure then
// don't try it again - one failure is enough.
- if (dartInstance.runtimeType == HtmlElement && !dartInstance._isBadUpgrade) {
+ if (dartInstance.runtimeType == HtmlElement && !dartInstance.isBadUpgrade) {
// Must be exactly HtmlElement not something derived from it.
- var customElementClass = _getCustomElementType(dartInstance);
+ var customElementClass = getCustomElementType(dartInstance);
// Custom Element to upgrade.
if (customElementClass != null) {
@@ -746,53 +461,10 @@ Map<String, dynamic> convertNativeObjectToDartMap(js.JsObject jsObject) {
return result;
}
-// Converts a flat Dart map into a JavaScript object with properties this is
-// is the Dartium only version it uses dart:js.
-// TODO(alanknight): This could probably be unified with the dart2js conversions
-// 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'));
- dict.forEach((String key, value) {
- if (value is List) {
- var jsArray = new js.JsArray();
- value.forEach((elem) {
- jsArray.add(elem is Map ? convertDartToNative_Dictionary(elem): elem);
- });
- jsObject[key] = jsArray;
- } else {
- jsObject[key] = value;
- }
- });
- return jsObject;
-}
-
-// Converts a Dart list into a JsArray. For the Dartium version only.
-convertDartToNative_List(List input) => new js.JsArray()..addAll(input);
-
-// Conversion function place holder (currently not used in dart2js or dartium).
-List convertDartToNative_StringArray(List<String> input) => input;
-
-/**
- * Wraps a JsArray and will call wrap_jso on its entries.
- */
-class _DartHtmlWrappingList extends ListBase implements NativeFieldWrapperClass2 {
- _DartHtmlWrappingList(this.blink_jsObject);
-
- final js.JsArray blink_jsObject;
-
- operator [](int index) => wrap_jso(js.JsNative.getArrayIndex(blink_jsObject, index));
-
- operator []=(int index, value) => blink_jsObject[index] = value;
-
- int get length => blink_jsObject.length;
- int set length(int newLength) => blink_jsObject.length = newLength;
-}
-
/**
* Upgrade the JS HTMLElement to the Dart class. Used by Dart's Polymer.
*/
-createCustomUpgrader(Type customElementClass, $this) {
+_createCustomUpgrader(Type customElementClass, $this) {
var dartClass;
try {
dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
@@ -812,11 +484,6 @@ createCustomUpgrader(Type customElementClass, $this) {
$else
class DartHtmlDomObject extends NativeFieldWrapperClass2 {}
-unwrap_jso(dartClass_instance) => dartClass_instance;
-wrap_jso(jsObject) => jsObject;
-convertDartToNative_Dictionary(Map dict) => dict;
-List convertDartToNative_StringArray(List<String> input) => input;
-convertDartToNative_List(List input) => input;
-createCustomUpgrader(Type customElementClass, $this) => $this;
+_createCustomUpgrader(Type customElementClass, $this) => $this;
$endif
« no previous file with comments | « tools/dom/src/dartium_CustomElementSupport.dart ('k') | tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698