diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /devtools/client/netmonitor/test/browser_net_resend.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'devtools/client/netmonitor/test/browser_net_resend.js')
-rw-r--r-- | devtools/client/netmonitor/test/browser_net_resend.js | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_resend.js b/devtools/client/netmonitor/test/browser_net_resend.js new file mode 100644 index 000000000..7b540ec50 --- /dev/null +++ b/devtools/client/netmonitor/test/browser_net_resend.js @@ -0,0 +1,174 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * Tests if resending a request works. + */ + +const ADD_QUERY = "t1=t2"; +const ADD_HEADER = "Test-header: true"; +const ADD_UA_HEADER = "User-Agent: Custom-Agent"; +const ADD_POSTDATA = "&t3=t4"; + +add_task(function* () { + let { tab, monitor } = yield initNetMonitor(POST_DATA_URL); + info("Starting test... "); + + let { panelWin } = monitor; + let { document, EVENTS, NetMonitorView } = panelWin; + let { RequestsMenu } = NetMonitorView; + + RequestsMenu.lazyUpdate = false; + + let wait = waitForNetworkEvents(monitor, 0, 2); + yield ContentTask.spawn(tab.linkedBrowser, {}, function* () { + content.wrappedJSObject.performRequests(); + }); + yield wait; + + let origItem = RequestsMenu.getItemAtIndex(0); + + let onTabUpdated = panelWin.once(EVENTS.TAB_UPDATED); + RequestsMenu.selectedItem = origItem; + yield onTabUpdated; + + // add a new custom request cloned from selected request + let onPopulated = panelWin.once(EVENTS.CUSTOMREQUESTVIEW_POPULATED); + RequestsMenu.cloneSelectedRequest(); + yield onPopulated; + + testCustomForm(origItem.attachment); + + let customItem = RequestsMenu.selectedItem; + testCustomItem(customItem, origItem); + + // edit the custom request + yield editCustomForm(); + testCustomItemChanged(customItem, origItem); + + // send the new request + wait = waitForNetworkEvents(monitor, 0, 1); + RequestsMenu.sendCustomRequest(); + yield wait; + + let sentItem = RequestsMenu.selectedItem; + testSentRequest(sentItem.attachment, origItem.attachment); + + return teardown(monitor); + + function testCustomItem(item, orig) { + let method = item.target.querySelector(".requests-menu-method").value; + let origMethod = orig.target.querySelector(".requests-menu-method").value; + is(method, origMethod, "menu item is showing the same method as original request"); + + let file = item.target.querySelector(".requests-menu-file").value; + let origFile = orig.target.querySelector(".requests-menu-file").value; + is(file, origFile, "menu item is showing the same file name as original request"); + + let domain = item.target.querySelector(".requests-menu-domain").value; + let origDomain = orig.target.querySelector(".requests-menu-domain").value; + is(domain, origDomain, "menu item is showing the same domain as original request"); + } + + function testCustomItemChanged(item, orig) { + let file = item.target.querySelector(".requests-menu-file").value; + let expectedFile = orig.target.querySelector(".requests-menu-file").value + + "&" + ADD_QUERY; + + is(file, expectedFile, "menu item is updated to reflect url entered in form"); + } + + /* + * Test that the New Request form was populated correctly + */ + function testCustomForm(data) { + is(document.getElementById("custom-method-value").value, data.method, + "new request form showing correct method"); + + is(document.getElementById("custom-url-value").value, data.url, + "new request form showing correct url"); + + let query = document.getElementById("custom-query-value"); + is(query.value, "foo=bar\nbaz=42\ntype=urlencoded", + "new request form showing correct query string"); + + let headers = document.getElementById("custom-headers-value").value.split("\n"); + for (let {name, value} of data.requestHeaders.headers) { + ok(headers.indexOf(name + ": " + value) >= 0, "form contains header from request"); + } + + let postData = document.getElementById("custom-postdata-value"); + is(postData.value, data.requestPostData.postData.text, + "new request form showing correct post data"); + } + + /* + * Add some params and headers to the request form + */ + function* editCustomForm() { + panelWin.focus(); + + let query = document.getElementById("custom-query-value"); + let queryFocus = once(query, "focus", false); + // Bug 1195825: Due to some unexplained dark-matter with promise, + // focus only works if delayed by one tick. + query.setSelectionRange(query.value.length, query.value.length); + executeSoon(() => query.focus()); + yield queryFocus; + + // add params to url query string field + type(["VK_RETURN"]); + type(ADD_QUERY); + + let headers = document.getElementById("custom-headers-value"); + let headersFocus = once(headers, "focus", false); + headers.setSelectionRange(headers.value.length, headers.value.length); + headers.focus(); + yield headersFocus; + + // add a header + type(["VK_RETURN"]); + type(ADD_HEADER); + + // add a User-Agent header, to check if default headers can be modified + // (there will be two of them, first gets overwritten by the second) + type(["VK_RETURN"]); + type(ADD_UA_HEADER); + + let postData = document.getElementById("custom-postdata-value"); + let postFocus = once(postData, "focus", false); + postData.setSelectionRange(postData.value.length, postData.value.length); + postData.focus(); + yield postFocus; + + // add to POST data + type(ADD_POSTDATA); + } + + /* + * Make sure newly created event matches expected request + */ + function testSentRequest(data, origData) { + is(data.method, origData.method, "correct method in sent request"); + is(data.url, origData.url + "&" + ADD_QUERY, "correct url in sent request"); + + let { headers } = data.requestHeaders; + let hasHeader = headers.some(h => `${h.name}: ${h.value}` == ADD_HEADER); + ok(hasHeader, "new header added to sent request"); + + let hasUAHeader = headers.some(h => `${h.name}: ${h.value}` == ADD_UA_HEADER); + ok(hasUAHeader, "User-Agent header added to sent request"); + + is(data.requestPostData.postData.text, + origData.requestPostData.postData.text + ADD_POSTDATA, + "post data added to sent request"); + } + + function type(string) { + for (let ch of string) { + EventUtils.synthesizeKey(ch, {}, panelWin); + } + } +}); |