/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at . */ // Tests loading sourcemapped sources, setting breakpoints, and // stepping in them. "use strict"; const EXPECTED_COOKIE = "credentials=true"; // This test checks that the DevTools sourcemap request includes credentials // from the page. See Bug 1899389. add_task(async function () { const httpServer = setupTestServer(); const port = httpServer.identity.primaryPort; const dbg = await initDebuggerWithAbsoluteURL( `http://localhost:${port}/index.html` ); await waitForSources(dbg, "min.js"); const minifiedSrc = findSource(dbg, "min.js"); await selectSource(dbg, minifiedSrc); const footerButton = findElement(dbg, "sourceMapFooterButton"); is( footerButton.textContent, "bundle file", "Sourcemap button mentions the bundle file" ); ok(!footerButton.classList.contains("not-mapped")); info("Click on jump to original source link from editor's footer"); const mappedSourceLink = findElement(dbg, "mappedSourceLink"); is( mappedSourceLink.textContent, "From original.js", "The link to mapped source mentions the original file name" ); mappedSourceLink.click(); const originalSrc = findSource(dbg, "original.js"); await waitForSelectedSource(dbg, originalSrc); info("The original source was successfully selected"); }); function setupTestServer() { // The test server will serve: // - index.html: page which loads a min.js file // - min.js: simple minified js file, linked to the map min.js.map // - min.js.map: the corresponding sourcemap // - original.js: the original file // // The sourcemap file will only be returned if the request contains a cookie // set in the page. Otherwise it will return a 404. const httpServer = createTestHTTPServer(); httpServer.registerContentType("html", "text/html"); httpServer.registerContentType("js", "application/javascript"); httpServer.registerContentType("map", "text/plain"); // Page: index.html httpServer.registerPathHandler("/index.html", function (request, response) { response.setStatusLine(request.httpVersion, 200, "OK"); response.write(`

Sourcemap with credentials

`); }); // Bundle: min.js httpServer.registerPathHandler("/min.js", function (request, response) { response.setStatusLine(request.httpVersion, 200, "OK"); response.setHeader("Content-Type", "application/javascript", false); response.write(`function sum(n,u){return n+u} //# sourceMappingURL=min.js.map `); }); // Sourcemap: min.js.map httpServer.registerPathHandler("/min.js.map", function (request, response) { if ( request.hasHeader("Cookie") && request.getHeader("Cookie") == EXPECTED_COOKIE ) { response.setStatusLine(request.httpVersion, 200, "OK"); response.setHeader("Content-Type", "application/javascript", false); response.write( `{"version":3,"sources":["original.js"],"names":["sum","first","second"],"mappings":"AAAA,SAASA,IAAIC,EAAOC,GAClB,OAAOD,EAAQC"}` ); } else { response.setStatusLine(request.httpVersion, 404, "Not found"); } }); // Original: original.js httpServer.registerPathHandler("/original.js", function (request, response) { response.setStatusLine(request.httpVersion, 200, "OK"); response.setHeader("Content-Type", "application/javascript", false); response.write(`function sum(first, second) { return first + second; }`); }); return httpServer; }