Skip to content
Snippets Groups Projects
Verified Commit fb25351a authored by Fatih's avatar Fatih Committed by Pier Angelo Vendrame
Browse files

Bug 1891690: Return GMT when RFPTarget::JSDateTimeUTC is enabled. r=timhuang

parent 600fa3e4
No related branches found
No related tags found
2 merge requests!1202Bug_43099: 2024 YEC Strings,!1137Bug 30862: Backport fixes for RFP in EXSLT's date
......@@ -196,3 +196,5 @@ lineno = "172"
["browser_timezone.js"]
lineno = "176"
["browser_exslt_timezone_load.js"]
/**
* Bug 1891690 - A test case for verifying EXSLT date will use Atlantic/Reykjavik
* timezone (GMT and "real" equivalent to UTC) after fingerprinting
* resistance is enabled.
*/
function getTimeZone(tab) {
const extractTime = function () {
const xslText = `
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
extension-element-prefixes="date">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:value-of select="date:date-time()" />
</xsl:template>
</xsl:stylesheet>`;
const parser = new DOMParser();
const xsltProcessor = new XSLTProcessor();
const xslStylesheet = parser.parseFromString(xslText, "application/xml");
xsltProcessor.importStylesheet(xslStylesheet);
const xmlDoc = parser.parseFromString("<test />", "application/xml");
const styledDoc = xsltProcessor.transformToDocument(xmlDoc);
const time = styledDoc.firstChild.textContent;
return time;
};
const extractTimeExpr = `(${extractTime.toString()})();`;
return SpecialPowers.spawn(
tab.linkedBrowser,
[extractTimeExpr],
async funccode => content.eval(funccode)
);
}
add_task(async function test_new_window() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.fingerprintingProtection", true],
["privacy.fingerprintingProtection.overrides", "+JSDateTimeUTC"],
],
});
// Open a tab for extracting the time zone from XSLT.
const tab = await BrowserTestUtils.openNewForegroundTab({
gBrowser,
opening: TEST_PATH + "file_dummy.html",
forceNewProcess: true,
});
SpecialPowers.Cu.getJSTestingFunctions().setTimeZone("America/Toronto");
const timeZone = await getTimeZone(tab);
ok(timeZone.endsWith("+00:00"), "Timezone was spoofed.");
BrowserTestUtils.removeTab(tab);
await SpecialPowers.popPrefEnv();
});
......@@ -590,7 +590,15 @@ nsresult txEXSLTFunctionCall::evaluate(txIEvalContext* aContext,
// http://exslt.org/date/functions/date-time/
PRExplodedTime prtime;
PR_ExplodeTime(PR_Now(), PR_LocalTimeParameters, &prtime);
Document* sourceDoc = getSourceDocument(aContext);
NS_ENSURE_STATE(sourceDoc);
PR_ExplodeTime(
PR_Now(),
sourceDoc->ShouldResistFingerprinting(RFPTarget::JSDateTimeUTC)
? PR_GMTParameters
: PR_LocalTimeParameters,
&prtime);
int32_t offset =
(prtime.tm_params.tp_gmt_offset + prtime.tm_params.tp_dst_offset) /
......@@ -634,7 +642,7 @@ Expr::ResultType txEXSLTFunctionCall::getReturnType() {
bool txEXSLTFunctionCall::isSensitiveTo(ContextSensitivity aContext) {
if (mType == txEXSLTType::NODE_SET || mType == txEXSLTType::SPLIT ||
mType == txEXSLTType::TOKENIZE) {
mType == txEXSLTType::TOKENIZE || mType == txEXSLTType::DATE_TIME) {
return (aContext & PRIVATE_CONTEXT) || argsSensitiveTo(aContext);
}
return argsSensitiveTo(aContext);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment