Revision 15b0fb362111166b6d279074071e27dbae6aee37 authored by Majid Valipour on 25 October 2017, 18:18:27 UTC, committed by Blink WPT Bot on 25 October 2017, 18:28:47 UTC
This reverts commit 74e8a0f74fc589a58258655f59aa7f1efa666155. Reason for revert: This caused an issue on Linux64 no-op build. Bug: 778310 Original change's description: > Rename CSS scroll-boundary-behavior to overscroll-behavior > > The name change was decided here [1]. > > This is the minimal patch to change the publicly exposed CSS property. > It is intentionally small to make it easier to merge with M63. So, > internally Blink and content still use ScrollBoundaryBehavior name which will > be updated in the follow up patch larger patch. > > > [1] https://github.com/WICG/scroll-boundary-behavior/issues/24 > > Bug: 776776 > Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 > Change-Id: Iaa6ad62253ed7fe9ed7f0ee9865ffda852b17801 > Reviewed-on: https://chromium-review.googlesource.com/737090 > Reviewed-by: Dimitri Glazkov <dglazkov@chromium.org> > Reviewed-by: Sandra Sun <sunyunjia@chromium.org> > Commit-Queue: Majid Valipour <majidvp@chromium.org> > Cr-Commit-Position: refs/heads/master@{#511493} TBR=majidvp@chromium.org,sunyunjia@chromium.org,dglazkov@chromium.org Change-Id: I1d71b71c5d3c263fb2ff13c9d7a9184399df946f No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: 776776 Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2 Reviewed-on: https://chromium-review.googlesource.com/738294 Reviewed-by: Majid Valipour <majidvp@chromium.org> Commit-Queue: Majid Valipour <majidvp@chromium.org> Cr-Commit-Position: refs/heads/master@{#511515}
1 parent 511cb08
HTMLSlotElement-interface.html
<!DOCTYPE html>
<html>
<head>
<title>Shadow DOM: HTMLSlotElement interface</title>
<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
<meta name="assert" content="HTMLSlotElement must exist on window with name attribute and getAssignedNode() method">
<link rel="help" href="https://w3c.github.io/webcomponents/spec/shadow/#the-slot-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id="log"></div>
<script>
test(function () {
assert_true('HTMLSlotElement' in window, 'HTMLSlotElement must be defined on window');
assert_equals(HTMLSlotElement.prototype.__proto__, HTMLElement.prototype, 'HTMLSlotElement should inherit from HTMLElement');
assert_true(document.createElement('slot') instanceof HTMLSlotElement, 'slot element should be an instance of HTMLSlotElement');
assert_true(document.createElement('slot') instanceof HTMLElement, 'slot element should be an instance of HTMLElement');
}, 'HTMLSlotElement must be defined on window');
test(function () {
assert_true('name' in HTMLSlotElement.prototype, '"name" attribute must be defined on HTMLSlotElement.prototype');
var slotElement = document.createElement('slot');
assert_equals(slotElement.name, '', '"name" attribute must return the empty string when "name" content attribute is not set');
slotElement.setAttribute('name', 'foo');
assert_equals(slotElement.name, 'foo', '"name" attribute must return the value of the "name" content attribute');
slotElement.name = 'bar';
assert_equals(slotElement.name, 'bar', '"name" attribute must return the assigned value');
assert_equals(slotElement.getAttribute('name'), 'bar', '"name" attribute must update the "name" content attribute');
}, '"name" attribute on HTMLSlotElement must reflect "name" attribute');
function testSlotOutsideShadowTree(options)
{
test(function () {
assert_true('assignedNodes' in HTMLSlotElement.prototype, '"assignedNodes" method must be defined on HTMLSlotElement.prototype');
var slotElement = document.createElement('slot');
assert_array_equals(slotElement.assignedNodes(options), [], 'assignedNodes() must return an empty array when the slot element is not in any tree');
document.body.appendChild(slotElement);
assert_array_equals(slotElement.assignedNodes(options), [], 'assignedNodes() must return an empty array when the slot element is in a document tree');
}, 'assignedNodes(' + (options ? JSON.stringify(options) : '')
+ ') on a HTMLSlotElement must return an empty array when the slot element is not in a tree or in a document tree');
}
testSlotOutsideShadowTree(null);
testSlotOutsideShadowTree({flattened: false});
testSlotOutsideShadowTree({flattened: true});
function testSingleLevelOfSlotting(options)
{
test(function () {
assert_true('assignedNodes' in HTMLSlotElement.prototype, '"assignedNodes" method must be defined on HTMLSlotElement.prototype');
var shadowHost = document.createElement('div');
var child = document.createElement('p');
var shadowRoot = shadowHost.attachShadow({mode: 'open'});
var slotElement = document.createElement('slot');
shadowRoot.appendChild(slotElement);
assert_array_equals(slotElement.assignedNodes(options), [], 'assignedNodes() must return an empty array when there are no nodes in the shadow tree');
shadowHost.appendChild(child);
assert_array_equals(slotElement.assignedNodes(options), [child], 'assignedNodes() on a default slot must return an element without slot element');
child.setAttribute('slot', 'foo');
assert_array_equals(slotElement.assignedNodes(options), [], 'assignedNodes() on a default slot must not return an element with non-empty slot attribute');
child.setAttribute('slot', '');
assert_array_equals(slotElement.assignedNodes(options), [child], 'assignedNodes() on a default slot must return an element with empty slot attribute');
slotElement.setAttribute('name', 'bar');
assert_array_equals(slotElement.assignedNodes(options), [], 'assignedNodes() on a named slot must not return an element with empty slot attribute');
slotElement.setAttribute('name', '');
assert_array_equals(slotElement.assignedNodes(options), [child], 'assignedNodes() on an empty name slot must return an element with empty slot attribute');
}, 'assignedNodes(' + (options ? JSON.stringify(options) : '') + ') must return the list of assigned nodes when none of the assigned nodes themselves are slots');
}
testSingleLevelOfSlotting(null);
testSingleLevelOfSlotting({flattened: false});
testSingleLevelOfSlotting({flattened: true});
function testMutatingSlottedContents(options)
{
test(function () {
var shadowHost = document.createElement('div');
var p = document.createElement('p');
var b = document.createElement('b');
shadowHost.appendChild(p);
shadowHost.appendChild(b);
var shadowRoot = shadowHost.attachShadow({mode: 'open'});
var slotElement = document.createElement('slot');
shadowRoot.appendChild(slotElement);
assert_array_equals(slotElement.assignedNodes(options), [p, b], 'assignedNodes must return the distributed nodes');
slotElement.name = 'foo';
assert_array_equals(slotElement.assignedNodes(options), [], 'assignedNodes must be empty when there are no matching elements for the slot name');
b.slot = 'foo';
assert_array_equals(slotElement.assignedNodes(options), [b], 'assignedNodes must return the nodes with the matching slot name');
p.slot = 'foo';
assert_array_equals(slotElement.assignedNodes(options), [p, b], 'assignedNodes must return the nodes with the matching slot name in the tree order');
slotElement.removeAttribute('name');
assert_array_equals(slotElement.assignedNodes(options), [], 'assignedNodes must be empty for a default slot when all elements have "slot" attributes specified');
}, 'assignedNodes(' + (options ? JSON.stringify(options) : '') + ') must update when slot and name attributes are modified');
}
testMutatingSlottedContents(null);
testMutatingSlottedContents({flattened: false});
testMutatingSlottedContents({flattened: true});
function testMutatingSlotName(options)
{
test(function () {
var shadowHost = document.createElement('div');
var child = document.createElement('span');
shadowHost.appendChild(child);
var shadowRoot = shadowHost.attachShadow({mode: 'open'});
var slotElement = document.createElement('slot');
slotElement.name = 'foo';
shadowRoot.appendChild(slotElement);
assert_array_equals(slotElement.assignedNodes(options), [], 'assignedNodes must be empty when there are no matching elements for the slot name');
slotElement.removeAttribute('name');
assert_array_equals(slotElement.assignedNodes(options), [child], 'assignedNodes must be empty when there are no matching elements for the slot name');
}, 'assignedNodes(' + (options ? JSON.stringify(options) : '') + ') must update when a default slot is introduced dynamically by a slot rename');
}
testMutatingSlotName(null);
testMutatingSlotName({flattened: false});
testMutatingSlotName({flattened: true});
function testInsertingAndRemovingSlots(options)
{
test(function () {
var shadowHost = document.createElement('div');
var p = document.createElement('p');
var text = document.createTextNode('');
var comment = document.createComment('');
var processingInstruction = document.createProcessingInstruction('target', 'data');
var b = document.createElement('b');
shadowHost.appendChild(p);
shadowHost.appendChild(text);
shadowHost.appendChild(comment);
shadowHost.appendChild(processingInstruction);
shadowHost.appendChild(b);
var shadowRoot = shadowHost.attachShadow({mode: 'open'});
var firstSlotElement = document.createElement('slot');
shadowRoot.appendChild(firstSlotElement);
var secondSlotElement = document.createElement('slot');
shadowRoot.appendChild(secondSlotElement);
assert_array_equals(firstSlotElement.assignedNodes(options), [p, text, b],
'assignedNodes on a default slot must return the elements without slot attributes and text nodes');
assert_array_equals(secondSlotElement.assignedNodes(options), [],
'assignedNodes on the second unnamed slot element must return an empty array');
shadowRoot.removeChild(firstSlotElement);
assert_array_equals(firstSlotElement.assignedNodes(options), [],
'assignedNodes on a detached formerly-default slot must return an empty array');
assert_array_equals(secondSlotElement.assignedNodes(options), [p, text, b],
'assignedNodes on the second unnamed slot element after removing the first must return the elements without slot attributes and text nodes');
shadowRoot.removeChild(secondSlotElement);
shadowRoot.appendChild(secondSlotElement);
assert_array_equals(firstSlotElement.assignedNodes(options), [],
'Removing and re-inserting a default slot must not change the result of assignedNodes on a detached slot');
assert_array_equals(secondSlotElement.assignedNodes(options), [p, text, b],
'Removing and re-inserting a default slot must not change the result of assignedNodes');
shadowRoot.insertBefore(firstSlotElement, secondSlotElement);
assert_array_equals(firstSlotElement.assignedNodes(options), [p, text, b],
'assignedNodes on a newly inserted unnamed slot element must return the elements without slot attributes and text nodes');
assert_array_equals(secondSlotElement.assignedNodes(options), [],
'assignedNodes on formerly-first but now second unnamed slot element must return an empty array');
}, 'assignedNodes(' + (options ? JSON.stringify(options) : '') + ') must update when slot elements are inserted or removed');
}
testInsertingAndRemovingSlots(null);
testInsertingAndRemovingSlots({flattened: false});
testInsertingAndRemovingSlots({flattened: true});
test(function () {
var outerHost = document.createElement('div');
var outerChild = document.createElement('span');
outerHost.appendChild(outerChild);
var outerShadow = outerHost.attachShadow({mode: 'closed'});
var innerHost = document.createElement('div');
var outerSlot = document.createElement('slot');
var innerChild = document.createElement('b');
outerShadow.appendChild(innerHost);
innerHost.appendChild(outerSlot);
innerHost.appendChild(innerChild);
var innerShadow = innerHost.attachShadow({mode: 'closed'});
var innerSlot = document.createElement('slot');
innerShadow.appendChild(innerSlot);
assert_array_equals(outerSlot.assignedNodes(), [outerChild], 'assignedNodes() on a default slot must return the assigned nodes');
assert_array_equals(outerSlot.assignedNodes({flatten: false}), [outerChild], 'assignedNodes({flatten: false}) on a default slot must return the assigned nodes');
assert_array_equals(outerSlot.assignedNodes({flatten: true}), [outerChild], 'assignedNodes({flatten: true}) on a default slot must return the assigned nodes if they are not themselves slots');
assert_array_equals(innerSlot.assignedNodes(), [outerSlot, innerChild], 'assignedNodes() on a default slot must return the assigned nodes');
assert_array_equals(innerSlot.assignedNodes({flatten: false}), [outerSlot, innerChild], 'assignedNodes({flatten: false}) on a default slot must return the assigned nodes');
assert_array_equals(innerSlot.assignedNodes({flatten: true}), [outerChild, innerChild], 'assignedNodes({flatten: true}) on a default slot must return the distributed nodes');
outerSlot.name = 'foo';
assert_array_equals(outerSlot.assignedNodes(), [], 'assignedNodes() on a named slot must return an empty array if there are no matching elements');
assert_array_equals(outerSlot.assignedNodes({flatten: false}), [], 'assignedNodes({flatten: false}) on a named slot must return an empty array if there are no matching elements');
assert_array_equals(outerSlot.assignedNodes({flatten: true}), [], 'assignedNodes({flatten: true}) on a named slot must return an empty array if there are no matching elements');
assert_array_equals(innerSlot.assignedNodes(), [outerSlot, innerChild], 'assignedNodes() on a default slot must return the assigned nodes');
assert_array_equals(innerSlot.assignedNodes({flatten: false}), [outerSlot, innerChild], 'assignedNodes({flatten: false}) on a default slot must return the assigned nodes');
assert_array_equals(innerSlot.assignedNodes({flatten: true}), [innerChild], 'assignedNodes({flatten: true}) on a default slot must return the distributed nodes');
outerChild.slot = 'foo';
assert_array_equals(outerSlot.assignedNodes(), [outerChild], 'assignedNodes() on a named slot must return matching elements');
assert_array_equals(outerSlot.assignedNodes({flatten: false}), [outerChild], 'assignedNodes({flatten: false}) on a named slot must return matching elements');
assert_array_equals(outerSlot.assignedNodes({flatten: true}), [outerChild], 'assignedNodes({flatten: true}) on a named slot must return matching elements');
assert_array_equals(innerSlot.assignedNodes(), [outerSlot, innerChild], 'assignedNodes() on a default slot must return the assigned nodes');
assert_array_equals(innerSlot.assignedNodes({flatten: false}), [outerSlot, innerChild], 'assignedNodes({flatten: false}) on a default slot must return the assigned nodes');
assert_array_equals(innerSlot.assignedNodes({flatten: true}), [outerChild, innerChild], 'assignedNodes({flatten: true}) on a default slot must return the distributed nodes');
var newInnerSlot = document.createElement('slot');
innerShadow.insertBefore(newInnerSlot, innerSlot);
assert_array_equals(newInnerSlot.assignedNodes(), [outerSlot, innerChild], 'assignedNodes() on a default slot must return the assigned nodes');
assert_array_equals(newInnerSlot.assignedNodes({flatten: false}), [outerSlot, innerChild], 'assignedNodes({flatten: false}) on a default slot must return the assigned nodes');
assert_array_equals(newInnerSlot.assignedNodes({flatten: true}), [outerChild, innerChild], 'assignedNodes({flatten: true}) on a default slot must return the distributed nodes');
assert_array_equals(innerSlot.assignedNodes(), [], 'assignedNodes() on a nameless slot element which appears after a default slot must return an empty array');
assert_array_equals(innerSlot.assignedNodes({flatten: false}), [], 'assignedNodes({flatten: false}) on a nameless slot element which appears after a default slot must return an empty array');
assert_array_equals(innerSlot.assignedNodes({flatten: true}), [], 'assignedNodes({flatten: true}) on a nameless slot element which appears after a default slot must return an empty array');
innerShadow.removeChild(newInnerSlot);
assert_array_equals(newInnerSlot.assignedNodes(), [], 'assignedNodes() must return an empty array when the slot element is not in any tree');
assert_array_equals(newInnerSlot.assignedNodes({flatten: false}), [], 'assignedNodes({flatten: false}) must return an empty array when the slot element is not in any tree');
assert_array_equals(newInnerSlot.assignedNodes({flatten: true}), [], 'assignedNodes({flatten: true}) must return an empty array when the slot element is not in any tree');
assert_array_equals(innerSlot.assignedNodes(), [outerSlot, innerChild], 'assignedNodes() on a default slot must return the assigned nodes');
assert_array_equals(innerSlot.assignedNodes({flatten: false}), [outerSlot, innerChild], 'assignedNodes({flatten: false}) on a default slot must return the assigned nodes');
assert_array_equals(innerSlot.assignedNodes({flatten: true}), [outerChild, innerChild], 'assignedNodes({flatten: true}) on a default slot must return the distributed nodes');
}, 'assignedNodes({flatten: true}) must return the distributed nodes, and assignedNodes() and assignedNodes({flatten: false}) must returned the assigned nodes');
</script>
</body>
</html>
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...