File: scrollIntoView-iframes.html

package info (click to toggle)
firefox 147.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,324 kB
  • sloc: cpp: 7,607,156; javascript: 6,532,492; ansic: 3,775,158; python: 1,415,368; xml: 634,556; asm: 438,949; java: 186,241; sh: 62,751; makefile: 18,079; objc: 13,092; perl: 12,808; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (82 lines) | stat: -rw-r--r-- 2,586 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSSOM View Test: scrollIntoView in iframes</title>
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
<link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview">
<meta name="assert" content="Checks that scrollIntoView inside and iframe can scroll in the parent document if it has the same origin.">

<style>
.scroller {
  overflow: hidden;
  height: 500px;
  border: solid;
}
.scroller::before {
  content: "";
  display: block;
  height: 500px;
}
.scroller::after {
  content: "";
  display: block;
  height: 300px;
}
iframe {
  height: 1000px;
  border: none;
}
</style>

<div id="log"></div>

<div class="scroller">
  <iframe id="same-origin-iframe"></iframe>
</div>
<div class="scroller">
  <iframe id="cross-origin-iframe" sandbox="allow-scripts"></iframe>
</div>

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
let sameOriginIframe = document.getElementById("same-origin-iframe");
let crossOriginIframe = document.getElementById("cross-origin-iframe");
let sameOriginWindow = sameOriginIframe.contentWindow;
let crossOriginWindow = crossOriginIframe.contentWindow;

promise_setup(() => Promise.all([
  new Promise(resolve => {
    sameOriginIframe.addEventListener("load", resolve);
    sameOriginIframe.src = "support/scrollIntoView-iframes-child.html";
  }),
  new Promise(resolve => {
    crossOriginIframe.addEventListener("load", resolve);
    crossOriginIframe.src = "support/scrollIntoView-iframes-child.html";
  })
]));

promise_test(async () => {
  assert_equals(sameOriginWindow.scrollY, 100, "scrollY");
}, "scrollIntoView in same-origin iframe can scroll in inner window");

promise_test(async () => {
  assert_equals(sameOriginIframe.parentElement.scrollTop, 1200, "scrollTop");
}, "scrollIntoView in same-origin iframe can scroll in parent window");

promise_test(async () => {
  let scrollY = await new Promise(resolve => {
    addEventListener("message", event => {
      if (event.source === crossOriginWindow) {
        resolve(event.data);
      }
    });
    crossOriginWindow.postMessage("scrollY", "*");
  });
  assert_equals(scrollY, 100, "scrollY");
}, "scrollIntoView in cross-origin iframe can scroll in inner window");

promise_test(async () => {
  assert_equals(crossOriginIframe.parentElement.scrollTop, 0, "scrollTop");
}, "scrollIntoView in cross-origin iframe can't scroll in parent window");
</script>