From 757e0a5ccc840ee077a342669588abad25935573 Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Thu, 14 Apr 2011 15:33:52 +0200 Subject: [PATCH] Bug 648882 - TabPriorityQueue updates tabItems when UI is busy [f=raymond, r=ian] --- browser/base/content/tabview/tabitems.js | 2 +- browser/base/content/test/tabview/Makefile.in | 1 + .../test/tabview/browser_tabview_bug648882.js | 64 +++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 browser/base/content/test/tabview/browser_tabview_bug648882.js diff --git a/browser/base/content/tabview/tabitems.js b/browser/base/content/tabview/tabitems.js index ed53f449444e..27f13c5315f6 100644 --- a/browser/base/content/tabview/tabitems.js +++ b/browser/base/content/tabview/tabitems.js @@ -1143,7 +1143,7 @@ let TabItems = { _checkHeartbeat: function TabItems__checkHeartbeat() { this._heartbeat = null; - if (this.isPaintingPaused() || !UI.isIdle) + if (this.isPaintingPaused() || !UI.isIdle()) return; let accumTime = 0; diff --git a/browser/base/content/test/tabview/Makefile.in b/browser/base/content/test/tabview/Makefile.in index 225e086aa143..6259d16b67e5 100644 --- a/browser/base/content/test/tabview/Makefile.in +++ b/browser/base/content/test/tabview/Makefile.in @@ -130,6 +130,7 @@ _BROWSER_FILES = \ browser_tabview_bug641802.js \ browser_tabview_bug644097.js \ browser_tabview_bug645653.js \ + browser_tabview_bug648882.js \ browser_tabview_dragdrop.js \ browser_tabview_exit_button.js \ browser_tabview_expander.js \ diff --git a/browser/base/content/test/tabview/browser_tabview_bug648882.js b/browser/base/content/test/tabview/browser_tabview_bug648882.js new file mode 100644 index 000000000000..6aefcd2f9865 --- /dev/null +++ b/browser/base/content/test/tabview/browser_tabview_bug648882.js @@ -0,0 +1,64 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +function test() { + waitForExplicitFinish(); + + newWindowWithTabView(function (win) { + registerCleanupFunction(function () win.close()); + + let cw = win.TabView.getContentWindow(); + let tab = win.gBrowser.tabs[0]; + let tabItem = tab._tabViewTabItem; + let groupItem = cw.GroupItems.groupItems[0]; + let container = groupItem.container; + let resizer = groupItem.$resizer[0]; + + let intervalID; + let isIdle = false; + let numLoops = 10; + let interval = cw.UI._maxInteractiveWait - 10; + + let simulateDragDrop = function (target) { + EventUtils.synthesizeMouse(target, 5, 5, {type: "mousedown"}, cw); + EventUtils.synthesizeMouse(target, 40, 20, {type: "mousemove"}, cw); + EventUtils.synthesizeMouse(target, 20, 20, {type: "mouseup"}, cw); + } + + let moveGroup = function () { + simulateDragDrop(container); + + if (!--numLoops) { + numLoops = 10; + win.clearInterval(intervalID); + intervalID = win.setInterval(resizeGroup, interval); + } + }; + + let resizeGroup = function () { + simulateDragDrop(resizer); + + if (!--numLoops) { + isIdle = true; + win.clearInterval(intervalID); + } + }; + + SimpleTest.waitForFocus(function () { + cw.TabItems.pausePainting(); + cw.TabItems.update(tab); + + tabItem.addSubscriber(tabItem, "updated", function () { + tabItem.removeSubscriber(tabItem, "updated"); + ok(isIdle, "tabItem is updated only when UI is idle"); + finish(); + }); + + intervalID = win.setInterval(moveGroup, interval); + registerCleanupFunction(function () win.clearInterval(intervalID)); + + moveGroup(); + cw.TabItems.resumePainting(); + }, cw); + }); +}