browser/devtools/netmonitor/test/browser_net_resend.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:8cecf9e6aa23
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 let gPanelWin;
5 let gPanelDoc;
6
7 const ADD_QUERY = "t1=t2";
8 const ADD_HEADER = "Test-header: true";
9 const ADD_POSTDATA = "t3=t4";
10
11 /**
12 * Tests if resending a request works.
13 */
14
15 function test() {
16 initNetMonitor(POST_DATA_URL).then(([aTab, aDebuggee, aMonitor]) => {
17 info("Starting test... ");
18
19 gPanelWin = aMonitor.panelWin;
20 gPanelDoc = gPanelWin.document;
21
22 let { NetMonitorView } = gPanelWin;
23 let { RequestsMenu } = NetMonitorView;
24 let TAB_UPDATED = aMonitor.panelWin.EVENTS.TAB_UPDATED;
25 let CUSTOMREQUESTVIEW_POPULATED = aMonitor.panelWin.EVENTS.CUSTOMREQUESTVIEW_POPULATED;
26
27 RequestsMenu.lazyUpdate = false;
28
29 waitForNetworkEvents(aMonitor, 0, 2).then(() => {
30 let origItem = RequestsMenu.getItemAtIndex(0);
31 RequestsMenu.selectedItem = origItem;
32
33 waitFor(aMonitor.panelWin, TAB_UPDATED).then(() => {
34 // add a new custom request cloned from selected request
35 RequestsMenu.cloneSelectedRequest();
36 return waitFor(aMonitor.panelWin, CUSTOMREQUESTVIEW_POPULATED);
37 }).then(() => {
38 testCustomForm(origItem.attachment);
39
40 let customItem = RequestsMenu.selectedItem;
41 testCustomItem(customItem, origItem);
42
43 // edit the custom request
44 editCustomForm(() => {
45 testCustomItemChanged(customItem, origItem);
46
47 waitForNetworkEvents(aMonitor, 0, 1).then(() => {
48 let sentItem = RequestsMenu.selectedItem;
49 testSentRequest(sentItem.attachment, origItem.attachment);
50 finishUp(aMonitor);
51 });
52 // send the new request
53 RequestsMenu.sendCustomRequest();
54 });
55 });
56 });
57
58 aDebuggee.performRequests();
59 });
60 }
61
62 function testCustomItem(aItem, aOrigItem) {
63 let method = aItem.target.querySelector(".requests-menu-method").value;
64 let origMethod = aOrigItem.target.querySelector(".requests-menu-method").value;
65 is(method, origMethod, "menu item is showing the same method as original request");
66
67 let file = aItem.target.querySelector(".requests-menu-file").value;
68 let origFile = aOrigItem.target.querySelector(".requests-menu-file").value;
69 is(file, origFile, "menu item is showing the same file name as original request");
70
71 let domain = aItem.target.querySelector(".requests-menu-domain").value;
72 let origDomain = aOrigItem.target.querySelector(".requests-menu-domain").value;
73 is(domain, origDomain, "menu item is showing the same domain as original request");
74 }
75
76 function testCustomItemChanged(aItem, aOrigItem) {
77 let file = aItem.target.querySelector(".requests-menu-file").value;
78 let expectedFile = aOrigItem.target.querySelector(".requests-menu-file").value + "&" + ADD_QUERY;
79
80 is(file, expectedFile, "menu item is updated to reflect url entered in form");
81 }
82
83 /*
84 * Test that the New Request form was populated correctly
85 */
86 function testCustomForm(aData) {
87 is(gPanelDoc.getElementById("custom-method-value").value, aData.method,
88 "new request form showing correct method");
89
90 is(gPanelDoc.getElementById("custom-url-value").value, aData.url,
91 "new request form showing correct url");
92
93 let query = gPanelDoc.getElementById("custom-query-value");
94 is(query.value, "foo=bar\nbaz=42\ntype=urlencoded",
95 "new request form showing correct query string");
96
97 let headers = gPanelDoc.getElementById("custom-headers-value").value.split("\n");
98 for (let {name, value} of aData.requestHeaders.headers) {
99 ok(headers.indexOf(name + ": " + value) >= 0, "form contains header from request");
100 }
101
102 let postData = gPanelDoc.getElementById("custom-postdata-value");
103 is(postData.value, aData.requestPostData.postData.text,
104 "new request form showing correct post data");
105 }
106
107 /*
108 * Add some params and headers to the request form
109 */
110 function editCustomForm(callback) {
111 gPanelWin.focus();
112
113 let query = gPanelDoc.getElementById("custom-query-value");
114 query.addEventListener("focus", function onFocus() {
115 query.removeEventListener("focus", onFocus, false);
116
117 // add params to url query string field
118 type(["VK_RETURN"]);
119 type(ADD_QUERY);
120
121 let headers = gPanelDoc.getElementById("custom-headers-value");
122 headers.addEventListener("focus", function onFocus() {
123 headers.removeEventListener("focus", onFocus, false);
124
125 // add a header
126 type(["VK_RETURN"]);
127 type(ADD_HEADER);
128
129 let postData = gPanelDoc.getElementById("custom-postdata-value");
130 postData.addEventListener("focus", function onFocus() {
131 postData.removeEventListener("focus", onFocus, false);
132
133 // add to POST data
134 type(ADD_POSTDATA);
135 callback();
136 }, false);
137 postData.focus();
138 }, false);
139 headers.focus();
140 }, false);
141 query.focus();
142 }
143
144 /*
145 * Make sure newly created event matches expected request
146 */
147 function testSentRequest(aData, aOrigData) {
148 is(aData.method, aOrigData.method, "correct method in sent request");
149 is(aData.url, aOrigData.url + "&" + ADD_QUERY, "correct url in sent request");
150
151 let hasHeader = aData.requestHeaders.headers.some((header) => {
152 return (header.name + ": " + header.value) == ADD_HEADER;
153 })
154 ok(hasHeader, "new header added to sent request");
155
156 is(aData.requestPostData.postData.text,
157 aOrigData.requestPostData.postData.text + ADD_POSTDATA,
158 "post data added to sent request");
159 }
160
161
162 function type(aString) {
163 for (let ch of aString) {
164 EventUtils.synthesizeKey(ch, {}, gPanelWin);
165 }
166 }
167
168 function finishUp(aMonitor) {
169 gPanelWin = null;
170 gPanelDoc = null;
171
172 teardown(aMonitor).then(finish);
173 }

mercurial