Closed Bug 854274 Opened 11 years ago Closed 11 years ago

Defect - Showing the "Tab Dock" when creating new tabs using "+" button

Categories

(Firefox for Metro Graveyard :: App Bar, defect, P1)

All
Windows 8.1
defect

Tracking

(Not tracked)

VERIFIED FIXED
Firefox 23

People

(Reporter: kjozwiak, Assigned: rsilveira)

References

Details

(Keywords: uiwanted, ux-userfeedback, Whiteboard: feature=defect c=firefox_app_bar_and_autocomplete u=metro_firefox_user p=2)

Attachments

(1 file, 5 obsolete files)

When pressing the create tab button (+), I think it would be a good idea to open the Tab Dock to illustrate that a new tab has been created. The current way can be a little confusing for new users as they might not understand what happened when they pressed the "+"

Actual Results:

- The current page is replaced with the new tab and might confuse new users.

Expected Results:

- When a user selects the "+" button to create a new tab, the Tab Dock should appear, this will let a user know that a new tab has been created and their old tab is still available.
See Also: → 789291
Hardware: x86_64 → All
Whiteboard: p=2
iteration5 defect?
Blocks: 831901
No longer blocks: metrov1triage
Flags: needinfo?(asa)
Moving to Iteration #5 for consideration as a defect.
Blocks: metrov1it5
Flags: needinfo?(asa)
Priority: -- → P1
QA Contact: jbecerra
Summary: Showing the "Tab Dock" when creating new tabs using "+" button → Defect - Showing the "Tab Dock" when creating new tabs using "+" button
Whiteboard: p=2 → feature=defect c=firefox_app_bar_and_autocomplete u=metro_firefox_user p=2
Blocks: 831928
No longer blocks: 831901
Thanks for finding a better blocking story :)
Assignee: nobody → rsilveira
Status: NEW → ASSIGNED
Attached patch Patch v1 (obsolete) — Splinter Review
Added tab closing animation too.
Attachment #732633 - Flags: review?(mbrubeck)
Comment on attachment 732633 [details] [diff] [review]
Patch v1

never mind, need to fix always show tabs.
Attachment #732633 - Flags: review?(mbrubeck)
Always show tabs is on the chopping block for v1 so if fixing that requires a bunch of extra work, I'm OK with a follow-up to remove that option from the UI prefs.
Attached patch Patch v2 (obsolete) — Splinter Review
Fixed tab closing in always shows tab mode.
Attachment #732633 - Attachment is obsolete: true
Attachment #732891 - Flags: review?(mbrubeck)
Thanks Asa, the fix was pretty simple though.
Comment on attachment 732891 [details] [diff] [review]
Patch v2

Review of attachment 732891 [details] [diff] [review]:
-----------------------------------------------------------------

Looks good, but I'd like to re-review after the getNextTab comments below are addressed.

