78 lines
3 KiB
JavaScript
78 lines
3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
// 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"
|
|
);
|
|
}
|