mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 561870 - Enforce min/max limits on viewport values [r=mfinkle]
This commit is contained in:
parent
6800925826
commit
1f85586b9a
@ -41,6 +41,14 @@
|
||||
|
||||
let Ci = Components.interfaces;
|
||||
|
||||
// Blindly copied from Safari documentation for now.
|
||||
const kViewportMinScale = 0;
|
||||
const kViewportMaxScale = 10;
|
||||
const kViewportMinWidth = 200;
|
||||
const kViewportMaxWidth = 10000;
|
||||
const kViewportMinHeight = 223;
|
||||
const kViewportMaxHeight = 10000;
|
||||
|
||||
// -----------------------------------------------------------
|
||||
// General util/convenience tools
|
||||
//
|
||||
@ -133,18 +141,27 @@ let Util = {
|
||||
// http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html
|
||||
// http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html
|
||||
|
||||
// Note: These values will be NaN if parseFloat or parseInt doesn't find a number.
|
||||
// Remember that NaN is contagious: Math.max(1, NaN) == Math.min(1, NaN) == NaN.
|
||||
let viewportScale = parseFloat(windowUtils.getDocumentMetadata("viewport-initial-scale"));
|
||||
let viewportMinScale = parseFloat(windowUtils.getDocumentMetadata("viewport-minimum-scale"));
|
||||
let viewportMaxScale = parseFloat(windowUtils.getDocumentMetadata("viewport-maximum-scale"));
|
||||
let viewportWidthStr = windowUtils.getDocumentMetadata("viewport-width");
|
||||
let viewportHeightStr = windowUtils.getDocumentMetadata("viewport-height");
|
||||
|
||||
viewportScale = Util.clamp(viewportScale, kViewportMinScale, kViewportMaxScale);
|
||||
viewportMinScale = Util.clamp(viewportMinScale, kViewportMinScale, kViewportMaxScale);
|
||||
viewportMaxScale = Util.clamp(viewportMaxScale, kViewportMinScale, kViewportMaxScale);
|
||||
|
||||
// If initial scale is 1.0 and width is not set, assume width=device-width
|
||||
if (viewportScale == 1.0 && !viewportWidthStr)
|
||||
viewportWidthStr = "device-width";
|
||||
|
||||
let viewportWidth = viewportWidthStr == "device-width" ? window.innerWidth : parseInt(viewportWidthStr);
|
||||
let viewportHeight = viewportHeightStr == "device-height" ? window.innerHeight : parseInt(viewportHeightStr);
|
||||
|
||||
viewportWidth = Util.clamp(viewportWidth, kViewportMinWidth, kViewportMaxWidth);
|
||||
viewportHeight = Util.clamp(viewportHeight, kViewportMinHeight, kViewportMaxHeight);
|
||||
|
||||
// If (scale * width) < device-width, increase the width (bug 561413).
|
||||
let maxInitialScale = viewportScale || viewportMaxScale;
|
||||
@ -168,6 +185,10 @@ let Util = {
|
||||
return { reason: "", result: false, allowZoom: true };
|
||||
},
|
||||
|
||||
clamp: function(num, min, max) {
|
||||
return Math.max(min, Math.min(max, num));
|
||||
},
|
||||
|
||||
/**
|
||||
* Determines whether a home page override is needed.
|
||||
* Returns:
|
||||
|
@ -69,6 +69,7 @@ _BROWSER_FILES = \
|
||||
browser_viewport_05.html \
|
||||
browser_viewport_06.html \
|
||||
browser_viewport_07.html \
|
||||
browser_viewport_08.html \
|
||||
$(NULL)
|
||||
|
||||
libs:: $(_BROWSER_FILES)
|
||||
|
@ -57,7 +57,8 @@ let testData = [
|
||||
{ width: 200, scale: undefined },
|
||||
{ width: 2000, minScale: 0.75 },
|
||||
{ width: 100, maxScale: 2 },
|
||||
{ width: 2000, scale: 0.75 }
|
||||
{ width: 2000, scale: 0.75 },
|
||||
{ width: 10000, scale: 10 }
|
||||
];
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
10
mobile/chrome/tests/browser_viewport_08.html
Normal file
10
mobile/chrome/tests/browser_viewport_08.html
Normal file
@ -0,0 +1,10 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Browser Viewport Page 08</title>
|
||||
<meta name="viewport" content="width=20000, initial-scale=100"/>
|
||||
</head>
|
||||
<body>
|
||||
<p>Browser Viewport Page 08</p>
|
||||
<p>width=20000, initial-scale=100</p>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user