::: browser/metro/base/content/browser-ui.js
@@ +387,5 @@
>    },
>  
> +  setOnTabAnimationEnd: function setOnTabAnimationEnd(aCallback) {
> +    if (!aCallback)
> +      return;

Remove the "if (!aCallback)" lines, please -- this should never happen, so let's throw an exception instead of returning silently.

@@ +392,5 @@
> +
> +    Elements.tabs.addEventListener("animationend", function onAnimationEnd() {
> +      Elements.tabs.removeEventListener("animationend", onAnimationEnd);
> +      aCallback();
> +    });

At some point, maybe we should move waitForEvent from tests/head.js to Util.jsm and use it here.

@@ +665,5 @@
>  
>      Elements.urlbarState.setAttribute("mode", "edit");
>      StartUI.show();
> +    if (aShouldDismiss)
> +      ContextUI.dismissTabs();

What's the rationale for leaving the tab bar open after "New Tab" -- I guess it's because the user is interacting with it?  This seems reasonable; I just want to make sure this is the UX we want.

::: browser/metro/base/content/browser.js
@@ +541,5 @@
>  
>      let nextTab = this._selectedTab;
>      if (nextTab == aTab) {
> +      nextTab = this.getTabAtIndex(tabIndex + 1);
> +      if (!nextTab || nextTab.chromeTab.getAttribute("closing"))

nit: use hasAttribute

@@ +545,5 @@
> +      if (!nextTab || nextTab.chromeTab.getAttribute("closing"))
> +        nextTab = this.getTabAtIndex(tabIndex - 1);
> +
> +      if (!nextTab || nextTab.chromeTab.getAttribute("closing"))
> +        return null;

Should we search forward in a loop and then backward in a loop before giving up, in case the user has just closed several tabs in a row?

Could you add a few tests for the getNextTab function, please?
Attachment #732891 - Flags: review?(mbrubeck) → review-
(In reply to Matt Brubeck (:mbrubeck) from comment #9)
> @@ +392,5 @@
> > +
> > +    Elements.tabs.addEventListener("animationend", function onAnimationEnd() {
> > +      Elements.tabs.removeEventListener("animationend", onAnimationEnd);
> > +      aCallback();
> > +    });
> 
> At some point, maybe we should move waitForEvent from tests/head.js to
> Util.jsm and use it here.

Good idea. Created bug 858358. 
 
> @@ +665,5 @@
> >  
> >      Elements.urlbarState.setAttribute("mode", "edit");
> >      StartUI.show();
> > +    if (aShouldDismiss)
> > +      ContextUI.dismissTabs();
> 
> What's the rationale for leaving the tab bar open after "New Tab" -- I guess
> it's because the user is interacting with it?  This seems reasonable; I just
> want to make sure this is the UX we want.

At some point I actually had it always dismiss the tab bar after creating/closing a tab, then I changed to match current behavior. Current behavior for opening a tab should be to keep the tab bar open if it was already there, and peek it if it was collapsed - the catch is that peek wasn't working because _editURI was dismissing the tab bar.

In my opinion, if you have the tab bar open and you're creating a new tab, it's unlikely that you'll need the tab bar. But when you're closing more than 1 tab, I think it's better to keep the tab bar there, but it's probably rare. I ended up always keeping it for consistency and for keeping was was there before, but I'm fine either way.

I'm requesting info from Yuan to get her input.
Flags: needinfo?(ywang)
Attached patch Patch v3 (obsolete) — Splinter Review
Addressed review comments and added test for getNextTab
Attachment #732891 - Attachment is obsolete: true
Attachment #733688 - Flags: review?(mbrubeck)
Comment on attachment 733688 [details] [diff] [review]
Patch v3

Review of attachment 733688 [details] [diff] [review]:
-----------------------------------------------------------------

::: browser/metro/base/tests/mochitest/Makefile.in
@@ +30,5 @@
>    browser_context_menu_tests_03.html \
>    text-block.html \
>    browser_sanitize_ui.js \
>    browser_topsites.js \
> +  browser_tabs.js \

This file is missing from the patch.
Attachment #733688 - Flags: review?(mbrubeck)
Attached patch Patch v4 (obsolete) — Splinter Review
Duh! Added the test file.
Attachment #733688 - Attachment is obsolete: true
Attachment #733982 - Flags: review?(mbrubeck)
Attachment #733982 - Flags: review?(mbrubeck) → review+
Interestingly enough IE will auto-dismiss the tab bar when you add a new tab, but not when you close one. This is what I think is the best approach.
(In reply to Rodrigo Silveira [:rsilveira] from comment #14)
> Interestingly enough IE will auto-dismiss the tab bar when you add a new
> tab, but not when you close one. This is what I think is the best approach.

The IE behavior is what we should try for. It's the right split.
Attached patch Patch v5 (obsolete) — Splinter Review
Just added expected peek behavior when opening/closing tabs
Attachment #733982 - Attachment is obsolete: true
Attachment #734044 - Flags: review?(mbrubeck)
Flags: needinfo?(ywang)
Comment on attachment 734044 [details] [diff] [review]
Patch v5

Review of attachment 734044 [details] [diff] [review]:
-----------------------------------------------------------------

::: browser/metro/base/content/browser-ui.js
@@ +1197,5 @@
>        ContextUI.dismissWithDelay(kNewTabAnimationDelayMsec);
>      });
> +
> +    if (!this.isExpanded)
> +      this.displayTabs();

I'm wary of the change to peekTabs.  With this patch, accidentally calling peekTabs while the tab bar is already visible will add an event listener that could stick around until triggered by some later, possibly unrelated animation.

Perhaps it should be something like this:

  if (this.isExpanded) {
    ContextUI.dismissWithDelay(...);
  } else {
    addEventListener("animationend", ...);
    this.displayTabs();
  }

Or maybe code that wants to dismiss the tab bar whether or not it's already open should call dismissWithDelay directly instead of using peekTabs.
Attachment #734044 - Flags: review?(mbrubeck) → review-
Thanks for catching this.
I agreed with Asa and Rodrigo.
I think consistency should not be a concern here. Our users wouldn't notice the bar behaviors differently. What they care is whether the UI can support their tasks. 

I think closing multiple tabs all at once is definitely a use case. And we should keep the tab bar open to support that.

It's worthy noting that we will also have a junior-style on-screen "+"(New tab) button in the future. "Adding a new tab" brings the user focus to the FX start. It makes sense to have the tab bar open and auto-miss itself in order to support that focus.
(In reply to Matt Brubeck (:mbrubeck) from comment #17)
> ::: browser/metro/base/content/browser-ui.js
> @@ +1197,5 @@
> >        ContextUI.dismissWithDelay(kNewTabAnimationDelayMsec);
> >      });
> > +
> > +    if (!this.isExpanded)
> > +      this.displayTabs();
> 
> I'm wary of the change to peekTabs.  With this patch, accidentally calling
> peekTabs while the tab bar is already visible will add an event listener
> that could stick around until triggered by some later, possibly unrelated
> animation.
> 
> Perhaps it should be something like this:
> 
>   if (this.isExpanded) {
>     ContextUI.dismissWithDelay(...);
>   } else {
>     addEventListener("animationend", ...);
>     this.displayTabs();
>   }
> 
> Or maybe code that wants to dismiss the tab bar whether or not it's already
> open should call dismissWithDelay directly instead of using peekTabs.

Good point. I'm doing pretty much what you mention here, the only thing I added was a setTimout(..., 0) to the case when it's already expanded. This is because the call to _editURI after addTab will eventually cancel the dismiss timeout.

Do you need a new patch?
Attached patch Patch v6Splinter Review
Changed as per discussion above.
Attachment #734044 - Attachment is obsolete: true
Attachment #734160 - Flags: review?(mbrubeck)
Attachment #734160 - Flags: review?(mbrubeck) → review+
https://hg.mozilla.org/mozilla-central/rev/4b6761caea27
Status: ASSIGNED → RESOLVED
Closed: 11 years ago
Flags: in-testsuite+
Resolution: --- → FIXED
Target Milestone: --- → Firefox 23
Went through the following "Defect" for iteration #5 testing and everything passed without issues. Used the following build:

http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2013-04-14-03-10-25-mozilla-central/

- Ensured that the "Tab Bar" is auto-dismissed when adding a new tab as per Comment 15 (using both the "+" at the top and the "+" at the side of the browser)
- Ensured that the "Tab Bar" is NOT auto-dismissed when closing a tab(s) as per Comment 15
- Went through the test cases in Comment 0 and ensured that creating a new tab will display the "Tab Bar" and then auto-dismissing (as per Comment 15)
- Ensured that the animation works correctly when closing tabs from the "Tab Bar"
- Ensured the "Tab Bar" is always displayed when creating/closing using the "Always Show Tabs" feature in the "Options" charm
- Ensured that all of the above cases work while the browser is in filled view
Status: RESOLVED → VERIFIED
Went through the following "Defect" for iteration #6 testing. Used the following build:

http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2013-04-30-03-09-41-mozilla-central/

Went through Comment 23 and ensured all the cases worked without any issues. Also went through the comments (a recap) and ensured the behavior matches the discussion(s) throughout the comments.
Went through the following "Defect" for iteration #7 testing. Used the following build:

http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2013-05-25-06-25-25-mozilla-central/

Went through Comment 23 and ensured all the cases worked without any issues. Also went through the comments (a recap) and ensured the behavior matches the discussion(s) throughout the comments.
Went through the following "Defect" for iteration #8 testing without any issues. Used the following build:

http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2013-06-14-03-11-00-mozilla-central/

- Went through all the test cases listed in comment 23 without any issues ("Always Show Tabs" has been removed so not tested)
- Ensured that the "Navigation App Bar" is dismissed when opening a new tab using the right click context menu
- Ensured that creating a new tab using "CTRL + T" auto-dismisses the "Navigation App Bar" once the new tab has been created
- Ensured that all the test cases also worked in "Filled View" without any issues
Went through the following "Defect" for iteration #9 testing without any issues. Used the following build:

http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2013-06-27-03-10-27-mozilla-central/

- Went through the original attached "Story" without any issues
- Went through the test cases that have been added in comment 23 without any issues
- Went through the test cases that have been added in comment 26 without any issues
OS: Windows 8 Metro → Windows 8.1
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: