cxw42 / TabFern

Google Chrome extension for saving and restoring sets of tabs, and for switching between windows and tabs from a vertical, grouped list.
https://cxw42.github.io/TabFern/
Other
170 stars 29 forks source link

Closing tabs but not all disappear from tabfern #129

Closed Procyon-b closed 6 years ago

Procyon-b commented 6 years ago

chrome 68.0.3440.84 tabfern 0.1.16.1337

I have noticed that some tabs that I have closed moments ago are still in tabfern's list. The ghost tabs are in different windows. I have looked at the error log for the tabfern window as well as the background script. No errors. On the windows with ghost tabs, when I click in tabfern past the ghost, the wrong tab is selected (depending on how many ghosts there are).

Note that windows was hybernating. Has it somehow screwed chrome ? ...

Edit: I have moved this tab from a single-tab window to another one, and coincidently placed it on place of a ghost tab. Now tabfern identifies this tab (github) with the identity of the ghost tab

cxw42 commented 6 years ago

Thanks for reporting! Was this when you had a lot of tabs open, like you mentioned in the other thread? It does take some nonzero time to save, so if you hibernated while the save was in progress, strange things might have happened. I will add a spinner to 0.1.17 so you can at least see if that's the case.

Thanks for checking the error logs! Not all messages are on by default. Maybe I should add a "developer options" setting or magic hotkey :) . To enable, in the console, go to the middle iframe (tree.html), and say log.setLevel(log.levels.INFO). Or DEBUG if you really want messages! It uses the loglevel library.

Procyon-b commented 6 years ago

No it was not at the same time. But I had 4 windows with 2-5 tabs each and one more with 10 tabs. The events unfolded like this: the computer was in full hybernate mode. I woke it up, logged in, and started checking tabs. About 2-3 min in the process, I decided to close some of them. They were always focused and where done loading. I closed them by clicking on the tab, not using tabfern. Some of them, not all, did not disappear from tabfern list. Strangely, half an hour later, after reading https://cxw42.github.io/TabFern/ I decide to double click tabfern's icon (as writen on that page) to see what is the difference with a single click, and tabfern opened with the list fixed, but with 2 recovered windows added. The ones that contained ghost tabs.

Procyon-b commented 6 years ago

It just happened again now. Chrome has been closed and restarted since last time. I had only one window opened, with 10 tabs. Windows was not swaping. I closed 7 of the tabs, and all became ghost. Then I double-clicked TF icon, nothing changed. Then I closed TF window and reopened it, Fixed but with "recovered tabs" added.

Edit: In fact it was 12 tabs, and 2 were closed "correctly".

capture

cxw42 commented 6 years ago

Thanks for the detailed report! I tried reproducing with the same configuration and set of tabs but was not able to trigger the behaviour. I also looked through the source briefly and don't see the code path that gave you that result. Here's a picture of the four steps in turning on the full debug output in the developer console, if you're willing to do so---

image

Then I closed TF window and reopened it, Fixed but with "recovered tabs" added.

The tabs showing under "recovered" after closing and reopening the TF window means that TF thought those tabs were open in an unsaved window the last time the tree was saved. Saves happen automatically when tabs are added/deleted/moved.

You can also refresh the TabFern window (F5) to fix this sort of situation, rather than closing and re-opening TF.

On the windows with ghost tabs, when I click in tabfern past the ghost, the wrong tab is selected (depending on how many ghosts there are).

That makes sense. TF assumes that the list in the TF window matches the order of tabs in the Chrome window, so any difference between those two will cause the wrong tabs to be activated. I am working on relaxing that assumption as part of #35.

Procyon-b commented 6 years ago

I have set the debug mode as asked. We will see if something happens. Note that chrome has updated today. I'm now running 68.0.3440.106. If it was a problem particular to the former version...

I'm running an old extension, and its behavior (when used in incognito mode) has change since my "return". I was previously running 67.0.3396.99

On the windows with ghost tabs, when I click in tabfern past the ghost, the wrong tab is selected (depending on how many ghosts there are).

