| <!DOCTYPE html> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script src="../fast/dom/custom/testutils.js"></script> |
| <body> |
| <script> |
| 'use strict'; |
| |
| // TODO(dominicc): Port fork() etc. to work with testharness, then |
| // remove these. |
| function debug() {} |
| function finishJSTest() {} |
| |
| (() => { |
| |
| if (fork()) { |
| // The controlling parent frame. |
| let t = async_test('constructor destroys the context retrieving prototype'); |
| let watcher = new EventWatcher(t, window, 'message'); |
| watcher.wait_for('message').then(t.step_func((event) => { |
| assert_equals(event.data, 'PASS destroyed context'); |
| return watcher.wait_for('message'); |
| })).then(t.step_func((event) => { |
| assert_equals(event.data, 'PASS child done'); |
| t.done(); |
| })); |
| } else { |
| // The child frame. |
| let should_destroy = false; |
| let proxy; |
| function BadConstructor() { |
| should_destroy = true; |
| return Reflect.construct(HTMLElement, [], proxy); |
| } |
| proxy = new Proxy(BadConstructor, { |
| get(receiver, name) { |
| if (should_destroy && name == 'prototype') { |
| destroyContext(); |
| return 42; |
| } |
| return receiver[name]; |
| } |
| }); |
| window.customElements.define('x-x', proxy); |
| try { |
| new proxy(); |
| } finally { |
| done(); |
| } |
| } |
| |
| })(); |
| </script> |