Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • gk/tor-browser
  • peterstory/tor-browser
  • sanketh/tor-browser
  • acat/tor-browser
  • sysrqb/tor-browser
  • boklm/tor-browser
  • dan/tor-browser
  • fabrizio/tor-browser
  • victorvw/tor-browser
  • aguestuser/tor-browser
  • WofWca/tor-browser
  • p13dz/tor-browser
  • mwolfe/tor-browser
  • tpo/applications/tor-browser
  • brade/tor-browser
  • pierov/tor-browser
  • ma1/tor-browser
  • JeremyRand/tor-browser
  • henry/tor-browser
  • msimonelli/tor-browser
  • cypherpunks1/tor-browser
  • blackZwork/tor-browser
  • starlingroot/tor-browser
  • cohosh/tor-browser
  • t-m-w/tor-browser
  • trinity-1686a/tor-browser
  • HHN/tor-browser
  • emmapeel/tor-browser
  • Achintya_Sharma/tor-browser
  • guest475646844/tor-browser
  • Mima/tor-browser
  • morgan/tor-browser
  • clairehurst/tor-browser
  • NoisyCoil/tor-browser
  • gus/tor-browser
  • Francewhoa/tor-browser
  • novialriptide/tor-browser
  • jwilde/tor-browser
  • brizental/tor-browser
  • ourhopeforfreedom/tor-browser
  • onyinyang/tor-browser
  • Noino/tor-browser
  • murmelurmel/tor-browser
43 results
Show changes
Commits on Source (3)
......@@ -196,3 +196,7 @@ lineno = "172"
["browser_timezone.js"]
lineno = "176"
["browser_exslt_timezone_load.js"]
["browser_exslt_time_precision.js"]
/**
* Bug 1912129 - A test case for verifying EXSLT date will report second-precise
* time fingerprinting resistance is enabled.
*/
function getTime(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", "+ReduceTimerPrecision"],
],
});
// Open a tab for extracting the time from XSLT.
const tab = await BrowserTestUtils.openNewForegroundTab({
gBrowser,
opening: TEST_PATH + "file_dummy.html",
forceNewProcess: true,
});
for (let i = 0; i < 10; i++) {
// eslint-disable-next-line mozilla/no-arbitrary-setTimeout
await new Promise(res => setTimeout(res, 25));
// The regex could be a lot shorter (e.g. /\.(\d{3})/) but I wrote the whole
// thing to make sure the time is in the expected format and to allow us
// to re-use this regex in the future if we need to.
// Note: Date format is not locale dependent.
const regex = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.(\d{3})[-+]\d{2}:\d{2}/;
const time = await getTime(tab);
const [, milliseconds] = time.match(regex);
is(milliseconds, "000", "Date's precision was reduced to seconds.");
}
BrowserTestUtils.removeTab(tab);
await SpecialPowers.popPrefEnv();
});
/**
* 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,14 +590,22 @@ nsresult txEXSLTFunctionCall::evaluate(txIEvalContext* aContext,
// http://exslt.org/date/functions/date-time/
PRExplodedTime prtime;
PR_ExplodeTime(PR_Now(),
nsContentUtils::ShouldResistFingerprinting(
"We are not allowed to access the document at this "
"stage (we are given a txEarlyEvalContext context).",
RFPTarget::JSDateTimeUTC)
? PR_GMTParameters
: PR_LocalTimeParameters,
&prtime);
Document* sourceDoc = getSourceDocument(aContext);
NS_ENSURE_STATE(sourceDoc);
PRTimeParamFn timezone =
sourceDoc->ShouldResistFingerprinting(RFPTarget::JSDateTimeUTC)
? PR_GMTParameters
: PR_LocalTimeParameters;
PRTime time =
sourceDoc->ShouldResistFingerprinting(RFPTarget::ReduceTimerPrecision)
? (PRTime)nsRFPService::ReduceTimePrecisionAsSecs(
(double)PR_Now() / PR_USEC_PER_SEC, 0,
RTPCallerType::ResistFingerprinting) *
PR_USEC_PER_SEC
: PR_Now();
PR_ExplodeTime(time, timezone, &prtime);
int32_t offset =
(prtime.tm_params.tp_gmt_offset + prtime.tm_params.tp_dst_offset) /
......@@ -641,7 +649,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);
......