Closed Bug 311136 Opened 19 years ago Closed 19 years ago

Tab drag&drop can confuse tabbrowser

Categories

(Firefox :: Tabbed Browser, defect)

defect
Not set
normal

Tracking

()

VERIFIED FIXED

People

(Reporter: zeniko, Assigned: mconnor)

References

Details

(Keywords: regression)

Attachments

(1 file)

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b5) Gecko/20051004 Firefox/1.4.1
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b5) Gecko/20051004 Firefox/1.4.1

If you heavily drag and drop tabs around, it can happen that tabbrowser loses
count of the tabs and behaves strangely. Symptoms include: a tab can't be moved
to the end; the tab at the end can't be closed with Ctrl+W; when closing the
last tab, a warning about closing 2 tabs is shown; the tabbar can get
"disconnected" from the browser.

This has been reproduced on today's nightly, on a clean profile, in safe-mode.
So it's surely not related to extension problems (no dupe of the FLST bug 304456).

Reproducible: Always

Steps to Reproduce:
1. Open your homepage and two additional (blank) tabs.
2. Move the third tab to the start and close it.
3. Move the tab with your homepage to the end.
4. Close both tabs with Ctrl+W.
Actual Results:  
Step 3 fails and step 4 results in the warning about closing multiple tabs (if
it works at all). Occasionally, after step 3 the browser is not usable anymore,
since the tabbar seems disconnected (not tabbable, no active tab).

Expected Results:  
Steps 3 and 4 succeed without warnings or errors in the console (I've seen once:
Error: uncaught exception: 2147500037 and some errors in tabbrowser.xml due to
the absence of a tab - such as failing to call removeTab).
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b5) Gecko/20051004
Firefox/1.4.1 ID:2005100419

Step 3 fails indeed. 
Step 4: With browser.tabs.autoHide to false Firefox refused to react to Ctr+W
(no problem with browser.tabs.autoHide to true), but in all cases I got the
CloseTab warning when I wanted to close Firefox, although there were no tabs
open anymore.
Tested on a new profile.

Errors after Ctr+W and after attempting to close Firefox: 
Error: uncaught exception: [Exception... "Component returned failure code:
0x80004005 (NS_ERROR_FAILURE) [nsIWebProgress.removeProgressListener]" 
nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame ::
chrome://global/content/bindings/tabbrowser.xml :: removeTab :: line 1220" 
data: no]
Not in trunk at first sight.

Regression between 1.8b5_2005100321 and 1.8b5_2005100405. 
Still present in today's build. Marking as regression, requesting blocking of
the next release (presumably RC1) and CCing Dorando since it's his code and he
might know the problem.
Keywords: regression
Attached patch patchSplinter Review
You know, I don't know why this breaks now, I guess something exposed this? 
It'd be nice to know why, but this should have been in the original impl
anyway.  This seems to fix bug both 311200 and 311204 as well, but testing is
good.
Assignee: nobody → mconnor
Status: NEW → ASSIGNED
Attachment #198671 - Flags: review?(vladimir)
Comment on attachment 198671 [details] [diff] [review]
patch

r=vladimir
Attachment #198671 - Flags: review?(vladimir) → review+
fixed on trunk, we need this for RC1
Flags: blocking1.8rc1+
(In reply to comment #5)
> You know, I don't know why this breaks now, I guess something exposed this? 
It seems like the removed tabs are not fully removed from the DOM:

1. Open many tabs
2. Close all others
3. Check <tabbrowser>.mTabContainer.childNodes with DOMi
This patch doesn't make sense to me.  foo.insertBefore(bar, null) is defined to
be the same as foo.appendChild(bar).
This patch doesn't make sense to me.  foo.insertBefore(bar, null) is defined to
be the same as foo.appendChild(bar), so the original code seems correct.

Does the patch for bug 311295 fix this bug on the Gecko 1.8 branch?
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8b5) Gecko/20051006
Firefox/1.4.1 ID:2005100600

this patch fixes This both bug 311200 and bug 311204
The patch for bug 311295 (checked in on the branch only) does fix this (and bug
311204, but not bug 311200), so as Jesse said the patch in this bug isn't needed.
No longer blocks: 311200, 311204
Status: ASSIGNED → RESOLVED
Closed: 19 years ago
Depends on: 311295
OS: Windows XP → All
Hardware: PC → All
Resolution: --- → FIXED
Status: RESOLVED → VERIFIED
The patch in this bug might fix a JavaScript strict warning (bug 311200).
(In reply to comment #13)
> The patch in this bug might fix a JavaScript strict warning (bug 311200).

It's more than what's needed though, see bug 311200 comment 3.
not needed for branch.
Flags: blocking1.8rc1+
Not needed for branch because the patch in bug 311295 took care of the regression.
If the patch wasn't needed for the branch, because a branch-only regression was fixed there, then why was it needed for the trunk, where the regression (bug 311295) was never present? Can the patch be backed out?
Yes.
I backed out the patch, branch and trunk are now the same.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: