/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; requestLongerTimeout(3); const TEST_URL = URL_ROOT + "doc_network-observer.html"; const TEST_URL_CSP = URL_ROOT + "override_script_src_self.html"; const REQUEST_URL = URL_ROOT + `sjs_network-observer-test-server.sjs?sts=200&fmt=js`; const CORS_REQUEST_URL = REQUEST_URL.replace("example.com", "plop.example.com"); const CSP_SCRIPT_TO_OVERRIDE = URL_ROOT + "csp_script_to_override.js"; const GZIPPED_REQUEST_URL = URL_ROOT + `gzipped.sjs`; const OVERRIDE_FILENAME = "override.js"; const OVERRIDE_HTML_FILENAME = "override.html"; add_task(async function testLocalOverride() { await addTab(TEST_URL); let eventsCount = 0; const networkObserver = new NetworkObserver({ ignoreChannelFunction: channel => ![REQUEST_URL, CORS_REQUEST_URL].includes(channel.URI.spec), onNetworkEvent: event => { info("received a network event"); eventsCount++; return createNetworkEventOwner(event); }, }); const overrideFile = getChromeDir(getResolvedURI(gTestPath)); overrideFile.append(OVERRIDE_FILENAME); info(" override " + REQUEST_URL + " to " + overrideFile.path + "\n"); networkObserver.override(REQUEST_URL, overrideFile.path); info("Assert that request and cached request are overriden"); await SpecialPowers.spawn( gBrowser.selectedBrowser, [REQUEST_URL], async _url => { const response = await content.wrappedJSObject.fetch(_url); const responsecontent = await response.text(); is( responsecontent, `"use strict";\ndocument.title = "Override script loaded";\n`, "the response content has been overriden" ); const secondResponse = await content.wrappedJSObject.fetch(_url); const secondResponsecontent = await secondResponse.text(); is( secondResponsecontent, `"use strict";\ndocument.title = "Override script loaded";\n`, "the cached response content has been overriden" ); } ); info("Assert that JS scripts can be overriden"); await SpecialPowers.spawn( gBrowser.selectedBrowser, [REQUEST_URL], async _url => { const script = content.document.createElement("script"); const onLoad = new Promise(resolve => script.addEventListener("load", resolve, { once: true }) ); script.src = _url; content.document.body.appendChild(script); await onLoad; is( content.document.title, "Override script loaded", "The