| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body onload="runTest()"> |
| <iframe src="http://localhost:8000/security/resources/blank.html"></iframe> |
| <script> |
| description("Tests that using another window's property getter does not bypass cross-origin checks."); |
| jsTestIsAsync = true; |
| |
| function callingFunctionShouldRejectPromiseWithErrorName(functionName, errorName) |
| { |
| return Object.getOwnPropertyDescriptor(window, functionName).value.call(crossOriginWindow).then(() => { |
| testFailed("Calling " + functionName + " did not reject the promise"); |
| }, (e) => { |
| if (e.name == errorName) |
| testPassed("Calling " + functionName + " rejected promise with exception " + errorName + "."); |
| else |
| testFailed("Calling " + functionName + " should reject promise with exception " + errorName + ". Rejected with exception " + e.name + " instead."); |
| }); |
| } |
| |
| async function runTest() |
| { |
| crossOriginWindow = frames[0]; |
| shouldThrowErrorName('Object.getOwnPropertyDescriptor(window, "document").get.call(crossOriginWindow)', 'SecurityError'); |
| shouldThrowErrorName('Object.getOwnPropertyDescriptor(window, "name").get.call(crossOriginWindow)', 'SecurityError'); |
| shouldThrowErrorName('Object.getOwnPropertyDescriptor(window, "menubar").get.call(crossOriginWindow)', 'SecurityError'); |
| shouldThrowErrorName('Object.getOwnPropertyDescriptor(window, "scrollbars").get.call(crossOriginWindow)', 'SecurityError'); |
| shouldThrowErrorName('Object.getOwnPropertyDescriptor(window, "navigator").get.call(crossOriginWindow)', 'SecurityError'); |
| shouldThrowErrorName('Object.getOwnPropertyDescriptor(window, "screenX").get.call(crossOriginWindow)', 'SecurityError'); |
| await callingFunctionShouldRejectPromiseWithErrorName('createImageBitmap', 'SecurityError'); |
| await callingFunctionShouldRejectPromiseWithErrorName('fetch', 'SecurityError'); |
| shouldThrowErrorName('Object.getOwnPropertyDescriptor(window.__proto__, "constructor").get.call(crossOriginWindow)', 'TypeError'); |
| shouldThrowErrorName('Object.getOwnPropertyDescriptor(window.__proto__, "constructor").get.call(crossOriginWindow.__proto__)', 'TypeError'); |
| shouldThrowErrorName('crossOriginWindow.constructor', 'SecurityError'); |
| shouldThrowErrorName('Object.getOwnPropertyDescriptor(crossOriginWindow.__proto__, "constructor").value', 'SecurityError'); |
| shouldBeTrue('Object.getOwnPropertyDescriptor(window, "location").get.call(crossOriginWindow) === crossOriginWindow.location'); |
| finishJSTest(); |
| } |
| </script> |
| </body> |
| <script src="../../resources/js-test-post.js"></script> |
| </html> |