| if (window.testRunner) |
| testRunner.waitUntilDone(); |
| |
| var constructors = ["Image", "MessageChannel", "Option", "XMLHttpRequest", "Audio"]; |
| |
| window.onload = function () { |
| testFrame = document.getElementById("testFrame"); |
| storedConstructors = []; |
| // Identity checks |
| for (var i = 0; i < constructors.length; i++) { |
| var constructor = constructors[i]; |
| try { |
| shouldBe("testFrame.contentWindow." + constructor, "testFrame.contentWindow."+constructor); |
| shouldBeTrue("testFrame.contentWindow." + constructor + " !== window." + constructor); |
| testFrame.contentWindow[constructor].testProperty = "property set successfully"; |
| shouldBe("testFrame.contentWindow." + constructor + ".testProperty", '"property set successfully"'); |
| storedConstructors[constructor] = testFrame.contentWindow[constructor]; |
| } catch (e) { |
| testFailed("Testing " + constructor + " threw " + e); |
| } |
| } |
| testFrame.onload = function() { |
| if (window.GCController) |
| GCController.collect(); |
| |
| // Test properties after load |
| for (var i = 0; i < constructors.length; i++) { |
| var constructor = constructors[i]; |
| try { |
| // Repeat the identity checks to be safe |
| shouldBe("testFrame.contentWindow." + constructor, "testFrame.contentWindow."+constructor); |
| shouldBeTrue("testFrame.contentWindow." + constructor + " !== window." + constructor); |
| |
| // Make sure that we haven't reused the constructors from the old document |
| shouldBeTrue("testFrame.contentWindow." + constructor + " !== storedConstructors." + constructor); |
| shouldBe("storedConstructors." + constructor + ".testProperty", '"property set successfully"'); |
| |
| // Make sure we haven't kept anything over from the original document |
| shouldBeUndefined("testFrame.contentWindow." + constructor + ".testProperty"); |
| // Make sure we're getting the same constructor as the frame does internally |
| shouldBeTrue("testFrame.contentWindow." + constructor + ".cachedOnOwnerDocument"); |
| } catch (e) { |
| testFailed("Testing " + constructor + " threw " + e); |
| } |
| } |
| |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| }; |
| testFrame.src = 'data:text/html,<script>var constructors = ["Image", "MessageChannel", "Option", "XMLHttpRequest", "Audio"];' |
| + 'for(var i = 0; i < constructors.length; i++) if(window[constructors[i]])' |
| + 'window[constructors[i]].cachedOnOwnerDocument = true;</script>'; |
| } |