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

Unified Diff: lib/src/emitters.dart

Issue 23532024: Changes in webui to comply with the safe html changes. Now that Nodes can be (Closed) Base URL: git@github.com:dart-lang/web-ui.git@master
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/safe_html.dart ('k') | lib/templating.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/emitters.dart
diff --git a/lib/src/emitters.dart b/lib/src/emitters.dart
index 3fa27a94819cbc41eff4a94ab44043c56b180d3f..270ac6b518eefd8f219ee0247fbfe452ef82f4be 100644
--- a/lib/src/emitters.dart
+++ b/lib/src/emitters.dart
@@ -614,7 +614,7 @@ class WebComponentEmitter extends RecursiveEmitter {
elemInfo.node.sourceSpan,
"new autogenerated.DocumentFragment.html('''"
"${escapeDartString(elemInfo.node.innerHtml, triple: true)}"
- "''')");
+ "''', treeSanitizer: autogenerated.nullTreeSanitizer)");
_context.printer.addLine(
"__root.nodes.add(__shadowTemplate.clone(true));");
}
@@ -828,30 +828,52 @@ String _emitCreateHtml(Node node, Declarations statics) {
var isHtml = node.namespace == 'http://www.w3.org/1999/xhtml';
var isSvg = node.namespace == 'http://www.w3.org/2000/svg';
var isEmpty = node.attributes.length == 0 && node.nodes.length == 0;
+ var specialTags = const ['body', 'caption', 'col', 'colgroup', 'head',
+ 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'track'];
- var constructor;
+ var expr;
// Generate precise types like "new ButtonElement()" if we can.
if (isEmpty && isHtml) {
- constructor = htmlElementConstructors[node.tagName];
+ var constructor = htmlElementConstructors[node.tagName];
if (constructor != null) {
- constructor = '$constructor()';
+ expr = 'new autogenerated.$constructor()';
} else {
- constructor = "Element.tag('${node.tagName}')";
+ expr = "new autogenerated.Element.tag('${node.tagName}')";
}
} else if (isEmpty && isSvg) {
- constructor = "_svg.SvgElement.tag('${node.tagName}')";
- } else {
+ expr = "new autogenerated_svg.SvgElement.tag('${node.tagName}')";
+ } else if (isSvg || !specialTags.contains(node.tagName)) {
// TODO(sigmund): does this work for the mathml namespace?
- var target = isSvg ? '_svg.SvgElement.svg' : 'Element.html';
- constructor = "$target('${escapeDartString(node.outerHtml)}')";
+ var constructor = isSvg ? 'autogenerated_svg.SvgElement.svg'
+ : 'autogenerated.Element.html';
+ expr = "new $constructor("
+ "'${escapeDartString(node.outerHtml)}', "
+ "treeSanitizer: autogenerated.nullTreeSanitizer)";
+ } else {
+ expr = "autogenerated.createSafeNode('${node.tagName}',"
+ " ${_attributesAsString(node.attributes)},"
+ "'${escapeDartString(node.innerHtml)}')";
}
-
- var expr = 'new autogenerated.$constructor';
var varName = '__html${statics.declarations.length}';
statics.add('final', varName, node.sourceSpan, expr);
return '${varName}.clone(true)';
}
+String _attributesAsString(Map attributes) {
+ var sb = new StringBuffer();
+ sb.write('{');
+ bool first = true;
+ for (var key in attributes.keys) {
+ if (!first) sb.write(',');
+ first = false;
+ var sKey = escapeDartString(key);
+ var sValue = escapeDartString(attributes[key]);
+ sb.write("'$sKey': '$sValue'");
+ }
+ sb.write('}');
+ return sb.toString();
+}
+
/** Trim down the html for the main html page. */
void transformMainHtml(Document document, FileInfo fileInfo,
PathMapper pathMapper, bool hasCss, bool rewriteUrls, Messages messages,
« no previous file with comments | « lib/safe_html.dart ('k') | lib/templating.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698