Unreviewed test gardening, rebaseline HAR test after r244294.
[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 src="../../../cookies/resources/cookie-utilities.js"></script>
7 <script>
8 function test()
9 {
10     function HARJSONFilter(key, value) {
11         // Filter out the creator.version / browser.version but leave a top level version.
12         if ((key === "creator" || key === "browser") && value.version) {
13             value.version = "<filtered>";
14             return value;
15         }
16
17         // Cache may or may not have been used so remove optional fields which may or may not be set.
18         if (key === "connection")
19             return undefined;
20         if (key === "serverIPAddress")
21             return undefined;
22         if (key === "_transferSize")
23             return undefined;
24         if (key === "_fetchType")
25             return undefined;
26
27         // If cached the protocol might not be available.
28         if (key === "httpVersion")
29             return "<filtered>";
30
31         // Headers include dynamic data.
32         if (key === "headers")
33             return "<filtered>";
34
35         // Dates would change between test runs.
36         if (key.endsWith("DateTime"))
37             return "<filtered>";
38
39         // If any files are modified, we'd need to update the test without this filter.
40         if (key == "size")
41             return "<filtered>";
42
43         // Size data may or may not be available, but could change based on headers.
44         if (key.endsWith("Size"))
45             return "<filtered>";
46
47         // Reduce the file contents.
48         if (key === "text") {
49             InspectorTest.assert(value.length > 0, "The file should have contents.");
50             return "<filtered>";
51         }
52
53         // Sort cookies by name to make cookie order deterministic between test runs. We assume
54         // that cookies have names that consist of only ASCII characters.
55         if (key === "cookies") {
56             value.sort((a, b) => { return a.name === b.name ? 0 : (a.name < b.name ? -1 : 1); });
57             return value;
58         }
59
60         // Since cache may or may not be used, timing data may be variable.
61         // NOTE: SSL should always be -1 for this test case.
62         if (key === "time")
63             return "<filtered>";
64         if (key === "timings") {
65             value.blocked = "<filtered>";
66             value.dns = "<filtered>";
67             value.connect = "<filtered>";
68             value.send = "<filtered>";
69             value.wait = "<filtered>";
70             value.receive = "<filtered>";
71         }
72
73         // PageTimings can be variable.
74         if (key === "onContentLoad" || key === "onLoad")
75             return "<filtered>";
76
77         return value;
78     }
79
80     let suite = InspectorTest.createAsyncSuite("HAR.Page");
81
82     suite.addTestCase({
83         name: "HAR.Basic.Page",
84         description: "Should be able to generate a HAR with all of this test page's resources.",
85         async test() {
86             InspectorTest.reloadPage({ignoreCache: true});
87             await InspectorTest.awaitEvent("LoadComplete");
88             InspectorTest.evaluateInPage("setup()");
89             await InspectorTest.awaitEvent("SetupComplete");
90
91             let resources = [WI.networkManager.mainFrame.mainResource, ...WI.networkManager.mainFrame.resourceCollection];
92             let har = await WI.HARBuilder.buildArchive(resources);
93             InspectorTest.json(har, HARJSONFilter);
94             InspectorTest.evaluateInPage("cleanup()");
95             await InspectorTest.awaitEvent("CleanComplete");
96         }
97     });
98
99     suite.runTestCasesAndFinish();
100 }
101 </script>
102 </head>
103 <body onload="runTest()">
104 <p>HAR Page Test.</p>
105 <script>
106 async function setup()
107 {
108     await resetCookies();
109     await setCookie("simple", "simple");
110     await setCookie("path", "path", {"path": "/A/B/C"}); // This cookie will not be sent in subsequent requests from this page.
111
112     // Secure cookies will only be sent in subsequent requests from this page if the page was served over HTTPS.
113     await setCookie("secure", "secure", {"secure": null});
114     await setCookie("secure-and-http-only", "secure-and-http-only", {"secure": null, "HttpOnly": null});
115
116     await setCookie("with-expiration", "with-expiration", {"Expires": new Date("01/04/5000").toGMTString()});
117     await setCookie("http-only", "http-only", {"HttpOnly": null});
118     await setCookie("same-site-strict", "same-site-strict", {"SameSite": "Strict", "path": "/"});
119     await setCookie("same-site-ignored-because-no-value", "same-site-ignored-because-no-value", {"SameSite": null, "path": "/"});
120     await setCookie("same-site-ignored-because-unknown-value", "same-site-ignored-because-unknown-value", {"SameSite": "invalid", "path": "/"});
121     await setCookie("same-site-lax", "same-site-lax", {"SameSite": "Lax", "path": "/"});
122     TestPage.dispatchEventToFrontend("SetupComplete");
123 }
124
125 async function cleanup()
126 {
127     await resetCookies();
128     TestPage.dispatchEventToFrontend("CleanComplete");
129 }
130
131 window.addEventListener("load", () => {
132     TestPage.dispatchEventToFrontend("LoadComplete");
133 });
134 </script>
135 </body>
136 </html>