That makes sense. TF assumes that the list in the TF window matches the order of tabs in the Chrome window

That's what I thought, but I wanted to describe the whole behavior. I had played with tabs order, and opening a tab at the right place with my alias extension.

Procyon-b commented 6 years ago

It happened again. I have noticed that one tab was ghosted, and I knew that it was moments ago. But, not knowing what to look for (what was the tab.id ...), I was unabled to find the relevant information in the debug log. Fortunately, after that every closed tab became a ghost. So i maximized TF window to log a "Saved size" event. Then closed another tab, another ghost. Here is the log:

It's only cut and paste, sorry if it's not readable.

Saved size
tree.js:2204 {Tab removed: 599, removeinfo: {…}}Tab removed: 599removeinfo: {isWindowClosing: false, windowId: 86}__proto__: Object
tree.js:2193 {Tab activated: 625, activeinfo: {…}}
tree.js:2084 {Tab updated: 625, Index: 3, changeinfo: {…}, ctab: {…}}
tree.js:2084 {Tab updated: 625, Index: 3, changeinfo: {…}, ctab: {…}}
tree.js:2084 {Tab updated: 625, Index: 3, changeinfo: {…}, ctab: {…}}
tree.js:1765 {onfocus: j…y.Event, x_blurred: "undefined", y_blurred: "undefined"}
tree.js:2084 {Tab updated: 625, Index: 3, changeinfo: {…}, ctab: {…}}Index: 3Tab updated: 625changeinfo: {status: "complete"}ctab: {active: true, audible: false, autoDiscardable: true, discarded: false, favIconUrl: "https://www.w3counter.com/favicon.ico", …}active: trueaudible: falseautoDiscardable: truediscarded: falsefavIconUrl: "https://www.w3counter.com/favicon.ico"height: 663highlighted: trueid: 625incognito: falseindex: 3mutedInfo: {muted: false}pinned: falseselected: truestatus: "complete"title: "W3Counter: Global Web Stats - July 2018"url: "https://www.w3counter.com/globalstats.php?year=2018&month=7"width: 1280windowId: 86__proto__: Object__proto__: Object
tree.js:1765 {onfocus: j…y.Event, x_blurred: "undefined", y_blurred: "undefined"}
tree.js:1850 {Awaiting select: 1, elts: Array(10)}
tree.js:1765 {onfocus: j…y.Event, x_blurred: 129, y_blurred: 345, elts: Array(10)}

tab 599 is the ghost tab. It was the last tab of the window. tab 625 was the previous tab in that window. And it received focus.

This is not the first ghost, it's difficult to know if all ghosts had the same "error" or if ghosts >1 are a consequence of TF failing on ghost one.

Do you know if there is a way to timestamp console lines ?

Edit: the current tab is in bold in TF. But it was broken when it had ghosts. Even on windows without ghosts. Sometimes bold, most of the time not. And going back to a previously bold, not bold. After a refresh F5, everything is back to normal (obviously).

cxw42 commented 6 years ago

I don't know about timestamps for console lines. I did add a DEBUG-level log to each step of tabOnRemoved, which is the function in question. Would you be willing to load v0.1.17-pre.1 unpacked? Check out branch v01h and load .../tabfern, which is the dev tree (.../webstore is the deployed version). Make sure the log level is set to DEBUG, and then send me everything from Tab removed to save tree when it happens again. Thanks!

Procyon-b commented 6 years ago

v0.1.17-pre.1 loaded and in debug

Procyon-b commented 6 years ago

No ghost but I have noticed that the bold-style of the current tab is missing after a while. After a refresh F5, it goes back to normal.

(5 min after writing the lines above) : Something may be broken with the "bolding" without being related to ghosts. When I select/swap from one tab to another tab/window without using TF, multiples tabs get bolded.

Tabs count is low: 6 in total in 4 windows.

cxw42 commented 6 years ago

You are seeing a number of things I've not seen in the whole time TF has existed :D and I'm curious what the difference might be.

Procyon-b commented 6 years ago

What I have done: F5 to reset TF window, log level to debug. Opened a 3rd window. Start focusing all windows one after another, and here is how it looked in TF. Clicking a tab in TF bolds only that line (unbolding all others).

I'll try in a new profile and let you know. [edit: see below]

Win 7 32bits, chrome 68.0.3440.106 extensions: ads killer plus, alias bookmarks x2 (+ local dev), "don't add CSE" (local), "awesome cookie manager", extension log, TF (local), quick shortcuts, stylus, tampermonkey, "I don't care about cookies", enhanced history (local) nothing tabs related.

capture-0 1 17-pre 1

log.setLevel(log.levels.DEBUG)
undefined
tree.js:1807 {Window created: 87, Restore?: "no", cwin: {…}}
tree.js:2223 {Tab created: 88, ctab: {…}}
tree.js:1116 {Bump of prune timer requested for: {…}, cwin: undefined}
tree.js:1128 {"   Bumping prune timer for": {…}, cwin: undefined}
tree.js:2418 {Tab activated: 88, activeinfo: {…}}
tree.js:536 Saved tree
tree.js:2097 {merge check tab 88 win 87: {…}}
tree.js:1116 {Bump of prune timer requested for: {…}, cwin: undefined}
tree.js:1128 {"   Bumping prune timer for": {…}, cwin: undefined}
tree.js:2296 {Tab updated: 88, Index: 0, changeinfo: {…}, ctab: {…}}
tree.js:536 Saved tree
tree.js:2296 {Tab updated: 88, Index: 0, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 88, Index: 0, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 88, Index: 0, changeinfo: {…}, ctab: {…}}
tree.js:2418 {Tab activated: 34, activeinfo: {…}}

Edit: Tried in a new profile. Same result. capture-0 1 17-pre 1-cleanprofile

Procyon-b commented 6 years ago

Could this be chrome's fault ? I have a "problem" with another extension. When "Awesome cookie manager" popup window is opened in an incognito window, it used to display incognito cookies. Now, with this version of chrome, it always displays "normal" cookies. I can't see incognito cookies anymore.

cxw42 commented 6 years ago

It could most certainly be Chrome's fault :D :D . However, the Awesome cookie manager change may have been a change to that extension's incognito mode - see, e.g., here.

Procyon-b commented 6 years ago

Last version of Awesome cookie manager is: 1.0.0.0 - September 22, 2016 It is definitively not the culprit.

Have you already played with multiple chrome versions on the same computer, or with installing an older version? All pages related to this issue are a bit outdated. Even binaries archives don't work properly or are more than 2 years old. I have finally found a copy of 67.0.3396.79, but don't know how to handle it properly with my current installation. I can't correctly extract its content without installing it.

Procyon-b commented 6 years ago

TF v0.1.17-pre.1

Still happening in this version. It seems less frequent (than 0.1.16.1337). Usually I don't notice it immediately so I can't paste a relevant log here. This time I've seen it. Here is the console log.


tree.js:2429 {Tab removed: 302, removeinfo: {…}}
tree.js:2475 {Removing value: {…}, tabid: 302, removeinfo: {…}}
tree.js:2480 {Removing tree node: {…}, tabid: 302, removeinfo: {…}}
tree.js:2484 {Updating tab index values: "j2_10", tabid: 302, removeinfo: {…}}
tree.js:2489 {Tab index values updated: "j2_10", tabid: 302, removeinfo: {…}}
tree.js:2418 {Tab activated: 288, activeinfo: {…}}
tree.js:536 Saved tree
tree.js:2429 {Tab removed: 288, removeinfo: {…}}
tree.js:2475 {Removing value: {…}, tabid: 288, removeinfo: {…}}
tree.js:2480 {Removing tree node: {…}, tabid: 288, removeinfo: {…}}
tree.js:2484 {Updating tab index values: "j2_10", tabid: 288, removeinfo: {…}}
tree.js:2489 {Tab index values updated: "j2_10", tabid: 288, removeinfo: {…}}
tree.js:2418 {Tab activated: 259, activeinfo: {…}}
tree.js:536 Saved tree
tree.js:2429 {Tab removed: 259, removeinfo: {…}}
tree.js:2475 {Removing value: {…}, tabid: 259, removeinfo: {…}}
tree.js:2480 {Removing tree node: {…}, tabid: 259, removeinfo: {…}}
tree.js:2484 {Updating tab index values: "j2_10", tabid: 259, removeinfo: {…}}
tree.js:2489 {Tab index values updated: "j2_10", tabid: 259, removeinfo: {…}}
tree.js:2418 {Tab activated: 270, activeinfo: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:536 Saved tree
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 270, Index: 10, changeinfo: {…}, ctab: {…}}
tree.js:2429 {Tab removed: 270, removeinfo: {…}}
tree.js:2456 {Bailing - no tab_node_id: 270, removeinfo: {…}}
tree.js:2418 {Tab activated: 271, activeinfo: {…}}
tree.js:2296 {Tab updated: 271, Index: 9, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 271, Index: 9, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 271, Index: 9, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 271, Index: 9, changeinfo: {…}, ctab: {…}}
tree.js:2429 {Tab removed: 271, removeinfo: {…}}
tree.js:2456 {Bailing - no tab_node_id: 271, removeinfo: {…}}
tree.js:2418 {Tab activated: 269, activeinfo: {…}}
tree.js:2296 {Tab updated: 269, Index: 8, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 269, Index: 8, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 269, Index: 8, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 269, Index: 8, changeinfo: {…}, ctab: {…}}
tree.js:2429 {Tab removed: 269, removeinfo: {…}}
tree.js:2456 {Bailing - no tab_node_id: 269, removeinfo: {…}}
tree.js:2418 {Tab activated: 268, activeinfo: {…}}
tree.js:2296 {Tab updated: 268, Index: 7, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 268, Index: 7, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 268, Index: 7, changeinfo: {…}, ctab: {…}}
tree.js:1953 {onfocus: j…y.Event, x_blurred: "undefined", y_blurred: "undefined"}
tree.js:2296 {Tab updated: 268, Index: 7, changeinfo: {…}, ctab: {…}}
tree.js:2038 {Awaiting select: 1, elts: Array(10)}
tree.js:1953 {onfocus: j…y.Event, x_blurred: 93, y_blurred: 247, elts: Array(10)}
tree.js:1795 {About to activate: 1}
tree.js:1953 {onfocus: j…y.Event, x_blurred: "undefined", y_blurred: "undefined"}
tree.js:1795 {About to activate: 1}
tree.js:2418 {Tab activated: 267, activeinfo: {…}}
tree.js:2296 {Tab updated: 267, Index: 6, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 267, Index: 6, changeinfo: {…}, ctab: {…}}
tree.js:2296 {Tab updated: 267, Index: 6, changeinfo: {…}, ctab: {…}}
tree.js:1953 {onfocus: j…y.Event, x_blurred: "undefined", y_blurred: "undefined"}
tree.js:1953 {onfocus: j…y.Event, x_blurred: "undefined", y_blurred: "undefined"}
tree.js:1953 {onfocus: j…y.Event, x_blurred: "undefined", y_blurred: "undefined"}
tree.js:1795 {About to activate: 1}
tree.js:1953 {onfocus: j…y.Event, x_blurred: "undefined", y_blurred: "undefined"}

See "tree.js:2456 {Bailing - no tab_node_id: 270, removeinfo: {…}}" ? I think it failed 2 or 3 tab "closing" events before this line appears.

Procyon-b commented 6 years ago

By the way, I have discovered why "Awesome cookie manager" doesn't display incognito cookies. Either google has changed the default value of "incognito": "split" in the manifest file, or another setting has been modified. I don't know how to run an older copy of chrome alongside the normal installation, so I can't compare behaviors.

