51 lines
1.2 KiB
HTML
51 lines
1.2 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
description('Check that custom accessor being redefined invalidates our inline caches.');
|
|
|
|
(function() {
|
|
"use strict";
|
|
|
|
let setterCalled = false;
|
|
|
|
function accessProperty() {
|
|
let oScript = document.createElement("script");
|
|
oScript.src = Math.random();
|
|
}
|
|
|
|
// Force "code optimization" by calling the function several times
|
|
for (let i = 0; i < 1000; i++) {
|
|
accessProperty();
|
|
}
|
|
|
|
// Define a custom setter for HTMLScriptElement#src
|
|
const descriptor = Object.getOwnPropertyDescriptor(HTMLScriptElement.prototype, "src");
|
|
Object.defineProperty(HTMLScriptElement.prototype, "src", {
|
|
get: descriptor.get,
|
|
set: function() {
|
|
|
|
setterCalled = true;
|
|
|
|
descriptor.set.apply(this, arguments);
|
|
},
|
|
enumerable: descriptor.enumerable,
|
|
configurable: descriptor.configurable
|
|
});
|
|
|
|
accessProperty();
|
|
|
|
if (setterCalled)
|
|
testPassed("setter called as expected");
|
|
else
|
|
testFailed("Unexpected, setter not called.");
|
|
})();
|
|
</script>
|
|
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|