зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1891690: Return GMT when RFPTarget::JSDateTimeUTC is enabled. r=timhuang
Differential Revision: https://phabricator.services.mozilla.com/D216411
This commit is contained in:
Родитель
708e6e2ae5
Коммит
9429216cdb
|
@ -196,3 +196,5 @@ lineno = "172"
|
|||
|
||||
["browser_timezone.js"]
|
||||
lineno = "176"
|
||||
|
||||
["browser_exslt_timezone_load.js"]
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
/**
|
||||
* 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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче