mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
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:
parent
a94e918a29
commit
163a589174
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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]
|
||||
|
34
dom/base/test/test_meta_viewport_fit.html
Normal file
34
dom/base/test/test_meta_viewport_fit.html
Normal 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>
|
25
dom/base/test/test_meta_viewport_fit_multiple.html
Normal file
25
dom/base/test/test_meta_viewport_fit_multiple.html
Normal 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>
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user