Bug 1574307 - Part 2. Add nsIDOMWindowUtils.getViewportFitInfo r=smaug

Per discussing with @hiro, we should add new method to get viewport-fit
instead of adding parameter of `nsIDOMWindowUtils.getViewportInfo`.

Depends on D55609

Differential Revision: https://phabricator.services.mozilla.com/D57397

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Makoto Kato 2020-01-20 08:40:20 +00:00
parent a94e918a29
commit 163a589174
6 changed files with 85 additions and 3 deletions

View File

@ -1616,6 +1616,9 @@ class Document : public nsINode,
ViewportMetaData&& aData);
void RemoveMetaViewportElement(HTMLMetaElement* aElement);
// Returns a ViewportMetaData for this document.
ViewportMetaData GetViewportMetaData() const;
void UpdateForScrollAnchorAdjustment(nscoord aLength);
/**
@ -4067,9 +4070,6 @@ class Document : public nsINode,
// stored in parent iframe or container's browsingContext (cross process)
already_AddRefed<mozilla::dom::FeaturePolicy> GetParentFeaturePolicy();
// Returns a ViewportMetaData for this document.
ViewportMetaData GetViewportMetaData() const;
FlashClassification DocumentFlashClassificationInternal();
nsTArray<nsString> mL10nResources;

View File

@ -405,6 +405,22 @@ nsDOMWindowUtils::GetViewportInfo(uint32_t aDisplayWidth,
return NS_OK;
}
NS_IMETHODIMP
nsDOMWindowUtils::GetViewportFitInfo(nsAString& aViewportFit) {
Document* doc = GetDocument();
NS_ENSURE_STATE(doc);
ViewportMetaData metaData = doc->GetViewportMetaData();
if (metaData.mViewportFit.EqualsLiteral("contain")) {
aViewportFit.AssignLiteral("contain");
} else if (metaData.mViewportFit.EqualsLiteral("cover")) {
aViewportFit.AssignLiteral("cover");
} else {
aViewportFit.AssignLiteral("auto");
}
return NS_OK;
}
NS_IMETHODIMP
nsDOMWindowUtils::SetDisplayPortForElement(float aXPx, float aYPx,
float aWidthPx, float aHeightPx,

View File

@ -720,6 +720,8 @@ skip-if = !e10s # Track Bug 1281415
[test_meta_viewport_device_width.html]
[test_meta_viewport_device_width_with_initial_scale_0_5.html]
[test_meta_viewport_device_width_with_initial_scale_2.html]
[test_meta_viewport_fit.html]
[test_meta_viewport_fit_multiple.html]
[test_meta_viewport_fixed_width_and_zero_display_width.html]
[test_meta_viewport_initial_scale_0_5.html]
[test_meta_viewport_initial_scale_2.html]

View File

@ -0,0 +1,34 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>meta viewport viewport-fit test</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<meta name="viewport" content="viewport-fit=cover">
<script src="viewport_helpers.js"></script>
</head>
<body>
<p>viewport-fit=cover</p>
<script type="application/javascript">
"use strict";
add_task(async function test1() {
await SpecialPowers.pushPrefEnv(scaleRatio(1.0));
let viewportFit = SpecialPowers.getDOMWindowUtils(window).getViewportFitInfo();
is(viewportFit, "cover", "viewport-fit is cover correctly");
let elements = document.getElementsByTagName("meta");
for (let meta of elements) {
if (meta.getAttribute("name") == "viewport") {
meta.setAttribute("content", "viewport-fit=contain");
}
}
viewportFit = SpecialPowers.getDOMWindowUtils(window).getViewportFitInfo();
is(viewportFit, "contain", "viewport-fit is contain correctly");
});
</script>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>multiple meta viewport viewport-fit test</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<meta name="viewport" content="viewport-fit=cover">
<meta name="viewport" content="width=device-width">
<script src="viewport_helpers.js"></script>
</head>
<body>
<p>viewport-fit=cover</p>
<script type="application/javascript">
"use strict";
add_task(async function test1() {
await SpecialPowers.pushPrefEnv(scaleRatio(1.0));
let viewportFit = SpecialPowers.getDOMWindowUtils(window).getViewportFitInfo();
is(viewportFit, "auto", "No viewport-fit in last meta viewport. So auto is applied");
});
</script>
</body>
</html>

View File

@ -115,6 +115,11 @@ interface nsIDOMWindowUtils : nsISupports {
out double aMinZoom, out double aMaxZoom,
out uint32_t aWidth, out uint32_t aHeight,
out boolean aAutoSize);
/*
* Information retrieved from the viewport-fit value of <meta name="viewport">
* element.
*/
AString getViewportFitInfo();
/**
* Information about the window size in device pixels.