1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/netmonitor/test/browser_net_resend.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,173 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +let gPanelWin; 1.8 +let gPanelDoc; 1.9 + 1.10 +const ADD_QUERY = "t1=t2"; 1.11 +const ADD_HEADER = "Test-header: true"; 1.12 +const ADD_POSTDATA = "t3=t4"; 1.13 + 1.14 +/** 1.15 + * Tests if resending a request works. 1.16 + */ 1.17 + 1.18 +function test() { 1.19 + initNetMonitor(POST_DATA_URL).then(([aTab, aDebuggee, aMonitor]) => { 1.20 + info("Starting test... "); 1.21 + 1.22 + gPanelWin = aMonitor.panelWin; 1.23 + gPanelDoc = gPanelWin.document; 1.24 + 1.25 + let { NetMonitorView } = gPanelWin; 1.26 + let { RequestsMenu } = NetMonitorView; 1.27 + let TAB_UPDATED = aMonitor.panelWin.EVENTS.TAB_UPDATED; 1.28 + let CUSTOMREQUESTVIEW_POPULATED = aMonitor.panelWin.EVENTS.CUSTOMREQUESTVIEW_POPULATED; 1.29 + 1.30 + RequestsMenu.lazyUpdate = false; 1.31 + 1.32 + waitForNetworkEvents(aMonitor, 0, 2).then(() => { 1.33 + let origItem = RequestsMenu.getItemAtIndex(0); 1.34 + RequestsMenu.selectedItem = origItem; 1.35 + 1.36 + waitFor(aMonitor.panelWin, TAB_UPDATED).then(() => { 1.37 + // add a new custom request cloned from selected request 1.38 + RequestsMenu.cloneSelectedRequest(); 1.39 + return waitFor(aMonitor.panelWin, CUSTOMREQUESTVIEW_POPULATED); 1.40 + }).then(() => { 1.41 + testCustomForm(origItem.attachment); 1.42 + 1.43 + let customItem = RequestsMenu.selectedItem; 1.44 + testCustomItem(customItem, origItem); 1.45 + 1.46 + // edit the custom request 1.47 + editCustomForm(() => { 1.48 + testCustomItemChanged(customItem, origItem); 1.49 + 1.50 + waitForNetworkEvents(aMonitor, 0, 1).then(() => { 1.51 + let sentItem = RequestsMenu.selectedItem; 1.52 + testSentRequest(sentItem.attachment, origItem.attachment); 1.53 + finishUp(aMonitor); 1.54 + }); 1.55 + // send the new request 1.56 + RequestsMenu.sendCustomRequest(); 1.57 + }); 1.58 + }); 1.59 + }); 1.60 + 1.61 + aDebuggee.performRequests(); 1.62 + }); 1.63 +} 1.64 + 1.65 +function testCustomItem(aItem, aOrigItem) { 1.66 + let method = aItem.target.querySelector(".requests-menu-method").value; 1.67 + let origMethod = aOrigItem.target.querySelector(".requests-menu-method").value; 1.68 + is(method, origMethod, "menu item is showing the same method as original request"); 1.69 + 1.70 + let file = aItem.target.querySelector(".requests-menu-file").value; 1.71 + let origFile = aOrigItem.target.querySelector(".requests-menu-file").value; 1.72 + is(file, origFile, "menu item is showing the same file name as original request"); 1.73 + 1.74 + let domain = aItem.target.querySelector(".requests-menu-domain").value; 1.75 + let origDomain = aOrigItem.target.querySelector(".requests-menu-domain").value; 1.76 + is(domain, origDomain, "menu item is showing the same domain as original request"); 1.77 +} 1.78 + 1.79 +function testCustomItemChanged(aItem, aOrigItem) { 1.80 + let file = aItem.target.querySelector(".requests-menu-file").value; 1.81 + let expectedFile = aOrigItem.target.querySelector(".requests-menu-file").value + "&" + ADD_QUERY; 1.82 + 1.83 + is(file, expectedFile, "menu item is updated to reflect url entered in form"); 1.84 +} 1.85 + 1.86 +/* 1.87 + * Test that the New Request form was populated correctly 1.88 + */ 1.89 +function testCustomForm(aData) { 1.90 + is(gPanelDoc.getElementById("custom-method-value").value, aData.method, 1.91 + "new request form showing correct method"); 1.92 + 1.93 + is(gPanelDoc.getElementById("custom-url-value").value, aData.url, 1.94 + "new request form showing correct url"); 1.95 + 1.96 + let query = gPanelDoc.getElementById("custom-query-value"); 1.97 + is(query.value, "foo=bar\nbaz=42\ntype=urlencoded", 1.98 + "new request form showing correct query string"); 1.99 + 1.100 + let headers = gPanelDoc.getElementById("custom-headers-value").value.split("\n"); 1.101 + for (let {name, value} of aData.requestHeaders.headers) { 1.102 + ok(headers.indexOf(name + ": " + value) >= 0, "form contains header from request"); 1.103 + } 1.104 + 1.105 + let postData = gPanelDoc.getElementById("custom-postdata-value"); 1.106 + is(postData.value, aData.requestPostData.postData.text, 1.107 + "new request form showing correct post data"); 1.108 +} 1.109 + 1.110 +/* 1.111 + * Add some params and headers to the request form 1.112 + */ 1.113 +function editCustomForm(callback) { 1.114 + gPanelWin.focus(); 1.115 + 1.116 + let query = gPanelDoc.getElementById("custom-query-value"); 1.117 + query.addEventListener("focus", function onFocus() { 1.118 + query.removeEventListener("focus", onFocus, false); 1.119 + 1.120 + // add params to url query string field 1.121 + type(["VK_RETURN"]); 1.122 + type(ADD_QUERY); 1.123 + 1.124 + let headers = gPanelDoc.getElementById("custom-headers-value"); 1.125 + headers.addEventListener("focus", function onFocus() { 1.126 + headers.removeEventListener("focus", onFocus, false); 1.127 + 1.128 + // add a header 1.129 + type(["VK_RETURN"]); 1.130 + type(ADD_HEADER); 1.131 + 1.132 + let postData = gPanelDoc.getElementById("custom-postdata-value"); 1.133 + postData.addEventListener("focus", function onFocus() { 1.134 + postData.removeEventListener("focus", onFocus, false); 1.135 + 1.136 + // add to POST data 1.137 + type(ADD_POSTDATA); 1.138 + callback(); 1.139 + }, false); 1.140 + postData.focus(); 1.141 + }, false); 1.142 + headers.focus(); 1.143 + }, false); 1.144 + query.focus(); 1.145 +} 1.146 + 1.147 +/* 1.148 + * Make sure newly created event matches expected request 1.149 + */ 1.150 +function testSentRequest(aData, aOrigData) { 1.151 + is(aData.method, aOrigData.method, "correct method in sent request"); 1.152 + is(aData.url, aOrigData.url + "&" + ADD_QUERY, "correct url in sent request"); 1.153 + 1.154 + let hasHeader = aData.requestHeaders.headers.some((header) => { 1.155 + return (header.name + ": " + header.value) == ADD_HEADER; 1.156 + }) 1.157 + ok(hasHeader, "new header added to sent request"); 1.158 + 1.159 + is(aData.requestPostData.postData.text, 1.160 + aOrigData.requestPostData.postData.text + ADD_POSTDATA, 1.161 + "post data added to sent request"); 1.162 +} 1.163 + 1.164 + 1.165 +function type(aString) { 1.166 + for (let ch of aString) { 1.167 + EventUtils.synthesizeKey(ch, {}, gPanelWin); 1.168 + } 1.169 +} 1.170 + 1.171 +function finishUp(aMonitor) { 1.172 + gPanelWin = null; 1.173 + gPanelDoc = null; 1.174 + 1.175 + teardown(aMonitor).then(finish); 1.176 +}