Closed
Bug 614881
Opened 14 years ago
Closed 14 years ago
Add a "closing" property to closing tabs
Categories
(Firefox :: Tabbed Browser, defect)
Firefox
Tabbed Browser
Tracking
()
RESOLVED
FIXED
Firefox 7
People
(Reporter: tabutils+bugzilla, Assigned: tabutils+bugzilla)
References
Details
(Whiteboard: [good first bug])
Attachments
(1 file, 2 obsolete files)
10.73 KB,
patch
|
dao
:
review+
|
Details | Diff | Splinter Review |
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 (.NET CLR 3.5.30729)
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 (.NET CLR 3.5.30729)
I have read that in tabbrowwser.xml _removingTabs.indexOf method is frequently called. It would be better to have a "removing" attribute on removing tabs.
Reproducible: Always
Summary: Add "removing" attribute to a removing tab instead of pushing it to _removingTabs array → Add a "removing" attribute to a removing tab instead of pushing it to _removingTabs array
Updated•14 years ago
|
Status: UNCONFIRMED → NEW
Ever confirmed: true
Whiteboard: [good first bug]
There are another two references of _removingTabs in tabview files, should I modify them directly?
Attachment #534376 -
Flags: review?(dao)
Comment 2•14 years ago
|
||
Comment on attachment 534376 [details] [diff] [review]
Add "removing" attribute instead of pushing to _removingTabs
Please use "closing" instead of "removing" as the property name.
>- <field name="_removingTabs">
>- []
>- </field>
>+ <property name="_removingTabs" readonly="true">
>+ <getter>
>+ return Array.filter(this.tabs, function(tab) tab.removing);
>+ </getter>
>+ </property>
I wonder if it would be more efficient to let _beginRemoveTab and _endRemoveTab still update this array rather than building it on demand.
>- while (this._removingTabs.length)
>- this._endRemoveTab(this._removingTabs[0]);
>+ this._removingTabs.forEach(this._endRemoveTab, this);
You're changing the behavior here, since _removingTabs could contain new tabs while you're in the loop.
>- tabs.tabbrowser._removingTabs.forEach(tabs.tabbrowser.removeTab,
>+ tabs.tabbrowser._removingTabs.forEach(tabs.tabbrowser._endRemoveTab,
> tabs.tabbrowser);
Avoid this change.
>+ <property name="removing" readonly="true">
>+ <getter>
>+ return this.hasAttribute("removing");
>+ </getter>
>+ </property>
What do we need the attribute behind the scenes for?
Attachment #534376 -
Flags: review?(dao) → review-
(In reply to comment #2)
> Please use "closing" instead of "removing" as the property name.
Thanks for your comments. Then need it be "_closing" or "mClosing"? I'm not clear about the conventions.
> I wonder if it would be more efficient to let _beginRemoveTab and
> _endRemoveTab still update this array rather than building it on demand.
>
> >- while (this._removingTabs.length)
> >- this._endRemoveTab(this._removingTabs[0]);
> >+ this._removingTabs.forEach(this._endRemoveTab, this);
>
> You're changing the behavior here, since _removingTabs could contain new
> tabs while you're in the loop.
Addressed and fixed.
> >- tabs.tabbrowser._removingTabs.forEach(tabs.tabbrowser.removeTab,
> >+ tabs.tabbrowser._removingTabs.forEach(tabs.tabbrowser._endRemoveTab,
> > tabs.tabbrowser);
>
> Avoid this change.
OK. I took it as a mistake.
> >+ <property name="removing" readonly="true">
> >+ <getter>
> >+ return this.hasAttribute("removing");
> >+ </getter>
> >+ </property>
>
> What do we need the attribute behind the scenes for?
Not really need it. Removed.
Attachment #534376 -
Attachment is obsolete: true
Attachment #534381 -
Flags: review?(dao)
Comment 4•14 years ago
|
||
Comment on attachment 534381 [details] [diff] [review]
Add "removing" attribute instead of pushing to _removingTabs
>@@ -1597,16 +1598,17 @@
>
> this._lastRelatedTab = null;
>
> // update the UI early for responsiveness
> aTab.collapsed = true;
> this.tabContainer._fillTrailingGap();
> this._blurTab(aTab);
>
>+ aTab.closing = false;
> this._removingTabs.splice(this._removingTabs.indexOf(aTab), 1);
>
> if (aCloseWindow) {
> this._windowIsClosing = true;
> while (this._removingTabs.length)
> this._endRemoveTab(this._removingTabs[0]);
> } else if (!this._windowIsClosing) {
> if (aNewTab)
Isn't this unnecessary?
Attachment #534381 -
Attachment is obsolete: true
Attachment #534384 -
Flags: review?(dao)
Attachment #534381 -
Flags: review?(dao)
Comment 6•14 years ago
|
||
Comment on attachment 534384 [details] [diff] [review]
Mark a tab closing when it is being closed
Thanks!
Attachment #534384 -
Flags: review?(dao) → review+
I feel "closed" might be more suitable than "closing". Do you agree?
This property can also be used where tab.parentNode is checked.
Comment 8•14 years ago
|
||
No, closed would be misleading -- the tab is in the process of being closed.
Comment 9•14 years ago
|
||
And this can't replace parentNode checks either, as the tab binding wouldn't be there anymore without a parentNode.
Assignee | ||
Comment 10•14 years ago
|
||
(In reply to comment #9)
> And this can't replace parentNode checks either, as the tab binding wouldn't
> be there anymore without a parentNode.
Thanks! What's the next step for me? Ask for approval or just add "checkin-needed" keyword?
Updated•14 years ago
|
Assignee: nobody → ithinc
Keywords: checkin-needed
Summary: Add a "removing" attribute to a removing tab instead of pushing it to _removingTabs array → Add a "closing" property to closing tabs
Comment 11•14 years ago
|
||
Status: NEW → RESOLVED
Closed: 14 years ago
Keywords: checkin-needed
Resolution: --- → FIXED
Target Milestone: --- → Firefox 7
Comment 12•13 years ago
|
||
Hi guys. How can this be tested? Is there a testcase ore some STR?
Thanks.
You need to log in
before you can comment on or make changes to this bug.
Description
•