Closed Bug 903834 Opened 9 years ago Closed 9 years ago

Intermittent browser_tabview_bug590606.js | The currently selected tab should be the first tab in the groupItemOne - Got [object XULElement], expected [object XULElement]

Categories

(Firefox Graveyard :: Panorama, defect)

x86
Windows XP
defect
Not set
normal

Tracking

(firefox25 wontfix, firefox26 fixed, firefox27 fixed, firefox-esr24 wontfix)

RESOLVED FIXED
Firefox 27
Tracking Status
firefox25 --- wontfix
firefox26 --- fixed
firefox27 --- fixed
firefox-esr24 --- wontfix

People

(Reporter: ttaubert, Assigned: ttaubert)

References

(Depends on 1 open bug)

Details

(Keywords: intermittent-failure)

https://tbpl.mozilla.org/php/getParsedLog.php?id=26401397&tree=Mozilla-Central

TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/components/tabview/test/browser_tabview_bug590606.js | The currently selected tab should be the first tab in the groupItemOne - Got [object XULElement], expected [object XULElement]
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/components/tabview/test/browser_tabview_bug590606.js | uncaught exception - NS_ERROR_XPC_JAVASCRIPT_ERROR_WITH_DETAILS: '[JavaScript Error: "this.mCurrentBrowser is null" {file: "chrome://browser/content/tabbrowser.xml" line: 2731}]' when calling method: [nsIBrowserDOMWindow::contentWindow] at chrome://browser/content/browser.js:9501
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/components/tabview/test/browser_tabview_bug590606.js | uncaught exception - NS_ERROR_XPC_JAVASCRIPT_ERROR_WITH_DETAILS: '[JavaScript Error: "this.mCurrentBrowser is null" {file: "chrome://browser/content/tabbrowser.xml" line: 2731}]' when calling method: [nsIBrowserDOMWindow::contentWindow] at chrome://browser/content/browser.js:9501
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/components/tabview/test/browser_tabview_bug590606.js | uncaught exception - TypeError: oldBrowser is null at chrome://browser/content/tabbrowser.xml:1063
TypeError: profile is undefined: Sidebar.prototype<.getItemByProfile@resource://gre/modules/commonjs/toolkit/loader.js -> resource:///modules/devtools/profiler/sidebar.js:91
TypeError: this._tabs is null
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/devtools/webconsole/test/browser_webconsole_bug_597136_network_requests_from_chrome.js | no exception was thrown when sending a network request from a chrome window
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/modules/test/browser_NetworkPrioritizer.js | Tab had expected priority - Got 0, expected -10
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/modules/test/browser_NetworkPrioritizer.js | Tab had expected priority - Got 0, expected -10
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/modules/test/browser_NetworkPrioritizer.js | Tab had expected priority - Got 0, expected -10
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/modules/test/browser_NetworkPrioritizer.js | Tab had expected priority - Got 0, expected -10
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/modules/test/browser_NetworkPrioritizer.js | Tab had expected priority - Got 10, expected 0
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/modules/test/browser_NetworkPrioritizer.js | Tab had expected priority - Got 0, expected -10
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/modules/test/browser_NetworkPrioritizer.js | Tab had expected priority - Got 10, expected 0
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/modules/test/browser_NetworkPrioritizer.js | Can adjust priority beyond 'lowest' - Got 20, expected 30
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/modules/test/browser_NetworkPrioritizer.js | Can adjust priority beyond 'highest' - Got -20, expected -30
Tim, can you please suggest an owner for this?
Flags: needinfo?(ttaubert)
I have no clue what happens here. I looked at the code and I don't see a way how we could end up with mCurrentBrowser being null. I tried to run tests for a while on my Mac and on my Windows machine. I even downloaded the exact PGO build [1] from the last Aurora failure [2] (comment #23) but couldn't get it to fail.

An interesting point is that all of the failures are on XP PGO. I also don't know a good owner for this as it's really not actionable at the moment. If only we had some kind of way to reproduce.

[1] http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/mozilla-inbound-win32-pgo/1380049230/
[2] https://tbpl.mozilla.org/php/getParsedLog.php?id=28311772&full=1&branch=mozilla-inbound
Flags: needinfo?(ttaubert)
Pushed a patch with some debug output to try and requested a PGO build:

https://tbpl.mozilla.org/?tree=Try&rev=73b7687b2ba1

Let's see how that goes...
Great, at least on try it seems to be quite reproducible, using PGO builds. Here's a build log of a failure with some debug output. Still not entirely sure what's up but maybe I'll just push again after some investigation.

https://tbpl.mozilla.org/php/getParsedLog.php?id=28402137&tree=Try&full=1#error1

Looks like I'm owning this now :) FTR, it looks like that's not Panorama's failure but the tabbrowser somehow ends up in a state where it shouldn't be.
It looks like browser_tabview_bug588265.js somehow makes us null mCurrentBrowser here:

http://hg.mozilla.org/mozilla-central/annotate/e85b0372cece/browser/base/content/tabbrowser.xml#l2003

It looks we probably should rather fail instead of nulling mCurrentBrowser if that makes everything else fail?
Nulling mCurrentBrowser was introduced here:

http://hg.mozilla.org/mozilla-central/rev/79f0830a550c
FTR, it seems like bug 909598 is the same issue.
Blocks: 909598
It seems that sometimes, _blurTab() does correctly set a new selected tab but for some reason updateCurrentBrowser() isn't executed immediately after. This would cause _endRemoveTab() to set mCurrentBrowser=null.

The log output [1] shows that updateCurrentBrowser() is not called.

[1] https://tbpl.mozilla.org/php/getParsedLog.php?id=28454037&tree=Try&full=1#error0
Another try push [1] with some more debug output tells:

gBrowser.selectedTab is set to a new tab that is != mCurrentTab. tabbox.selectedIndex however decides to do nothing as (this._selectedPanel == panel). According to the selected index the panel does not change. Weird.

[1] https://tbpl.mozilla.org/php/getParsedLog.php?id=28463747&tree=Try&full=1#error0
My assumption so far is that sometimes, when selecting a tab, the wrong panel is selected (one that is already selected) so that we don't fire a select event.

When setting the selected tab, getRelatedElement() looks for a tab panel with a matching ID and returns it. We do the following to assign panel IDs:

  var uniqueId = "panel" + Date.now();
  // or
  var uniqueId = "panel" + Date.now() + position;

This doesn't seem very unique to me as we have other bugs that hint that Date.now() isn't really monotonic (bug 874847, also WinXP only) and it definitely can screw things up when the system clock changes.

Another weird thing here is that getRelatedElement() falls back to getting the tab panel with the same index as the tab when it doesn't find anything for a given idea. That's quite a bad idea though as tab indices != panel indices. After calling gBrowser.moveTabTo() the selectedIndex for tabs may be different than the one for panels.

I don't see a way how this could fail though. Maybe we should just return null when that happens - which might not be easy with the tabbox being a toolkit widget.
Depends on: 921705
Yup, that's it \o/.
Assignee: nobody → ttaubert
Status: NEW → ASSIGNED
Depends on: 586153
Fixed by bug 586153.
Status: ASSIGNED → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → Firefox 27
Product: Firefox → Firefox Graveyard
You need to log in before you can comment on or make changes to this bug.