Use no-cache fetch mode when loading main documents with location.reload()
[WebKit-https.git] / LayoutTests / http / tests / inspector / network / har / har-page.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="utf-8">
5 <script src="../../resources/inspector-test.js"></script>
6 <script>
7 function test()
8 {
9     function HARJSONFilter(key, value) {
10         // Filter out the creator.version / browser.version but leave a top level version.
11         if ((key === "creator" || key === "browser") && value.version) {
12             value.version = "<filtered>";
13             return value;
14         }
15
16         // Cache may or may not have been used so remove optional fields which may or may not be set.
17         if (key === "connection")
18             return undefined;
19         if (key === "serverIPAddress")
20             return undefined;
21         if (key === "_transferSize")
22             return undefined;
23         if (key === "_fetchType")
24             return undefined;
25
26         // If cached the protocol might not be available.
27         if (key === "httpVersion")
28             return "<filtered>";
29
30         // Headers include dynamic data.
31         if (key === "headers")
32             return "<filtered>";
33
34         // Dates would change between test runs.
35         if (key.endsWith("DateTime"))
36             return "<filtered>";
37
38         // Size data may or may not be available, but could change based on headers.
39         if (key.endsWith("Size"))
40             return "<filtered>";
41
42         // Reduce the file contents.
43         if (key === "text")
44             return "<filtered text (" + value.length + ")>";
45         // Reduce the file size since cache may or may not be used.
46         if (key === "size")
47             return "<filtered>";
48
49         // Since cache may or may not be used, timing data may be variable.
50         // NOTE: SSL should always be -1 for this test case.
51         if (key === "time")
52             return "<filtered>";
53         if (key === "timings") {
54             value.blocked = "<filtered>";
55             value.dns = "<filtered>";
56             value.connect = "<filtered>";
57             value.send = "<filtered>";
58             value.wait = "<filtered>";
59             value.receive = "<filtered>";
60         }
61
62         // PageTimings can be variable.
63         if (key === "onContentLoad" || key === "onLoad")
64             return "<filtered>";
65
66         return value;
67     }
68
69     let suite = InspectorTest.createAsyncSuite("HAR.Page");
70
71     suite.addTestCase({
72         name: "HAR.Basic.Page",
73         description: "Should be able to generate a HAR with all of this test page's resources.",
74         async test() {
75             InspectorTest.reloadPage({ignoreCache: true});
76             await InspectorTest.awaitEvent("LoadComplete");
77
78             let resources = [];
79             resources.push(WI.frameResourceManager.mainFrame.mainResource);
80             for (let resource of WI.frameResourceManager.mainFrame.resourceCollection.items)
81                 resources.push(resource);
82
83             let har = await WI.HARBuilder.buildArchive(resources);
84             InspectorTest.json(har, HARJSONFilter);
85         }
86     });
87
88     suite.runTestCasesAndFinish();
89 }
90 </script>
91 </head>
92 <body onload="runTest()">
93 <p>HAR Page Test.</p>
94 <script>
95 window.addEventListener("load", () => {
96     TestPage.dispatchEventToFrontend("LoadComplete");
97 });
98 </script>
99 </body>
100 </html>