| <html> |
| <head> |
| <script type="text/javascript" src="../resources/protocol-test.js"></script> |
| <script> |
| |
| var frame; |
| |
| function appendIframe() |
| { |
| frame = document.createElement("iframe"); |
| frame.src = "http://localhost:8000/inspector/page/resources/slow-test-page.html"; |
| document.body.appendChild(frame); |
| } |
| |
| function removeIframe() |
| { |
| frame.remove(); |
| } |
| |
| function test() |
| { |
| /* |
| Testing that the Node ID can be retrieved before the onload event is triggered: |
| 1. Create an iframe and point it to a page with a slow-loading image. |
| 2. Wait until the JS context is created in the iframe. |
| 3. Use the JS contet to identify the "window.document" object inside the iframe. |
| 4. Use the JS object to retrieve the DOM agent nodeid for the document node. |
| */ |
| |
| InspectorProtocol.eventHandler["Page.frameStartedLoading"] = step2_onFrameStartedLoading; |
| InspectorProtocol.eventHandler["Runtime.executionContextCreated"] = step3_onExecutionContextCreated; |
| InspectorProtocol.eventHandler["Page.loadEventFired"] = onLoadEventFired; |
| |
| var targetFrameId = null; |
| |
| function step1_bootstrap() { |
| ProtocolTest.log("step1_bootstrap"); |
| // Enable the frame events. |
| InspectorProtocol.sendCommand("Page.enable", {}, function() { |
| // Enable the Runtime.executionContextCreated event. |
| InspectorProtocol.sendCommand("Runtime.enable", {}, function() { |
| // Initialize the DOM agent. |
| InspectorProtocol.sendCommand("DOM.getDocument", {}, function() { |
| ProtocolTest.log("Main document loaded"); |
| |
| // Add the iframe to the DOM. |
| InspectorProtocol.sendCommand("Runtime.evaluate", { "expression": "appendIframe()" }); |
| }); |
| }); |
| }); |
| } |
| |
| function step2_onFrameStartedLoading(response) |
| { |
| ProtocolTest.log("step2_onFrameStartedLoading"); |
| targetFrameId = response.params.frameId; |
| } |
| |
| function step3_onExecutionContextCreated(event) |
| { |
| var frameId = event.params.context.frameId; |
| if (frameId !== targetFrameId) |
| return; |
| |
| ProtocolTest.log("step3_onExecutionContextCreated: Requesting document from iframe's context."); |
| |
| InspectorProtocol.sendCommand("Runtime.evaluate", { |
| "expression": "document", |
| "objectGroup": "console", |
| "includeCommandLineAPI": false, |
| "contextId": event.params.context.id, |
| "doNotPauseOnExceptionsAndMuteConsole": false, |
| "returnByValue": false, |
| "generatePreview": false |
| }, callback); |
| |
| function callback(response) |
| { |
| var objectId = response.result.result.objectId; |
| ProtocolTest.log("Received script object for iframe's document node"); |
| step4_requestNode(frameId, objectId); |
| } |
| } |
| |
| function step4_requestNode(frameId, objectId) |
| { |
| function callback(response) |
| { |
| ProtocolTest.log(response.result.nodeId ? "PASS: Received node for iframe's document node" : "FAIL: Iframe's document node is not available"); |
| completeTest(); |
| } |
| |
| ProtocolTest.log("step4_requestNode: Requesting DOM node for iframe's document node"); |
| InspectorProtocol.sendCommand("DOM.requestNode", { objectId: objectId }, callback); |
| } |
| |
| function completeTest() |
| { |
| ProtocolTest.log("Test finished"); |
| // Stop loading the iframe to avoid timing out the test. |
| InspectorProtocol.sendCommand("Runtime.evaluate", { "expression": "removeIframe()" }); |
| ProtocolTest.completeTest(); |
| } |
| |
| function onLoadEventFired() |
| { |
| // We should finish the test before this event is triggered. |
| // If you see this in the output, then the slow-image is not loaded correctly in the iframe. |
| ProtocolTest.log("FAIL: Iframe load event fired before the test finished."); |
| } |
| |
| step1_bootstrap() |
| } |
| |
| </script> |
| </head> |
| <body onload="runTest()"> |
| </body> |
| </html> |