Revision e9f36aa0be6522db24e0d27b293a78ba68214d02 authored by Ehsan Karamad on 25 April 2018, 15:35:03 UTC, committed by Blink WPT Bot on 25 April 2018, 15:45:19 UTC
If 'vertical-scroll' is disabled for an <iframe>, then it should not be
able to affect the vertical scroll position. One way to block is to use
scripted scrolling by calling "element.scrollIntoView()".

To block such frames (whose feature's disabled), programmatic recursive
scroll calls are not forwarded to parent frames. This means if a given
<iframe> is blocked, then all the calls to scrollIntoView() are limited
to the scope of frame (i.e., elements becoming visible in the frame).
This applies to all the nested <iframe>'s of a disabled frame as well
since they would have the feature disabled as part of propagating the
container policy.

Link to explainer/design document for "vertical-scroll":
https://docs.google.com/document/d/1qiWelnMlsOHuT_CQ0Zm_qEAf54HS5DhoIvEDHBlfqps/edit?usp=sharing

Bug: 611982
Change-Id: I0e06b399ad890e263128b997cfbb04eb3bdd1494
Reviewed-on: https://chromium-review.googlesource.com/1014191
Reviewed-by: Ian Clelland <iclelland@chromium.org>
Reviewed-by: Ehsan Karamad <ekaramad@chromium.org>
Reviewed-by: David Bokan <bokan@chromium.org>
Commit-Queue: Ehsan Karamad <ekaramad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#553561}
1 parent 6c62c5b
Raw File
interfaces.tentative.html
<!doctype html>
<title>XPath tests</title>
<!-- This is a tentative test because there's no real spec for XPath IDL.
     The closest thing is: -->
<link rel="help" href="https://wiki.whatwg.org/wiki/DOM_XPath">
<script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script>
<script src='/resources/WebIDLParser.js'></script>
<script src='/resources/idlharness.js'></script>
<script type='text/plain'>
[Constructor] interface XPathEvaluator {
  [NewObject] XPathExpression createExpression(DOMString expression,
                                               optional XPathNSResolver? resolver);
  Node createNSResolver(Node nodeResolver);
  XPathResult evaluate(DOMString expression, Node contextNode,
                       optional XPathNSResolver? resolver,
                       optional unsigned short type,
                       optional object? result);
};

interface XPathExpression {
  XPathResult evaluate(Node contextNode,
                       optional unsigned short type,
                       optional object? result);
};

callback interface XPathNSResolver {
  DOMString? lookupNamespaceURI(DOMString? prefix);
};

interface XPathResult {
  const unsigned short ANY_TYPE = 0;
  const unsigned short NUMBER_TYPE = 1;
  const unsigned short STRING_TYPE = 2;
  const unsigned short BOOLEAN_TYPE = 3;
  const unsigned short UNORDERED_NODE_ITERATOR_TYPE = 4;
  const unsigned short ORDERED_NODE_ITERATOR_TYPE = 5;
  const unsigned short UNORDERED_NODE_SNAPSHOT_TYPE = 6;
  const unsigned short ORDERED_NODE_SNAPSHOT_TYPE = 7;
  const unsigned short ANY_UNORDERED_NODE_TYPE = 8;
  const unsigned short FIRST_ORDERED_NODE_TYPE = 9;
  readonly attribute unsigned short resultType;
  readonly attribute double numberValue;
  readonly attribute DOMString stringValue;
  readonly attribute boolean booleanValue;
  readonly attribute Node? singleNodeValue;
  readonly attribute boolean invalidIteratorState;
  readonly attribute unsigned long snapshotLength;
  Node? iterateNext();
  Node? snapshotItem(unsigned long index);
};
</script>
<script type='text/plain' class='untested'>
interface Document {};
Document implements XPathEvaluator;
</script>
<script>
"use strict";
var evaluator = document;
var resolver = function() {};
var resolver2 = document.createNSResolver(document.documentElement);
var expression = document.createExpression("//*", resolver);
var result = document.evaluate("//*", document.documentElement, resolver, 0, null);

var idlArray;
setup(function() {
  idlArray = new IdlArray();
  [].forEach.call(document.querySelectorAll("script[type=text\\/plain]"), function(node) {
    if (node.className == "untested") {
      idlArray.add_untested_idls(node.textContent);
    } else {
      idlArray.add_idls(node.textContent);
    }
  });
  idlArray.add_objects({
    Document: ["document"],
    XPathExpression: ["expression"],
    XPathResolver: ["resolver", "resolver2"],
    XPathResult: ["result"]
  });
});
idlArray.test();
</script>
back to top