Web Inspector: Page: re-add enable/disable after r248454
[WebKit-https.git] / LayoutTests / http / tests / inspector / page / loading-iframe-document-node.html
1 <html>
2 <head>
3 <script type="text/javascript" src="../resources/protocol-test.js"></script>
4 <script>
5
6 var frame;
7
8 function appendIframe()
9 {
10     frame = document.createElement("iframe");
11     frame.src = "http://localhost:8000/inspector/page/resources/slow-test-page.html";
12     document.body.appendChild(frame);
13 }
14
15 function removeIframe()
16 {
17     frame.remove();
18 }
19
20 function test()
21 {
22     /* 
23     Testing that the Node ID can be retrieved before the onload event is triggered:
24     1. Create an iframe and point it to a page with a slow-loading image.
25     2. Wait until the JS context is created in the iframe.
26     3. Use the JS contet to identify the "window.document" object inside the iframe.
27     4. Use the JS object to retrieve the DOM agent nodeid for the document node.
28     */
29
30     InspectorProtocol.eventHandler["Page.frameStartedLoading"] = step2_onFrameStartedLoading;
31     InspectorProtocol.eventHandler["Runtime.executionContextCreated"] = step3_onExecutionContextCreated;
32     InspectorProtocol.eventHandler["Page.loadEventFired"] = onLoadEventFired;
33     
34     var targetFrameId = null;
35
36     function step1_bootstrap() {
37         ProtocolTest.log("step1_bootstrap");
38         // Enable the frame events.
39         InspectorProtocol.sendCommand("Page.enable", {}, function() {
40             // Enable the Runtime.executionContextCreated event.
41             InspectorProtocol.sendCommand("Runtime.enable", {}, function() {
42                 // Initialize the DOM agent.
43                 InspectorProtocol.sendCommand("DOM.getDocument", {}, function() {
44                     ProtocolTest.log("Main document loaded");
45
46                     // Add the iframe to the DOM.
47                     InspectorProtocol.sendCommand("Runtime.evaluate", { "expression": "appendIframe()" });
48                 });
49             });
50         });
51     }
52
53     function step2_onFrameStartedLoading(response)
54     {
55         ProtocolTest.log("step2_onFrameStartedLoading");
56         targetFrameId = response.params.frameId;
57     }
58
59     function step3_onExecutionContextCreated(event)
60     {
61         var frameId = event.params.context.frameId;
62         if (frameId !== targetFrameId)
63             return;
64
65         ProtocolTest.log("step3_onExecutionContextCreated: Requesting document from iframe's context.");
66
67         InspectorProtocol.sendCommand("Runtime.evaluate", {
68             "expression": "document",
69             "objectGroup": "console",
70             "includeCommandLineAPI": false,
71             "contextId": event.params.context.id,
72             "doNotPauseOnExceptionsAndMuteConsole": false,
73             "returnByValue": false,
74             "generatePreview": false
75         }, callback);
76
77         function callback(response)
78         {
79             var objectId = response.result.result.objectId;
80             ProtocolTest.log("Received script object for iframe's document node");
81             step4_requestNode(frameId, objectId);
82         }
83     }
84
85     function step4_requestNode(frameId, objectId)
86     {
87         function callback(response)
88         {
89             ProtocolTest.log(response.result.nodeId ? "PASS: Received node for iframe's document node" : "FAIL: Iframe's document node is not available");
90             completeTest();
91         }
92
93         ProtocolTest.log("step4_requestNode: Requesting DOM node for iframe's document node");
94         InspectorProtocol.sendCommand("DOM.requestNode", { objectId: objectId }, callback);
95     }
96
97     function completeTest()
98     {
99         ProtocolTest.log("Test finished");
100         // Stop loading the iframe to avoid timing out the test.
101         InspectorProtocol.sendCommand("Runtime.evaluate", { "expression": "removeIframe()" });
102         ProtocolTest.completeTest();
103     }
104
105     function onLoadEventFired()
106     {
107         // We should finish the test before this event is triggered.
108         // If you see this in the output, then the slow-image is not loaded correctly in the iframe.
109         ProtocolTest.log("FAIL: Iframe load event fired before the test finished.");
110     }
111
112     step1_bootstrap()
113 }
114
115 </script>
116 </head>
117 <body onload="runTest()">
118 </body>
119 </html>