Bug 1376931 Part 3: Change Gecko media queries of resolution to compare in dppx units without unit conversion. r=heycam

MozReview-Commit-ID: DPdz1Tmv24R

--HG--
extra : rebase_source : ddf4b4aae7fdc8ca62de714b9f222daee5959743
This commit is contained in:
Brad Werth 2017-09-27 16:53:27 -07:00
Родитель 1450446d11
Коммит 559b3e4021
2 изменённых файлов: 24 добавлений и 16 удалений

Просмотреть файл

@ -279,16 +279,24 @@ static void
GetResolution(nsPresContext* aPresContext, const nsMediaFeature*,
nsCSSValue& aResult)
{
float dpi = 96; // Use 96 when resisting fingerprinting.
// We're returning resolution in terms of device pixels per css pixel, since
// that is the preferred unit for media queries of resolution. This avoids
// introducing precision error from conversion to and from less-used
// physical units like inches.
float dppx;
if (!ShouldResistFingerprinting(aPresContext)) {
// Resolution measures device pixels per CSS (inch/cm/pixel). We
// return it in device pixels per CSS inches.
dpi = float(nsPresContext::AppUnitsPerCSSInch()) /
float(aPresContext->AppUnitsPerDevPixel());
// Get the actual device pixel ratio, which also takes zoom into account.
dppx = float(nsPresContext::AppUnitsPerCSSPixel()) /
aPresContext->AppUnitsPerDevPixel();
} else {
// We are resisting fingerprinting, so pretend we have a device pixel ratio
// of 1. In that case, we simply report the zoom level.
dppx = aPresContext->GetEffectiveFullZoom();
}
aResult.SetFloatValue(dpi, eCSSUnit_Inch);
aResult.SetFloatValue(dppx, eCSSUnit_Pixel);
}
static void

Просмотреть файл

@ -129,23 +129,23 @@ nsMediaExpression::Matches(nsPresContext *aPresContext,
required.GetUnit() == eCSSUnit_Pixel ||
required.GetUnit() == eCSSUnit_Centimeter,
"bad required value");
float actualDPI = actual.GetFloatValue();
float actualDPPX = actual.GetFloatValue();
float overrideDPPX = aPresContext->GetOverrideDPPX();
if (overrideDPPX > 0) {
actualDPI = overrideDPPX * 96.0f;
actualDPPX = overrideDPPX;
} else if (actual.GetUnit() == eCSSUnit_Centimeter) {
actualDPI = actualDPI * 2.54f;
} else if (actual.GetUnit() == eCSSUnit_Pixel) {
actualDPI = actualDPI * 96.0f;
actualDPPX = actualDPPX * 2.54f / 96.0f;
} else if (actual.GetUnit() == eCSSUnit_Inch) {
actualDPPX = actualDPPX / 96.0f;
}
float requiredDPI = required.GetFloatValue();
float requiredDPPX = required.GetFloatValue();
if (required.GetUnit() == eCSSUnit_Centimeter) {
requiredDPI = requiredDPI * 2.54f;
} else if (required.GetUnit() == eCSSUnit_Pixel) {
requiredDPI = requiredDPI * 96.0f;
requiredDPPX = requiredDPPX * 2.54f / 96.0f;
} else if (required.GetUnit() == eCSSUnit_Inch) {
requiredDPPX = requiredDPPX / 96.0f;
}
cmp = DoCompare(actualDPI, requiredDPI);
cmp = DoCompare(actualDPPX, requiredDPPX);
}
break;
case nsMediaFeature::eEnumerated: