Open Bug 1127810 Opened 9 years ago Updated 2 years ago

UITour: Closing a tour tab hides highlights & info panels in other tour tabs

Categories

(Firefox :: Tours, defect)

37 Branch
defect

Tracking

()

People

(Reporter: agibson, Unassigned)

Details

Attachments

(1 file, 1 obsolete file)

STR:

1.) In Nightly click Help -> Nightly Tour to open (#tab1).
2.) Once the tour page opens, open a second tour (#tab2) by clicking Help -> Nightly Tour.
3.) Close #tab1 by clicking (x).

Expected results:

The door-hanger in #tab2 should remain visible

Actual results:

When the #tab1 closes, the door-hanger in #tab2 gets torn down.
Note: this doesn't seem to happen in Dev Edition (FF 37) or earlier, so is likely a regression caused by a recent change in Nightly.
Could you attach the Browser Console output with UITour debugging on while doing the STR? It seems like the ordering of events may have changed. Even better if you also attach from a working version.
Flags: needinfo?(agibson)
From STR in Nightly:

"onPageEvent:" Object { action: "hideMenu", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"hideMenu:" "appMenu" UITour.jsm:1451
"onPageEvent:" Object { action: "hideHighlight", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"_setAppMenuStateForAnnotation:" "highlight" UITour.jsm:941
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:942
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:947
"onPageEvent:" Object { action: "hideInfo", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"_setAppMenuStateForAnnotation:" "info" UITour.jsm:941
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:942
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:947
"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"sendPageCallback" Object { data: Object, callbackID: "gtrtpiei" } UITour.jsm:858
"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"sendPageCallback" Object { data: Object, callbackID: "uumqibw" } UITour.jsm:858
"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"sendPageCallback" Object { data: Object, callbackID: "olnwmol" } UITour.jsm:858
"onPageEvent:" Object { action: "registerPageID", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"onPageEvent:" Object { action: "setTreatmentTag", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"onPageEvent:" Object { action: "setTreatmentTag", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"             _.-~-.
           7''  Q..\
        _7         (_
      _7  _/    _q.  /
    _7 . ___  /VVvv-'_                                            .
   7/ / /~- \_\\      '-._     .-'                      /       //
  ./ ( /-~-/||'=.__  '::. '-~'' {             ___   /  //     ./{
 V   V-~-~| ||   __''_   ':::.   ''~-~.___.-'' _/  // / {_   /  {  /
  VV/-~-~-|/ \ .'__'. '.    '::                     _ _ _        ''.
  / /~~~~||VVV/ /  \ )  \        _ __ ___   ___ ___(_) | | __ _   .::'
 / (~-~-~\\.-' /    \'   \::::. | '_ ` _ \ / _ \_  / | | |/ _` | :::'
/..\    /..\__/      '     '::: | | | | | | (_) / /| | | | (_| | ::'
vVVv    vVVv                 ': |_| |_| |_|\___/___|_|_|_|\__,_| ''

Hi there, nice to meet you!

Interested in having a direct impact on hundreds of millions of users? Join
Mozilla, and become part of a global community that’s helping to build a
brighter future for the Web.

Visit https://careers.mozilla.org to learn about our current job openings.
Visit https://www.mozilla.org/contribute for more ways to get involved and
help support Mozilla.

---

If you don't want to see this message next time, run this JS statement:

    Tabzilla.disableEasterEgg()
" tabzilla.js:672:20
"onPageEvent:" Object { action: "showInfo", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"getTarget:" "appMenu" UITour.jsm:870
"_setAppMenuStateForAnnotation:" "info" UITour.jsm:941
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:942
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:947
"handleEvent: type =" "TabSelect" "event =" TabSelect { target: <tab.tabbrowser-tab>, isTrusted: true, detail: Object, currentTarget: <tabs#tabbrowser-tabs.tabbrowser-tabs>, eventPhase: 3, bubbles: true, cancelable: false, defaultPrevented: false, timeStamp: 1423037496152589, originalTarget: <tab.tabbrowser-tab>, explicitOriginalTarget: <tab.tabbrowser-tab> } UITour.jsm:681
"teardownTourForBrowser: aBrowser = " <browser type="content-targetable" message="true" messagemanagergroup="browsers" contextmenu="contentAreaContextMenu" tooltip="aHTMLTooltip" autocompletepopup="PopupAutoComplete" selectmenulist="ContentSelectDropdown" autoscrollpopup="autoscroller" nodefaultsrc="true" clickthrough="never"> false UITour.jsm:752
"_setAppMenuStateForAnnotation:" "highlight" UITour.jsm:941
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:942
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:947
"_setAppMenuStateForAnnotation:" "info" UITour.jsm:941
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:942
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:947
"hideMenu:" "appMenu" UITour.jsm:1451
"hideMenu:" "loop" UITour.jsm:1451
"onPageEvent:" Object { action: "hideMenu", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"hideMenu:" "appMenu" UITour.jsm:1451
"onPageEvent:" Object { action: "hideHighlight", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"_setAppMenuStateForAnnotation:" "highlight" UITour.jsm:941
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:942
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:947
"onPageEvent:" Object { action: "hideInfo", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"_setAppMenuStateForAnnotation:" "info" UITour.jsm:941
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:942
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:947
"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"sendPageCallback" Object { data: Object, callbackID: "jdthqzgqm" } UITour.jsm:858
"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"sendPageCallback" Object { data: Object, callbackID: "qrovgo" } UITour.jsm:858
"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"sendPageCallback" Object { data: Object, callbackID: "oyhzlbo" } UITour.jsm:858
"onPageEvent:" Object { action: "registerPageID", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"onPageEvent:" Object { action: "setTreatmentTag", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"onPageEvent:" Object { action: "setTreatmentTag", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"             _.-~-.
           7''  Q..\
        _7         (_
      _7  _/    _q.  /
    _7 . ___  /VVvv-'_                                            .
   7/ / /~- \_\\      '-._     .-'                      /       //
  ./ ( /-~-/||'=.__  '::. '-~'' {             ___   /  //     ./{
 V   V-~-~| ||   __''_   ':::.   ''~-~.___.-'' _/  // / {_   /  {  /
  VV/-~-~-|/ \ .'__'. '.    '::                     _ _ _        ''.
  / /~~~~||VVV/ /  \ )  \        _ __ ___   ___ ___(_) | | __ _   .::'
 / (~-~-~\\.-' /    \'   \::::. | '_ ` _ \ / _ \_  / | | |/ _` | :::'
/..\    /..\__/      '     '::: | | | | | | (_) / /| | | | (_| | ::'
vVVv    vVVv                 ': |_| |_| |_|\___/___|_|_|_|\__,_| ''

Hi there, nice to meet you!

Interested in having a direct impact on hundreds of millions of users? Join
Mozilla, and become part of a global community that’s helping to build a
brighter future for the Web.

Visit https://careers.mozilla.org to learn about our current job openings.
Visit https://www.mozilla.org/contribute for more ways to get involved and
help support Mozilla.

---

If you don't want to see this message next time, run this JS statement:

    Tabzilla.disableEasterEgg()
" tabzilla.js:672:20
"onPageEvent:" Object { action: "showInfo", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:347
"getTarget:" "appMenu" UITour.jsm:870
"_setAppMenuStateForAnnotation:" "info" UITour.jsm:941
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:942
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:947
"handleEvent: type =" "TabClose" "event =" TabClose { target: <tab.tabbrowser-tab>, isTrusted: true, view: ChromeWindow → browser.xul, detail: 0, layerX: 0, layerY: 0, pageX: 0, pageY: 0, which: 0, rangeParent: <xul:hbox.tab-content>, rangeOffset: 5 } UITour.jsm:681
"teardownTourForBrowser: aBrowser = " <browser type="content-targetable" message="true" messagemanagergroup="browsers" contextmenu="contentAreaContextMenu" tooltip="aHTMLTooltip" autocompletepopup="PopupAutoComplete" selectmenulist="ContentSelectDropdown" autoscrollpopup="autoscroller" nodefaultsrc="true" clickthrough="never"> true UITour.jsm:752
"_setAppMenuStateForAnnotation:" "highlight" UITour.jsm:941
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:942
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:947
"_setAppMenuStateForAnnotation:" "info" UITour.jsm:941
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:942
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:947
"hideMenu:" "appMenu" UITour.jsm:1451
"hideMenu:" "loop" UITour.jsm:1451
Flags: needinfo?(agibson)
From STR in Firefox 37 dev edition:

"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"sendPageCallback" Object { data: Object, callbackID: "irjvgosn" } UITour.jsm:874
"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"sendPageCallback" Object { data: Object, callbackID: "bojirxnmvi" } UITour.jsm:874
"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"sendPageCallback" Object { data: Object, callbackID: "tdbtbxbj" } UITour.jsm:874
"onPageEvent:" Object { action: "registerPageID", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"onPageEvent:" Object { action: "setTreatmentTag", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"onPageEvent:" Object { action: "setTreatmentTag", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"             _.-~-.
           7''  Q..\
        _7         (_
      _7  _/    _q.  /
    _7 . ___  /VVvv-'_                                            .
   7/ / /~- \_\\      '-._     .-'                      /       //
  ./ ( /-~-/||'=.__  '::. '-~'' {             ___   /  //     ./{
 V   V-~-~| ||   __''_   ':::.   ''~-~.___.-'' _/  // / {_   /  {  /
  VV/-~-~-|/ \ .'__'. '.    '::                     _ _ _        ''.
  / /~~~~||VVV/ /  \ )  \        _ __ ___   ___ ___(_) | | __ _   .::'
 / (~-~-~\\.-' /    \'   \::::. | '_ ` _ \ / _ \_  / | | |/ _` | :::'
/..\    /..\__/      '     '::: | | | | | | (_) / /| | | | (_| | ::'
vVVv    vVVv                 ': |_| |_| |_|\___/___|_|_|_|\__,_| ''

Hi there, nice to meet you!

Interested in having a direct impact on hundreds of millions of users? Join
Mozilla, and become part of a global community that’s helping to build a
brighter future for the Web.

Visit https://careers.mozilla.org to learn about our current job openings.
Visit https://www.mozilla.org/contribute for more ways to get involved and
help support Mozilla.

---

If you don't want to see this message next time, run this JS statement:

    Tabzilla.disableEasterEgg()
" tabzilla.js:672:20
"onPageEvent:" Object { action: "showInfo", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"getTarget:" "appMenu" UITour.jsm:886
"_setAppMenuStateForAnnotation:" "info" UITour.jsm:965
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:966
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:971
"teardownTour: aWindowClosing = false" UITour.jsm:799
"_setAppMenuStateForAnnotation:" "highlight" UITour.jsm:965
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:966
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:971
"_setAppMenuStateForAnnotation:" "info" UITour.jsm:965
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:966
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:971
"onPageEvent:" Object { action: "hideMenu", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"Ignoring disallowed action from a hidden page:" "hideMenu" UITour.jsm:366
"onPageEvent:" Object { action: "hideHighlight", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"Ignoring disallowed action from a hidden page:" "hideHighlight" UITour.jsm:366
"onPageEvent:" Object { action: "hideInfo", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"Ignoring disallowed action from a hidden page:" "hideInfo" UITour.jsm:366
"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"sendPageCallback" Object { data: Object, callbackID: "sltdelnr" } UITour.jsm:874
"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"sendPageCallback" Object { data: Object, callbackID: "ztgpej" } UITour.jsm:874
"onPageEvent:" Object { action: "getConfiguration", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"sendPageCallback" Object { data: Object, callbackID: "qjhlyrbb" } UITour.jsm:874
"onPageEvent:" Object { action: "registerPageID", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"onPageEvent:" Object { action: "setTreatmentTag", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"onPageEvent:" Object { action: "setTreatmentTag", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"             _.-~-.
           7''  Q..\
        _7         (_
      _7  _/    _q.  /
    _7 . ___  /VVvv-'_                                            .
   7/ / /~- \_\\      '-._     .-'                      /       //
  ./ ( /-~-/||'=.__  '::. '-~'' {             ___   /  //     ./{
 V   V-~-~| ||   __''_   ':::.   ''~-~.___.-'' _/  // / {_   /  {  /
  VV/-~-~-|/ \ .'__'. '.    '::                     _ _ _        ''.
  / /~~~~||VVV/ /  \ )  \        _ __ ___   ___ ___(_) | | __ _   .::'
 / (~-~-~\\.-' /    \'   \::::. | '_ ` _ \ / _ \_  / | | |/ _` | :::'
/..\    /..\__/      '     '::: | | | | | | (_) / /| | | | (_| | ::'
vVVv    vVVv                 ': |_| |_| |_|\___/___|_|_|_|\__,_| ''

Hi there, nice to meet you!

Interested in having a direct impact on hundreds of millions of users? Join
Mozilla, and become part of a global community that’s helping to build a
brighter future for the Web.

Visit https://careers.mozilla.org to learn about our current job openings.
Visit https://www.mozilla.org/contribute for more ways to get involved and
help support Mozilla.

---

If you don't want to see this message next time, run this JS statement:

    Tabzilla.disableEasterEgg()
" tabzilla.js:672:20
"onPageEvent:" Object { action: "showInfo", data: Object } Object { target: <browser>, name: "UITour:onPageEvent", sync: false, json: Object, data: Object, objects: Object, principal: undefined } UITour.jsm:344
"getTarget:" "appMenu" UITour.jsm:886
"_setAppMenuStateForAnnotation:" "info" UITour.jsm:965
"_setAppMenuStateForAnnotation: Menu is expected to be:" "closed" UITour.jsm:966
"_setAppMenuStateForAnnotation: Panel already in expected state" UITour.jsm:971
What's weird is I just noticed this bug does not happen in 37 dev edition, but it does in FF 35 release version....
My hope is that our TabClose handler probably just needs to check if the closed tab was selected.
Attached file MozReview Request: bz://1127810/MattN (obsolete) —
/r/3381 - Bug 1127810 - UITour: Don't teardown tour UI for a tab if it isn't selected.

Pull down this commit:

hg pull review -r 33ad66476a843111715df5811e913cc1556021a4
Comment on attachment 8559630 [details]
MozReview Request: bz://1127810/MattN

This feels kinda dirty to me and I worry about possible regressions (though the tours deal with teardown on tab switch too).
Attachment #8559630 - Flags: feedback?(bmcbride)
Assignee: nobody → MattN+bmo
Status: NEW → ASSIGNED
https://reviewboard.mozilla.org/r/3381/#review2811

::: browser/components/uitour/UITour.jsm
(Diff revision 1)
>        this.setExpiringTelemetryBucket(pageID, aTourPageClosing ? "closed" : "inactive");

Hm... if the current tab is a tour page, and we close another tour page, this current sets a "closed" expiring bucket. It should be keeping the bucket from the current tour page.

::: browser/components/uitour/UITour.jsm
(Diff revision 1)
>      if (aTourPageClosing) {

This seems like the only thing we should be doing when closing a non-current tab.
Attachment #8559630 - Flags: feedback?(bmcbride) → feedback-
Just pinging this bug. Do we think it will be completed by FF36?
(In reply to Cory Price [:ckprice] from comment #10)
> Just pinging this bug. Do we think it will be completed by FF36?

Sorry, I think it won't since the release candidate was already built.
No longer blocks: fx-UITour-hello-36
This isn't a priority for me at the moment and it's quite a tricky problem.
Assignee: MattN+bmo → nobody
Status: ASSIGNED → NEW
OS: Mac OS X → All
Hardware: x86 → All
Attachment #8559630 - Attachment is obsolete: true
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: