| <DOCTYPE html> |
| <html> |
| <body> |
| <script src="../../../resources/js-test.js"></script> |
| <script> |
| description("Tests shadowing of window.opener property"); |
| |
| shouldBeNull("window.opener"); |
| evalAndLog("desc = Object.getOwnPropertyDescriptor(window, 'opener')"); |
| shouldBeType("desc.get", "Function"); |
| shouldBeType("desc.set", "Function"); |
| shouldBeTrue("desc.enumerable"); |
| shouldBeTrue("desc.configurable"); |
| |
| openerGetter = desc.get; |
| |
| shouldNotThrow("window.opener = 'foo'"); |
| shouldBeEqualToString("window.opener", "foo"); |
| |
| evalAndLog("desc = Object.getOwnPropertyDescriptor(window, 'opener')"); |
| shouldBeEqualToString("desc.value", "foo"); |
| shouldBeTrue("desc.writable"); |
| shouldBeTrue("desc.enumerable"); |
| shouldBeTrue("desc.configurable"); |
| |
| shouldBeNull("openerGetter.call(window)"); |
| |
| shouldNotThrow("window.opener = null"); |
| shouldBeNull("window.opener"); |
| shouldBeNull("openerGetter.call(window)"); |
| |
| evalAndLog("desc = Object.getOwnPropertyDescriptor(window, 'opener')"); |
| shouldBe("desc.value", "null"); |
| shouldBeTrue("desc.writable"); |
| shouldBeTrue("desc.enumerable"); |
| shouldBeTrue("desc.configurable"); |
| |
| shouldNotThrow("delete window.opener"); |
| shouldBeUndefined("window.opener"); |
| |
| shouldBeNull("openerGetter.call(window)"); |
| |
| evalAndLog("desc = Object.getOwnPropertyDescriptor(window, 'opener')"); |
| shouldBeUndefined("desc"); |
| </script> |
| </body> |
| </html> |