browser_net_raw_response.js (4841B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 /** 7 * Tests if showing raw response works and is persisted. 8 */ 9 10 const DEFAULT_RAW_RESPONSE_PREF = "devtools.netmonitor.ui.default-raw-response"; 11 12 add_task(async function () { 13 await pushPref(DEFAULT_RAW_RESPONSE_PREF, false); 14 15 const { tab, monitor } = await initNetMonitor( 16 JSON_BASIC_URL + "?name=nogrip", 17 { 18 requestCount: 1, 19 } 20 ); 21 info("Starting test... "); 22 23 const { document, store, windowRequire } = monitor.panelWin; 24 const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); 25 26 store.dispatch(Actions.batchEnable(false)); 27 28 // Trigger JSON request 29 await performRequests(monitor, tab, 1); 30 31 info("selecting first request"); 32 const firstRequestItem = document.querySelectorAll(".request-list-item")[0]; 33 EventUtils.sendMouseEvent({ type: "mousedown" }, firstRequestItem); 34 35 info("switching to response panel"); 36 const waitForRespPanel = waitForDOM( 37 document, 38 "#response-panel .properties-view" 39 ); 40 const respPanelButton = document.querySelector("#response-tab"); 41 respPanelButton.click(); 42 await waitForRespPanel; 43 44 ok( 45 !getRawResponseToggle(document).checked, 46 "Raw Response toggle isn't checked" 47 ); 48 ok( 49 !getRawResponseCodeMirrorElement(document), 50 "The CodeMirror instance is not rendered" 51 ); 52 53 info("Click on toggle to show raw response"); 54 getRawResponseToggle(document).click(); 55 await waitFor(() => getRawResponseToggle(document).checked); 56 ok(true, "Toggle is now checked"); 57 await waitFor(() => getRawResponseCodeMirrorElement(document)); 58 ok(true, "The CodeMirror instance is rendered"); 59 is( 60 Services.prefs.getBoolPref(DEFAULT_RAW_RESPONSE_PREF), 61 true, 62 "Pref is now true" 63 ); 64 65 info("Check that the toggle is persisted when navigating within side panels"); 66 info("Switch to request panel"); 67 const waitForRequestPanel = waitForDOM(document, "#request-panel"); 68 document.querySelector("#request-tab").click(); 69 await waitForRequestPanel; 70 71 info("Switch back to response panel"); 72 const waitForRawResponsePanel = waitFor(() => 73 getRawResponseCodeMirrorElement(document) 74 ); 75 respPanelButton.click(); 76 await waitForRawResponsePanel; 77 ok( 78 true, 79 "The CodeMirror instance is rendered when switching back to response panel" 80 ); 81 ok(getRawResponseToggle(document).checked, "Raw toggle is still checked"); 82 83 await closeDetailPanel(document); 84 85 info("Reload the page to see the HTML request"); 86 let waitForHTMLRequest = waitForNetworkEvents(monitor, 1); 87 await reloadBrowser(); 88 await waitForHTMLRequest; 89 90 info("Click on HTML request and wait for raw HTML response to be displayed"); 91 EventUtils.sendMouseEvent( 92 { type: "mousedown" }, 93 document.querySelectorAll(".request-list-item")[0] 94 ); 95 await waitFor(() => getRawResponseCodeMirrorElement(document)); 96 ok(true, "Raw response is displayed"); 97 ok(!getHtmlPreviewElement(document), "The html preview is not displayed"); 98 ok(getRawResponseToggle(document).checked, "Raw toggle is still checked"); 99 100 info("Click on toggle to hide raw response"); 101 getRawResponseToggle(document).click(); 102 await waitFor(() => !getRawResponseToggle(document).checked); 103 ok(true, "Toggle is not checked anymore"); 104 await waitFor(() => !getRawResponseCodeMirrorElement(document)); 105 ok(true, "CodeMirror editor isn't displayed anymore"); 106 ok(!!getHtmlPreviewElement(document), "The html preview is displayed"); 107 is( 108 Services.prefs.getBoolPref(DEFAULT_RAW_RESPONSE_PREF), 109 false, 110 "Pref is now false" 111 ); 112 113 await closeDetailPanel(document); 114 115 info("Reload the page to see the HTML request"); 116 waitForHTMLRequest = waitForNetworkEvents(monitor, 1); 117 await reloadBrowser(); 118 await waitForHTMLRequest; 119 120 info( 121 "Click on HTML request and wait for rendered HTML response to be displayed" 122 ); 123 EventUtils.sendMouseEvent( 124 { type: "mousedown" }, 125 document.querySelectorAll(".request-list-item")[0] 126 ); 127 await waitFor(() => getHtmlPreviewElement(document)); 128 ok(true, "The html preview is displayed"); 129 ok( 130 !getRawResponseCodeMirrorElement(document), 131 "The CodeMirror editor is not displayed" 132 ); 133 ok( 134 !getRawResponseToggle(document).checked, 135 "The Raw toggle is not checked anymore" 136 ); 137 138 return teardown(monitor); 139 }); 140 141 function getRawResponseToggle(doc) { 142 return doc.querySelector("#response-panel .devtools-checkbox-toggle"); 143 } 144 145 function getRawResponseCodeMirrorElement(doc) { 146 return doc.querySelector("#response-panel .cm-editor"); 147 } 148 149 function getHtmlPreviewElement(doc) { 150 return doc.querySelector(".html-preview"); 151 } 152 153 function closeDetailPanel(doc) { 154 doc.querySelector(".sidebar-toggle").click(); 155 return waitFor(() => !doc.querySelector(".network-details-bar")); 156 }