Bug 539493 - Always pause rendering during drag [r=mfinkle]
--- a/mobile/chrome/content/browser.js
+++ b/mobile/chrome/content/browser.js
@@ -1356,16 +1356,25 @@ Browser.MainDragger = function MainDragg
this.draggedFrame = null;
this.contentScrollbox = null;
};
Browser.MainDragger.prototype = {
isDraggable: function isDraggable(target, scroller) { return true; },
dragStart: function dragStart(clientX, clientY, target, scroller) {
+ // Make sure pausing occurs before any early returns.
+ this.bv.pauseRendering();
+
+ // XXX shouldn't know about observer
+ // adding pause in pauseRendering isn't so great, because tiles will hardly ever prefetch while
+ // loading state is going (and already, the idle timer is bigger during loading so it doesn't fit
+ // into the aggressive flag).
+ this.bv._idleServiceObserver.pause();
+
let [x, y] = Browser.transformClientToBrowser(clientX, clientY);
let element = Browser.elementFromPoint(x, y);
this.draggedFrame = null;
this.contentScrollbox = null;
// Check if we are in a scrollable HTML element
let htmlElement = element;
@@ -1409,24 +1418,16 @@ Browser.MainDragger.prototype = {
this.contentScrollbox = wrapper.scrollBoxObject || wrapper.boxObject.QueryInterface(Ci.nsIScrollBoxObject);
return;
}
}
}
if (element)
this.draggedFrame = element.ownerDocument.defaultView;
-
- this.bv.pauseRendering();
-
- // XXX shouldn't know about observer
- // adding pause in pauseRendering isn't so great, because tiles will hardly ever prefetch while
- // loading state is going (and already, the idle timer is bigger during loading so it doesn't fit
- // into the aggressive flag).
- this.bv._idleServiceObserver.pause();
},
dragStop: function dragStop(dx, dy, scroller) {
this.draggedFrame = null;
this.dragMove(Browser.snapSidebars(), 0, scroller);
Browser.tryUnfloatToolbar();