Bug 561870 - Enforce min/max limits on viewport values [r=mfinkle]

This commit is contained in:
Matt Brubeck 2010-04-29 15:29:01 -04:00
parent 6800925826
commit 1f85586b9a
4 changed files with 34 additions and 1 deletions

View File

@ -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:

View File

@ -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)

View File

@ -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 }
];
//------------------------------------------------------------------------------

View 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>