diff --git a/devtools/client/jsonview/converter-child.js b/devtools/client/jsonview/converter-child.js index dbea39c67967..d272dad00fb1 100644 --- a/devtools/client/jsonview/converter-child.js +++ b/devtools/client/jsonview/converter-child.js @@ -206,21 +206,22 @@ function initialHTML(doc) { os = "linux"; } - let base = doc.createElement("base"); - base.href = "resource://devtools/client/jsonview/"; + // The base URI is prepended to all URIs instead of using a element + // because the latter can be blocked by a CSP base-uri directive (bug 1316393) + let baseURI = "resource://devtools/client/jsonview/"; let style = doc.createElement("link"); style.rel = "stylesheet"; style.type = "text/css"; - style.href = "css/main.css"; + style.href = baseURI + "css/main.css"; let script = doc.createElement("script"); - script.src = "lib/require.js"; - script.dataset.main = "viewer-config"; + script.src = baseURI + "lib/require.js"; + script.dataset.main = baseURI + "viewer-config.js"; script.defer = true; let head = doc.createElement("head"); - head.append(base, style, script); + head.append(style, script); return "\n" + startTag("html", { diff --git a/devtools/client/jsonview/test/browser.ini b/devtools/client/jsonview/test/browser.ini index 7a9e217be33a..785bf28cc775 100644 --- a/devtools/client/jsonview/test/browser.ini +++ b/devtools/client/jsonview/test/browser.ini @@ -4,6 +4,8 @@ subsuite = devtools support-files = array_json.json array_json.json^headers^ + csp_json.json + csp_json.json^headers^ doc_frame_script.js head.js invalid_json.json @@ -27,6 +29,7 @@ skip-if = (os == 'linux' && bits == 32 && debug) # bug 1328915, disable linux32 [browser_jsonview_copy_rawdata.js] subsuite = clipboard skip-if = (os == 'linux' && bits == 32 && debug) # bug 1328915, disable linux32 debug devtools for timeouts +[browser_jsonview_csp_json.js] [browser_jsonview_empty_object.js] [browser_jsonview_filter.js] [browser_jsonview_invalid_json.js] diff --git a/devtools/client/jsonview/test/browser_jsonview_csp_json.js b/devtools/client/jsonview/test/browser_jsonview_csp_json.js new file mode 100644 index 000000000000..f7f898ba870e --- /dev/null +++ b/devtools/client/jsonview/test/browser_jsonview_csp_json.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const TEST_JSON_URL = URL_ROOT + "csp_json.json"; + +add_task(function* () { + info("Test CSP JSON started"); + + yield addJsonViewTab(TEST_JSON_URL); + + let count = yield getElementCount(".jsonPanelBox .treeTable .treeRow"); + is(count, 1, "There must be one row"); +}); diff --git a/devtools/client/jsonview/test/csp_json.json b/devtools/client/jsonview/test/csp_json.json new file mode 100644 index 000000000000..ab802ac98840 --- /dev/null +++ b/devtools/client/jsonview/test/csp_json.json @@ -0,0 +1 @@ +{"csp": true} diff --git a/devtools/client/jsonview/test/csp_json.json^headers^ b/devtools/client/jsonview/test/csp_json.json^headers^ new file mode 100644 index 000000000000..d6d0a72a4bcf --- /dev/null +++ b/devtools/client/jsonview/test/csp_json.json^headers^ @@ -0,0 +1,2 @@ +Content-Type: application/json +Content-Security-Policy: default-src 'none'; base-uri 'none'; diff --git a/devtools/client/jsonview/viewer-config.js b/devtools/client/jsonview/viewer-config.js index 1a1bebf5cee7..387a0dd4ebfb 100644 --- a/devtools/client/jsonview/viewer-config.js +++ b/devtools/client/jsonview/viewer-config.js @@ -21,7 +21,7 @@ * of the code base, so it's consistent and modules can be easily reused. */ require.config({ - baseUrl: ".", + baseUrl: "resource://devtools/client/jsonview/", paths: { "devtools/client/shared": "resource://devtools/client/shared", "devtools/shared": "resource://devtools/shared",