cxw42 commented 6 years ago

Thank you for the additional detail! Updated based on the logs --- please grab the latest. When you catch a Bailing... message in the log, would you please look backwards? (Expand the "Object" entries if you didn't have the console open.) Whatever the ctab # is (e.g,. 270 above), look for something like:

{Tab removed: 142, removeinfo: {…}}
{Removing value for ctab: 142, tab_val: {…}, removeinfo: {…}}
{Removing tree node j2_907 for ctab: 142, tab_node: {…}, tab_val: {…}, removeinfo: {…}}
{Updating tab index values after removing ctab: 142, window_node_id: "j2_905", removeinfo: {…}}
{Tab index values updated after removing ctab: 142, window_node_id: "j2_905", removeinfo: {…}}

Expand all and send me that log (obfuscate URLs if you want ;) ). I know this is tedious, but it's the best I can think of at the moment. My guess is that the tab is being removed prematurely.

Explanation: somehow, TF's internal record of the tab lost its connection to the node ID.

I will add some more error checking but am not able to do so right at the moment.

Procyon-b commented 6 years ago

Here it is. Nothing related to 552 after that.

tree.js:2444 {Tab activated: 552, activeinfo: {…}}
  Tab activated: 552
  activeinfo: {tabId: 552, windowId: 432}
  __proto__: Object
tree.js:2322 {Tab updated: 552, Index: 3, changeinfo: {…}, ctab: {…}}
  Index: 3
  Tab updated: 552
  changeinfo: {discarded: false}
  ctab:
    active: true
    audible: false
    autoDiscardable: true
    discarded: false
    height: 663
    highlighted: true
    id: 552
    incognito: true
    index: 3
    mutedInfo: {muted: false}
    pinned: false
    selected: true
    status: "loading"
    title: "Télécharger vos données : téléchargements"
    url: "XXX"
    width: 1280
    windowId: 432
    __proto__: Object
  __proto__: Object
tree.js:2322 {Tab updated: 552, Index: 3, changeinfo: {…}, ctab: {…}}
  Index: 3
  Tab updated: 552
  changeinfo: {status: "loading", url: "XXX"}
  ctab:
    active: true
    audible: false
    autoDiscardable: true
    discarded: false
    height: 663
    highlighted: true
    id:552
    incognito: true
    index: 3
    mutedInfo: {muted: false}
    pinned: false
    selected: true
    status: "loading"
    title: "Télécharger vos données : téléchargements"
    url: "XXX"
    width: 1280
    windowId: 432
    __proto__: Object
  __proto__: Object
tree.js:2455 {Tab removed: 552, removeinfo: {…}}
  Tab removed: 552
  removeinfo: {isWindowClosing: false, windowId: 432}
  __proto__: Object
