| <html> |
| <head> |
| <script src="../resources/js-test-pre.js"></script> |
| |
| <script> |
| if (window.testRunner) |
| testRunner.waitUntilDone(); |
| |
| function buildAccessibilityTree(accessibilityObject, indent) { |
| var str = ""; |
| for (var i = 0; i < indent; i++) |
| str += " "; |
| str += accessibilityObject.role; |
| str += " " + accessibilityObject.stringValue; |
| |
| if (accessibilityObject.role == '') |
| str += accessibilityObject.allAttributes(); |
| |
| str += "\n"; |
| document.getElementById("console").innerText += str; |
| |
| if (accessibilityObject.stringValue.indexOf('End of test') >= 0) |
| return false; |
| |
| var count = accessibilityObject.childrenCount; |
| for (var i = 0; i < count; ++i) { |
| if (!buildAccessibilityTree(accessibilityObject.childAtIndex(i), indent + 1)) |
| return false; |
| } |
| |
| return true; |
| } |
| |
| function runTest() |
| { |
| description("This tests that deleting an iframe doesn't cause the accessibility cache to be destroyed and recreated."); |
| |
| if (window.accessibilityController) { |
| window.root = accessibilityController.rootElement; |
| window.body = root.childAtIndex(0); |
| window.before = body.childAtIndex(0).childAtIndex(0); |
| window.iframe = body.childAtIndex(1).childAtIndex(0); |
| window.after = body.childAtIndex(2).childAtIndex(0); |
| |
| window.frameBody = window.iframe.childAtIndex(0); |
| window.frameBodyRole = window.frameBody.role; |
| window.frameGroup = window.frameBody.childAtIndex(0); |
| window.frameGroupRole = window.frameGroup.role; |
| window.frameButton = window.frameGroup.childAtIndex(0); |
| window.frameButtonRole = window.frameButton.role; |
| |
| document.getElementById("console").innerText += "\nBefore:\n"; |
| buildAccessibilityTree(root, 0); |
| |
| // Remove the iframe. |
| document.body.removeChild(document.getElementById("iframe")); |
| |
| window.newRoot = accessibilityController.rootElement; |
| window.newBody = newRoot.childAtIndex(0); |
| window.newBefore = newBody.childAtIndex(0).childAtIndex(0); |
| window.newAfter = newBody.childAtIndex(1).childAtIndex(0); |
| |
| document.getElementById("console").innerText += "\nAfter:\n"; |
| buildAccessibilityTree(newRoot, 0); |
| document.getElementById("console").innerText += "\n"; |
| |
| // Make sure that the accessibility objects from the iframe's nodes |
| // are now invalid by checking that their role is changed - this |
| // is because they've been deleted. |
| shouldBeFalse("frameBodyRole == frameBody.role"); |
| shouldBeFalse("frameGroupRole == frameGroup.role"); |
| shouldBeFalse("frameButtonRole == frameButton.role"); |
| |
| // Make sure that the other nodes are unchanged. |
| shouldBeTrue("root.isEqual(newRoot)"); |
| shouldBeTrue("body.isEqual(newBody)"); |
| shouldBeTrue("before.isEqual(newBefore)"); |
| shouldBeTrue("after.isEqual(newAfter)"); |
| } |
| |
| debug('<br /><span class="pass">TEST COMPLETE</span>'); |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| |
| window.addEventListener('load', function() { |
| setTimeout(runTest, 10); |
| }, false); |
| |
| </script> |
| </head> |
| <body> |
| |
| <p>Before</p> |
| |
| <iframe id="iframe" src="data:text/html,<body><button>Click me</button></body>"></iframe> |
| |
| <p>After</p> |
| |
| <p>End of test</p> |
| |
| <p id="description"></p> |
| <div id="console"></div> |
| |
| </body> |
| </html> |