Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- Manifest: devtools/client/netmonitor/test/xpcshell/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
// Test devtools/client/netmonitor/src/utils/request-utils.js function
// |parseJSON| ensure that it correctly handles plain JSON, Base 64
// encoded JSON, and JSON that has XSSI protection prepended to it
"use strict";
const { require } = ChromeUtils.importESModule(
"resource://devtools/shared/loader/Loader.sys.mjs"
);
const {
parseJSON,
} = require("resource://devtools/client/netmonitor/src/utils/request-utils.js");
function run_test() {
const validJSON = '{"item":{"subitem":true},"seconditem":"bar"}';
const base64JSON = btoa(validJSON);
const parsedJSON = { item: { subitem: true }, seconditem: "bar" };
const googleStyleXSSI = ")]}'\n";
const facebookStyleXSSI = "for (;;);";
const notRealXSSIPrevention = "sdgijsdjg";
const while1XSSIPrevention = "while(1)";
const parsedValidJSON = parseJSON(validJSON);
info(JSON.stringify(parsedValidJSON));
ok(
parsedValidJSON.json.item.subitem == parsedJSON.item.subitem &&
parsedValidJSON.json.seconditem == parsedJSON.seconditem,
"plain JSON is parsed correctly"
);
const parsedBase64JSON = parseJSON(base64JSON);
ok(
parsedBase64JSON.json.item.subitem === parsedJSON.item.subitem &&
parsedBase64JSON.json.seconditem === parsedJSON.seconditem,
"base64 encoded JSON is parsed correctly"
);
const parsedGoogleStyleXSSIJSON = parseJSON(googleStyleXSSI + validJSON);
ok(
parsedGoogleStyleXSSIJSON.strippedChars === googleStyleXSSI &&
parsedGoogleStyleXSSIJSON.error === void 0 &&
parsedGoogleStyleXSSIJSON.json.item.subitem === parsedJSON.item.subitem &&
parsedGoogleStyleXSSIJSON.json.seconditem === parsedJSON.seconditem,
"Google style XSSI sequence correctly removed and returned"
);
const parsedFacebookStyleXSSIJSON = parseJSON(facebookStyleXSSI + validJSON);
ok(
parsedFacebookStyleXSSIJSON.strippedChars === facebookStyleXSSI &&
parsedFacebookStyleXSSIJSON.error === void 0 &&
parsedFacebookStyleXSSIJSON.json.item.subitem ===
parsedJSON.item.subitem &&
parsedFacebookStyleXSSIJSON.json.seconditem === parsedJSON.seconditem,
"Facebook style XSSI sequence correctly removed and returned"
);
const parsedWhileXSSIJSON = parseJSON(while1XSSIPrevention + validJSON);
ok(
parsedWhileXSSIJSON.strippedChars === while1XSSIPrevention &&
parsedWhileXSSIJSON.error === void 0 &&
parsedWhileXSSIJSON.json.item.subitem === parsedJSON.item.subitem &&
parsedWhileXSSIJSON.json.seconditem === parsedJSON.seconditem,
"While XSSI sequence correctly removed and returned"
);
const parsedInvalidJson = parseJSON(notRealXSSIPrevention + validJSON);
ok(
!parsedInvalidJson.json && !parsedInvalidJson.strippedChars,
"Parsed invalid JSON does not return a data object or strippedChars"
);
equal(
parsedInvalidJson.error.name,
"SyntaxError",
"Parsing invalid JSON yeilds a SyntaxError"
);
}