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

Side by Side Diff: tools/dom/templates/html/impl/impl_Element.darttemplate

Issue 1230203005: Revert "appendHtml, when sanitizing, should create document fragment in the right context" (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 5 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 unified diff | Download patch
« no previous file with comments | « tests/html/element_add_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of $LIBRARYNAME; 5 part of $LIBRARYNAME;
6 6
7 class _ChildrenElementList extends ListBase<Element> 7 class _ChildrenElementList extends ListBase<Element>
8 implements NodeListWrapper { 8 implements NodeListWrapper {
9 // Raw Element. 9 // Raw Element.
10 final Element _element; 10 final Element _element;
(...skipping 1019 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 * See also: 1030 * See also:
1031 * 1031 *
1032 * * [insertAdjacentText] 1032 * * [insertAdjacentText]
1033 * * [insertAdjacentElement] 1033 * * [insertAdjacentElement]
1034 */ 1034 */
1035 void insertAdjacentHtml(String where, String html, {NodeValidator validator, 1035 void insertAdjacentHtml(String where, String html, {NodeValidator validator,
1036 NodeTreeSanitizer treeSanitizer}) { 1036 NodeTreeSanitizer treeSanitizer}) {
1037 if (treeSanitizer is _TrustedHtmlTreeSanitizer) { 1037 if (treeSanitizer is _TrustedHtmlTreeSanitizer) {
1038 _insertAdjacentHtml(where, html); 1038 _insertAdjacentHtml(where, html);
1039 } else { 1039 } else {
1040 _insertAdjacentNode(where, createFragment(html, 1040 _insertAdjacentNode(where, new DocumentFragment.html(html,
1041 validator: validator, treeSanitizer: treeSanitizer)); 1041 validator: validator, treeSanitizer: treeSanitizer));
1042 } 1042 }
1043 } 1043 }
1044 1044
1045 $if DART2JS 1045 $if DART2JS
1046 1046
1047 @JSName('insertAdjacentHTML') 1047 @JSName('insertAdjacentHTML')
1048 void _insertAdjacentHtml(String where, String text) native; 1048 void _insertAdjacentHtml(String where, String text) native;
1049 1049
1050 /** 1050 /**
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 if (_parseDocument == null) { 1328 if (_parseDocument == null) {
1329 _parseDocument = document.implementation.createHtmlDocument(''); 1329 _parseDocument = document.implementation.createHtmlDocument('');
1330 _parseRange = _parseDocument.createRange(); 1330 _parseRange = _parseDocument.createRange();
1331 1331
1332 // Workaround for Chrome bug 229142- URIs are not resolved in new doc. 1332 // Workaround for Chrome bug 229142- URIs are not resolved in new doc.
1333 var base = _parseDocument.createElement('base'); 1333 var base = _parseDocument.createElement('base');
1334 base.href = document.baseUri; 1334 base.href = document.baseUri;
1335 _parseDocument.head.append(base); 1335 _parseDocument.head.append(base);
1336 } 1336 }
1337 var contextElement; 1337 var contextElement;
1338 // Head and Area elements can't be used to create document fragments. 1338 if (this is BodyElement) {
1339 // Use the body instead.
1340 if (this is BodyElement || _cannotBeUsedToCreateContextualFragment) {
1341 contextElement = _parseDocument.body; 1339 contextElement = _parseDocument.body;
1342 } else { 1340 } else {
1343 contextElement = _parseDocument.createElement(tagName); 1341 contextElement = _parseDocument.createElement(tagName);
1344 _parseDocument.body.append(contextElement); 1342 _parseDocument.body.append(contextElement);
1345 } 1343 }
1346 var fragment; 1344 var fragment;
1347 if (Range.supportsCreateContextualFragment) { 1345 if (Range.supportsCreateContextualFragment) {
1348 _parseRange.selectNodeContents(contextElement); 1346 _parseRange.selectNodeContents(contextElement);
1349 fragment = _parseRange.createContextualFragment(html); 1347 fragment = _parseRange.createContextualFragment(html);
1350 } else { 1348 } else {
1351 contextElement._innerHtml = html; 1349 contextElement._innerHtml = html;
1352 1350
1353 fragment = _parseDocument.createDocumentFragment(); 1351 fragment = _parseDocument.createDocumentFragment();
1354 while (contextElement.firstChild != null) { 1352 while (contextElement.firstChild != null) {
1355 fragment.append(contextElement.firstChild); 1353 fragment.append(contextElement.firstChild);
1356 } 1354 }
1357 } 1355 }
1358 if (contextElement != _parseDocument.body) { 1356 if (contextElement != _parseDocument.body) {
1359 contextElement.remove(); 1357 contextElement.remove();
1360 } 1358 }
1361 1359
1362 treeSanitizer.sanitizeTree(fragment); 1360 treeSanitizer.sanitizeTree(fragment);
1363 // Copy the fragment over to the main document (fix for 14184) 1361 // Copy the fragment over to the main document (fix for 14184)
1364 document.adoptNode(fragment); 1362 document.adoptNode(fragment);
1365 1363
1366 return fragment; 1364 return fragment;
1367 } 1365 }
1368 1366
1369 /** Test if createContextualFragment is supported for this element types */
1370 bool get _cannotBeUsedToCreateContextualFragment =>
1371 _tagsForWhichCreateContextualFragmentIsNotSupported.contains(tagName);
1372
1373 /**
1374 * A hard-coded list of the tag names for which createContextualFragment
1375 * isn't supported.
1376 */
1377 static const _tagsForWhichCreateContextualFragmentIsNotSupported =
1378 const ['HEAD', 'AREA',
1379 'BASE', 'BASEFONT', 'BR', 'COL', 'COLGROUP', 'EMBED', 'FRAME', 'FRAMESET',
1380 'HR', 'IMAGE', 'IMG', 'INPUT', 'ISINDEX', 'LINK', 'META', 'PARAM',
1381 'SOURCE', 'STYLE', 'TITLE', 'WBR'];
1382
1383 /** 1367 /**
1384 * Parses the HTML fragment and sets it as the contents of this element. 1368 * Parses the HTML fragment and sets it as the contents of this element.
1385 * 1369 *
1386 * This uses the default sanitization behavior to sanitize the HTML fragment, 1370 * This uses the default sanitization behavior to sanitize the HTML fragment,
1387 * use [setInnerHtml] to override the default behavior. 1371 * use [setInnerHtml] to override the default behavior.
1388 */ 1372 */
1389 void set innerHtml(String html) { 1373 void set innerHtml(String html) {
1390 this.setInnerHtml(html); 1374 this.setInnerHtml(html);
1391 } 1375 }
1392 1376
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
1676 const ScrollAlignment._internal(this._value); 1660 const ScrollAlignment._internal(this._value);
1677 toString() => 'ScrollAlignment.$_value'; 1661 toString() => 'ScrollAlignment.$_value';
1678 1662
1679 /// Attempt to align the element to the top of the scrollable area. 1663 /// Attempt to align the element to the top of the scrollable area.
1680 static const TOP = const ScrollAlignment._internal('TOP'); 1664 static const TOP = const ScrollAlignment._internal('TOP');
1681 /// Attempt to center the element in the scrollable area. 1665 /// Attempt to center the element in the scrollable area.
1682 static const CENTER = const ScrollAlignment._internal('CENTER'); 1666 static const CENTER = const ScrollAlignment._internal('CENTER');
1683 /// Attempt to align the element to the bottom of the scrollable area. 1667 /// Attempt to align the element to the bottom of the scrollable area.
1684 static const BOTTOM = const ScrollAlignment._internal('BOTTOM'); 1668 static const BOTTOM = const ScrollAlignment._internal('BOTTOM');
1685 } 1669 }
OLDNEW
« no previous file with comments | « tests/html/element_add_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698