Bug 562773 - Viewport is not resized on window resize / orientation change [r=mfinkle r=stechz]

This commit is contained in:
Matt Brubeck 2010-05-05 15:51:58 -04:00
parent 87c9c63a2b
commit 70803a9023

View File

@ -125,23 +125,19 @@ let Util = {
getViewportMetadata: function getViewportMetadata(browser) {
let dpiScale = gPrefService.getIntPref("zoom.dpiScale") / 100;
// Device size in CSS pixels:
let deviceWidth = window.innerWidth / dpiScale;
let deviceHeight = window.innerHeight / dpiScale;
let doctype = browser.contentDocument.doctype;
if (doctype && /(WAP|WML|Mobile)/.test(doctype.publicId))
return { reason: "doctype", result: true, defaultZoom: dpiScale, width: deviceWidth };
return { defaultZoom: dpiScale, autoSize: true };
let windowUtils = browser.contentWindow
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils);
let handheldFriendly = windowUtils.getDocumentMetadata("HandheldFriendly");
if (handheldFriendly == "true")
return { reason: "handheld", defaultZoom: dpiScale, width: deviceWidth };
return { defaultZoom: dpiScale, autoSize: true };
if (browser.contentDocument instanceof XULDocument)
return { reason: "chrome", defaultZoom: 1.0, autoSize: true, allowZoom: false };
return { defaultZoom: 1.0, autoSize: true, allowZoom: false };
// viewport details found here
// http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html
@ -155,18 +151,17 @@ let Util = {
let viewportWidthStr = windowUtils.getDocumentMetadata("viewport-width");
let viewportHeightStr = windowUtils.getDocumentMetadata("viewport-height");
viewportScale = Util.clamp(viewportScale, kViewportMinScale, kViewportMaxScale);
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 autoSize = (viewportWidthStr == "device-width" ||
viewportHeightStr == "device-height" ||
(viewportScale == 1.0 && !viewportWidthStr));
let viewportWidth = viewportWidthStr == "device-width" ? deviceWidth
: Util.clamp(parseInt(viewportWidthStr), kViewportMinWidth, kViewportMaxWidth);
let viewportHeight = viewportHeightStr == "device-height" ? deviceHeight
: Util.clamp(parseInt(viewportHeightStr), kViewportMinHeight, kViewportMaxHeight);
let viewportWidth = Util.clamp(parseInt(viewportWidthStr), kViewportMinWidth, kViewportMaxWidth);
let viewportHeight = Util.clamp(parseInt(viewportHeightStr), kViewportMinHeight, kViewportMaxHeight);
// Zoom level is the final (device pixel : CSS pixel) ratio for content.
// Since web content specifies scale as (reference pixel : CSS pixel) ratio,
@ -175,29 +170,19 @@ let Util = {
//
// See bug 561445 or any of the examples of chrome/tests/browser_viewport_XX.html
// for more information and examples.
let defaultZoom = viewportScale * dpiScale;
let minZoom = viewportMinScale * dpiScale;
let maxZoom = viewportMaxScale * dpiScale;
let defaultZoom = viewportScale * dpiScale;
let minZoom = viewportMinScale * dpiScale;
let maxZoom = viewportMaxScale * dpiScale;
// If (scale * width) < device-width, increase the width (bug 561413).
let maxInitialZoom = defaultZoom || maxZoom;
if (maxInitialZoom && viewportWidth)
viewportWidth = Math.max(viewportWidth, window.innerWidth / maxInitialZoom);
if (viewportScale > 0 || viewportWidth > 0 || viewportHeight > 0 || viewportMinScale > 0 || viewportMaxScale > 0) {
return {
reason: "viewport",
defaultZoom: defaultZoom,
minZoom: minZoom,
maxZoom: maxZoom,
width: viewportWidth,
height: viewportHeight,
autoSize: viewportWidthStr == "device-width" || viewportHeightStr == "device-height",
allowZoom: windowUtils.getDocumentMetadata("viewport-user-scalable") != "no"
};
}
return { reason: null, allowZoom: true };
return {
defaultZoom: defaultZoom,
minZoom: minZoom,
maxZoom: maxZoom,
width: viewportWidth,
height: viewportHeight,
autoSize: autoSize,
allowZoom: windowUtils.getDocumentMetadata("viewport-user-scalable") != "no"
};
},
clamp: function(num, min, max) {