--- a/mobile/chrome/content/browser.js
+++ b/mobile/chrome/content/browser.js
@@ -185,26 +185,44 @@ var Browser = {
},
scrollBy: function(x, y) {
if (getBrowser().contentWindow) {
getBrowser().contentWindow.scrollBy(x, y);
}
else {
let frameLoader = getBrowser().QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader;
+
+ let [contentWidth, contentHeight] = Browser._browserView.getViewportDimensions();
+ let browserWidth = window.innerWidth;
+ let browserHeight = window.innerHeight;
+
+ x = Math.max(0, Math.min(contentWidth - browserWidth, frameLoader.viewportScrollX + x)) - frameLoader.viewportScrollX;
+ y = Math.max(0, Math.min(contentHeight - browserHeight, frameLoader.viewportScrollY + y)) - frameLoader.viewportScrollY;
+
+ if (x == 0 && y == 0)
+ return;
frameLoader.scrollViewportBy(x, y);
}
},
scrollTo: function(x, y) {
if (getBrowser().contentWindow) {
getBrowser().contentWindow.scrollTo(x, y);
}
else {
let frameLoader = getBrowser().QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader;
+
+ let [contentWidth, contentHeight] = Browser._browserView.getViewportDimensions();
+ let browserWidth = window.innerWidth;
+ let browserHeight = window.innerHeight;
+
+ x = Math.max(0, Math.min(contentWidth - browserWidth, x));
+ y = Math.max(0, Math.min(contentHeight - browserHeight, y));
+
frameLoader.scrollViewportTo(x, y);
}
},
getPosition: function(scrollX, scrollY) {
if (getBrowser().contentWindow) {
let cwu = Util.getWindowUtils(getBrowser().contentWindow);
cwu.getScrollXY(false, scrollX, scrollY);