tree.js:2485 {Bailing, but it's probably OK - no tab_val for ctab: 552, tab_val: undefined, removeinfo: {…}}
  Bailing, but it's probably OK - no tab_val for ctab: 552
  removeinfo: {isWindowClosing: false, windowId: 432}
  tab_val: undefined
  __proto__: Object
Procyon-b commented 6 years ago

Here is a new one. I wasn't browsing much. Watching a video on another site (not youtube), and closed this page (459). I have left the url unchanged, they are not private. That way you can see what changed. 454 is useless, but I left it in case. No event has been removed.

tree.js:562 Saved tree

tree.js:2576 Tab being replaced: added 459; removed 449
  tabOnReplaced @ tree.js:2576
  EventImpl.dispatchToListener @ extensions::event_bindings:403
  publicClassPrototype.(anonymous function) @ extensions::utils:138
  EventImpl.dispatch_ @ extensions::event_bindings:387
  dispatchArgs @ extensions::event_bindings:260
  dispatchEvent @ extensions::event_bindings:269

tree.js:2322 {Tab updated: 459, Index: 0, changeinfo: {…}, ctab: {…}}
  Index: 0
  Tab updated: 459
  changeinfo: {discarded: true}
  ctab:
    active: false
    audible: false
    autoDiscardable: true
    discarded: true
    favIconUrl: "https://s.ytimg.com/yts/img/favicon_32-vflOogEID.png"
    height: 0
    highlighted: false
    id: 459
    incognito: false
    index: 0
    mutedInfo: {muted: false}
    pinned: false
    selected: false
    status: "complete"
    title: ""livrés à domicile" 5 mars 2018 - YouTube"
    url: "https://www.youtube.com/results?search_query=%22livr%C3%A9s+%C3%A0+domicile%22+5+mars+2018"
    width: 0
    windowId: 443
    __proto__: Object
  __proto__: Object

tree.js:2455 {Tab removed: 454, removeinfo: {…}}
  Tab removed: 454
  removeinfo: {isWindowClosing: false, windowId: 12}
  __proto__: Object

tree.js:2501 {Removing value for ctab: 454, tab_val: {…}, removeinfo: {…}}
  Removing value for ctab: 454
  removeinfo: {isWindowClosing: false, windowId: 12}
  tab_val:
    being_opened: null
    index: 1
    isOpen: true
    isPinned: false
    node_id: "j2_196"
    raw_bullet: null
    raw_favicon_url: "https://www.lindependant.fr/favicon.ico"
    raw_title: "BD - Seuls dans vos cauchemars"
    raw_url: "https://www.lindependant.fr/2018/08/21/bd-seuls-dans-vos-cauchemars,4679687.php"
    tab:
      active: false
      audible: false
      autoDiscardable: true
      discarded: false
      height: 0
      highlighted: false
      id: 454
      incognito: false
      index: 1
      mutedInfo: {muted: false}
      openerTabId: 13
      pinned: false
      selected: false
      status: "loading"
      title: ""
      url: "https://www.lindependant.fr/2018/08/21/bd-seuls-dans-vos-cauchemars,4679687.php"
      width: 0
      windowId: 12
      __proto__: Object
    tab_id: 454
    ty: "tab"
    win_id: 12
    Symbol(value_name): "195"
    toString: ƒ value_toString()
  __proto__: Object

tree.js:2506 {Removing tree node j2_196 for ctab: 454, tab_node: {…}, tab_val: {…}, removeinfo: {…}}
  Removing tree node j2_196 for ctab: 454
  removeinfo: {isWindowClosing: false, windowId: 12}
  tab_node:
    a_attr: {href: "#", id: "j2_196_anchor"}
    children: []
    children_d: []
    data: null
    icon: "https://www.lindependant.fr/favicon.ico"
    id: "j2_196"
    li_attr: {id: "j2_196", class: "tfs-open tf-tab", title: ""}
    multitype: (2) ["tab", "open"]
    original: {text: "Tab"}
    parent: "j2_2"
    parents: (2) ["j2_2", "#"]
    state: {loaded: true, opened: false, selected: false, disabled: false}
    text: "BD - Seuls dans vos cauchemars"
    __proto__: Object
  tab_val:
    being_opened: null
    index: 1
    isOpen: true
    isPinned: false
    node_id: "j2_196"
    raw_bullet: null
    raw_favicon_url: "https://www.lindependant.fr/favicon.ico"
    raw_title: "BD - Seuls dans vos cauchemars"
    raw_url: "https://www.lindependant.fr/2018/08/21/bd-seuls-dans-vos-cauchemars,4679687.php"
    tab:
      active: false
      audible: false
      autoDiscardable: true
      discarded: false
      height: 0
      highlighted: false
      id: 454
      incognito: false
      index: 1
      mutedInfo: {muted: false}
      openerTabId: 13
      pinned: false
      selected: false
      status: "loading"
      title: ""
      url: "https://www.lindependant.fr/2018/08/21/bd-seuls-dans-vos-cauchemars,4679687.php"
      width: 0
      windowId: 12
      __proto__: Object
    tab_id: 454
    ty: "tab"
    win_id: 12
    Symbol(value_name): "195"
    toString: ƒ value_toString()
  __proto__: Object

tree.js:2510 {Updating tab index values after removing ctab: 454, window_node_id: "j2_2", removeinfo: {…}}
  Updating tab index values after removing ctab: 454
  removeinfo: {isWindowClosing: false, windowId: 12}
  window_node_id: "j2_2"
  __proto__: Object

tree.js:2515 {Tab index values updated after removing ctab: 454, window_node_id: "j2_2", removeinfo: {…}}
  Tab index values updated after removing ctab: 454
  removeinfo: {isWindowClosing: false, windowId: 12}
  window_node_id: "j2_2"
  __proto__: Object

tree.js:2444 {Tab activated: 455, activeinfo: {…}}
  Tab activated: 455
  activeinfo: {tabId: 455, windowId: 12}
  __proto__: Object

tree.js:562 Saved tree

tree.js:1979 {onfocus: j…y.Event, x_blurred: "undefined", y_blurred: "undefined"}
  onfocus: jQuery.Event {originalEvent: Event, type: "focus", isDefaultPrevented: ƒ, target: Window, currentTarget: Window, …}
  x_blurred: "undefined"
  y_blurred: "undefined
  "__proto__: Object

tree.js:1821 {About to activate: 443}
  About to activate: 443
  __proto__: Object

tree.js:2444 {Tab activated: 459, activeinfo: {…}}
  Tab activated: 459
  activeinfo: {tabId: 459, windowId: 443}
  __proto__: Object

tree.js:2322 {Tab updated: 459, Index: 0, changeinfo: {…}, ctab: {…}}
  Index: 0
  Tab updated: 459
  changeinfo: {discarded: false}
  ctab:
    active: true
    audible: false
    autoDiscardable: true
    discarded: false
    favIconUrl: "https://s.ytimg.com/yts/img/favicon_32-vflOogEID.png"
    height: 663
    highlighted: true
    id: 459
    incognito: false
    index: 0
    mutedInfo: {muted: false}
    pinned: false
    selected: true
    status: "loading"
    title: ""livrés à domicile" 5 mars 2018 - YouTube"
    url: "https://www.youtube.com/results?search_query=%22livr%C3%A9s+%C3%A0+domicile%22+5+mars+2018"
    width: 1280
    windowId: 443
    __proto__: Object
  __proto__: Object

tree.js:2322 {Tab updated: 459, Index: 0, changeinfo: {…}, ctab: {…}}
  Index: 0
  Tab updated: 459
  changeinfo: {status: "loading", url: "https://www.youtube.com/results?search_query=%22livr%C3%A9s+%C3%A0+domicile%22+5+mars+2018"}
  ctab:
    active: true
    audible: false
    autoDiscardable: true
    discarded: false
    favIconUrl: "https://s.ytimg.com/yts/img/favicon_32-vflOogEID.png"
    height: 663
    highlighted: true
    id: 459
    incognito: false
    index: 0
    mutedInfo: {muted: false}
    pinned: false
    selected: true
    status: "loading"
    title: ""livrés à domicile" 5 mars 2018 - YouTube"
    url: "https://www.youtube.com/results?search_query=%22livr%C3%A9s+%C3%A0+domicile%22+5+mars+2018"
    width: 1280
    windowId: 443
    __proto__: Object
  __proto__: Object

tree.js:2322 {Tab updated: 459, Index: 0, changeinfo: {…}, ctab: {…}}
  Index: 0
  Tab updated: 459
  changeinfo: {favIconUrl: "https://s.ytimg.com/yts/img/favicon_32-vflOogEID.png"}
  ctab:
    active: true
    audible: false
    autoDiscardable: true
    discarded: false
    favIconUrl: "https://s.ytimg.com/yts/img/favicon_32-vflOogEID.png"
    height: 663
    highlighted: true
    id: 459
    incognito: false
    index: 0
    mutedInfo: {muted: false}
    pinned: false
    selected: true
    status: "loading"
    title: ""livrés à domicile" 5 mars 2018 - YouTube"
    url: "https://www.youtube.com/results?search_query=%22livr%C3%A9s+%C3%A0+domicile%22+5+mars+2018"
    width: 1280
    windowId: 443
    __proto__: Object
  __proto__: Object

tree.js:2322 {Tab updated: 459, Index: 0, changeinfo: {…}, ctab: {…}}
  Index: 0
  Tab updated: 459
  changeinfo: {title: "YouTube"}
  ctab:
    active: true
    audible: false
    autoDiscardable: true
    discarded: false
    favIconUrl: "https://s.ytimg.com/yts/img/favicon_32-vflOogEID.png"
    height: 663
    highlighted: true
    id: 459
    incognito: false
    index: 0
    mutedInfo: {muted: false}
    pinned: false
    selected: true
    status: "loading"
    title: "YouTube"
    url: "https://www.youtube.com/results?search_query=%22livr%C3%A9s+%C3%A0+domicile%22+5+mars+2018"
    width: 1280
    windowId: 443
    __proto__: Object
  __proto__: Object

tree.js:2455 {Tab removed: 459, removeinfo: {…}}
  Tab removed: 459
  removeinfo: {isWindowClosing: false, windowId: 443}
  __proto__: Object

tree.js:2485 {Bailing, but it's probably OK - no tab_val for ctab: 459, tab_val: undefined, removeinfo: {…}}
  Bailing, but it's probably OK - no tab_val for ctab: 459
  removeinfo: {isWindowClosing: false, windowId: 443}
  tab_val: undefined
  __proto__: Object
cxw42 commented 6 years ago

Thanks! I think I may have it. Right at the top of the log there is a "replaced". Those are not yet handled! Let me see what I can figure out. Do you happen to remember how you opened 459? I've never seen a Replaced event in my own use.

Procyon-b commented 6 years ago

I have to say I don't know what it is. This is not the first instance of "replace" I see. I think I have seen it each time I had a ghost tab. I browser normally. IIRC that tab was opened from a bookmark: ctrl+click on bookmark. It is located in a bookmark folder on the bookmark bar.

Edit: can't reproduce it.

cxw42 commented 6 years ago

I also can't repro this morning, but I just pushed a first version of tabOnReplaced based on what I have read here and here. Would you please pull the latest and see if the problem persists?

(Separately, I am adding i18n in #135. Would you by any chance be willing to contribute a French translation of the TabFern UI sometime, or any other languages you happen to know? Not urgent by any means; I am still converting code to access the translation files.)

Procyon-b commented 6 years ago

about translation: No problem. I'll do it.

Do you plan on adding language support with the standard i18n (the user has no choice), or with an alternative like in tampermonkey. I have made my own in alias bookmarks. The advantage of my solution is that you can leave original language text in place, as long as you mark the tag containing it. My localize code is 30 lines long.

cxw42 commented 6 years ago

Translation: thank you! Would you please join me over at #135 for that discussion?

cxw42 commented 6 years ago

@Procyon-b Have you had a chance to try the updates in e236de5? If so, are you still seeing ghost tabs?

I'm now using the v0.1.17 release candidate (in /webstore) and am hoping to be able to add this to the changelog for v0.1.17! However, if you are still seeing ghost tabs, I will release 0.1.17 and then try to nail this one down. Thanks!

Procyon-b commented 6 years ago

No, sorry. I have not paid attention to this update. My mind had totally blanked that part when I read your message. I focused on the part about translations. Sorry.

The newer version is now in place.

Procyon-b commented 6 years ago

Looks good. I see 3 "replaced" events. Each paired with "tab replacement", and no "bailing". No ghost tabs in TF.

Edit: I forgot to mention that TF is still bolding tabs for multiple windows at a time.

Procyon-b commented 6 years ago

Last comment to confirm that I haven't seen any problem since I upgraded to 0.1.17-pre.3

cxw42 commented 6 years ago

@Procyon-b Thank you! I am planning to deploy 0.1.17 early next week.