summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/browsers/origin/relaxing-the-same-origin-restriction/support/document_domain_frame.html
blob: 61f54af3593167a0b09145f5d9755275cce98622 (plain)
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
<!DOCTYPE html>
<script>
  let cache = window;
  // "foo" needs to be a var so it's a property on the global.
  var foo = 'Reachable 1';
  // "bar" needs to be a var so it's a property on the global.
  var bar = { foo: 'Reachable 2' };
  location.foo = 'Reachable 3';
  document.foo = 'Reachable 4';
  window.addEventListener('message', e => {
    if (e.data.domain !== undefined) {
      try {
        document.domain = e.data.domain;
        e.ports[0].postMessage('Done');
      } catch(error) {
        e.ports[0].postMessage(error.name);
      }
    } else if (e.data['poke-at-sibling'] !== undefined) {
      try {
        var sekrit = parent[e.data['poke-at-sibling']].document.body.querySelector('#sekrit').value;
        e.ports[0].postMessage(sekrit);
      } catch(error) {
        e.ports[0].postMessage(error.name);
      }
    } else if (e.data.cache != undefined) {
      let path = e.data.cache;
      try {
        while (path.length != 0) {
          cache = cache[path.shift()];
        }
        e.ports[0].postMessage('cached');
      } catch (error) {
        e.ports[0].postMessage(error.name);
      }
    } else if (e.data == 'touch-cached') {
      try {
        e.ports[0].postMessage(cache.foo);
      } catch (error) {
        e.ports[0].postMessage(error.name);
      }
    } else if (e.data == 'poke-at-parent') {
      try {
        var sekrit = window.parent.document.body.querySelector('#sekrit').value;
        e.ports[0].postMessage(sekrit);
      } catch(error) {
        e.ports[0].postMessage(error.name);
      }
    }
  });
  window.parent.postMessage('Hi!', '*');
</script>
<input id="sekrit" value="omg!">