gioxx / MarvellousSuspender

A chrome extension for suspending all tabs to free up memory, based on the original TGS 7.1.6, without tracking. Find more information about that on https://gioxx.org/tms
https://go.gioxx.org/download-tms
GNU General Public License v2.0
1.05k stars 84 forks source link

Suspended tabs name with 3 dots and white page. #161

Closed PatrickL546 closed 2 years ago

PatrickL546 commented 2 years ago

Please complete the following information when submitting a feature request or bug report.

Suspended tabs turns to default icon with 3 dots and white background until I click on it and it loads the proper suspended tab. Even after it loads if you click away and go back to the tab, it turns white again. Seems to be from the new chrome update.

What happens when it gets suspended image

What it should look like image

s-p-l-o-d-e commented 2 years ago

Yeah I've been having the same issue. Tabs only fully get suspended when you navigate to a different tab and then back to the suspended one. When clicked on, recently fully suspended tabs also go white with the three dots again for a few seconds before showing the suspended screen.

I've tried other variants of the Great/Marvellous Suspender (7.1.6, no-track, this one, not the "official" tracked one though) and they all have this issue now for some reason. Maybe it has to do with base chromium code?

Running Brave Browser [Version 1.36.109 Chromium: 99.0.4844.51] Issue happens on both MacOS 12.2.1 and Windows 10

Edit: Just testing it out, it seems like the extension (and variants) are taking longer to cache the data from the page or something similar and that clicking back and forth between tabs and waiting a few seconds eventually lets it do that.

s-p-l-o-d-e commented 2 years ago

Okay, I seem to have fixed it, for some reason

Poking around the Chrome (or in my case, Brave) flags, I found this new flag called "New Tab Page Demo Branded Wallpaper" Disabling this, causes Marvellous Suspender to function properly.

Screen Shot 2022-03-04 at 9 09 39 AM

This is probably for the best since who the hell wants to see more branding in their browsers?

Edit: This seems to be a Brave specific flag only, rather than a Chrome or Chromium one.

rex commented 2 years ago

@s-p-l-o-d-e I am on Chrome 99.0.4844.51 and I do not see that flag in the list. Perhaps that is a non-standard flag related to Brave? Or you might be on a beta channel?

This issue is really frustrating, and causes huge user experience issues.

I've gone through the debugger tree and identified the problem, hopefully y'all can resolve this and push an update soon?

The issue is in the gsUtils.js file in the isSpecialTab function. You are retrieving the URL of the tab with the following:

const url = tab.url || tab.pendingUrl;

The problem is, the tab object does not always have the url, pendingUrl, or even title properties (which is extremely stupid on Chrome's part, and seems like a full-on chrome bug), so url becomes undefined. This becomes a problem in the next lines:

if {
    url.indexOf('about') === 0 ||
    url.indexOf('chrome') === 0

Since url is undefined, there is no indexOf method to call, thus throwing an uncaught exception.

Simply adding a sanity check to the top of this function would bypass the issue and resolve the problem:

if (typeof url == 'undefined') {
    return false;
}
s-p-l-o-d-e commented 2 years ago

@s-p-l-o-d-e I am on Chrome 99.0.4844.51 and I do not see that flag in the list. Perhaps that is a non-standard flag related to Brave? Or you might be on a beta channel?

Interesting, yeah it seems that is a Brave specific flag, rather than a standard Chrome/Chromium one. Sorry about that.

Your sanity check is interesting, does it work if it's added to gsUtils.js file and loaded as an unpacked extension?

rex commented 2 years ago

All good @s-p-l-o-d-e! 🤠

I disabled the extension and re-installed as an unpacked extension, made the modification to gsUtils.js I recommended above, reloaded the extension, and all the errors immediately stopped - the extension now behaves normally again. Which is a tremendous relief since it was getting painful there for a bit.

Edit:

Specifically, I made the following exact change:

  isSpecialTab: function(tab) {
    const url = tab.url || tab.pendingUrl;
    if (!tab || typeof tab == "undefined") {
      return false;
    }
    if (gsUtils.isSuspendedTab(tab, true)) {
      return false;
    }
    // Careful, suspended urls start with "chrome-extension://"
s-p-l-o-d-e commented 2 years ago

Nice, that's awesome, good work! Hopefully they update the extension with that addition or something similar.

rex commented 2 years ago

Thanks! Agreed. This definitely appears to be a Chrome issue caused by a very recent change. I'm sure we're not the only ones seeing this. Hopefully @gioxx and crew can get the update made and pushed soon.

n3m0-22 commented 2 years ago

I can confirm the brave specific flag "New Tab Page Demo Branded Wallpaper" being disabled fixes it at least in brave browser. (Correction) It only works till the browser is restarted again.

DaveKap commented 2 years ago

The last time this extension was updated was almost a year ago, so we're going to need someone to fork a fixed version or a new workaround for Chrome users. I wouldn't hold by breath for gioxx pushing an update.

matznerd commented 2 years ago

Thanks @rex and @s-p-l-o-d-e, at the change to the gsUtils.js file did help when I uploaded it, but upon restart of the browser, the problem seems to have returned. Do we have a permanent solution to this or is this user error and should I try again?

Also, is @gioxx, who we are very thankful for doing this fork, still actively making code updates?

  isSpecialTab: function(tab) {
    const url = tab.url || tab.pendingUrl;
    if (!tab || typeof tab == "undefined") {
      return false;
    }
    if (gsUtils.isSuspendedTab(tab, true)) {
      return false;
    }
    // Careful, suspended urls start with "chrome-extension://"
rex commented 2 years ago

@matznerd Weird, I've had no more issues despite restarting my browser several times. You removed the chrome-webstore-installed extension and loaded the source as an unpacked extension right?

matznerd commented 2 years ago

Yeah, what is strange is that it stopped working that time, but then upon reset again today, it is back to working. Thank you for checking in! I'm not sure if it was because the browser auto updated or something. Right now I am on 'Version 99.0.4844.51 (Official Build) (64-bit)" with your fix and it is working

I also emailed @gioxx to see if he was planning to fix it, or if someone should fork it, or if he would accept a merge from a forked version, so that we don't have to come up with some other synonymous for a synonym for a fork name... Though, how about the stupendous suspender, which is almost a tongue twister lol? Or maybe we could go a more modest route and called it "The Pretty Good, But Not Often Updated Suspender"?

https://thesaurus.yourdictionary.com/marvelous

gioxx commented 2 years ago

Hi everyone and sorry for the delay. I have been silently following the discussion and want to thank @rex very much for providing the solution to the problem. Unfortunately - as I've said several times - I'm out of developers willing to contribute to TMS development but I've scheduled a new coding session for Sunday (with @napolux and @sherkot), during which we'll include @rex's fix and also try to integrate Chrome's tab group saving. If we succeed in these two important actions, then it will certainly be possible to release the new version of TMS on the Google store.

Once again I want to renew my invitation to come forward in case you want to contribute to the development of the extension. I'm a system administrator with poor development skills, I certainly need capable people to carry on this project that I absolutely don't want to drop.

Thanks.

CollinChaffin commented 2 years ago

I also want to thank @rex for posting the fix - he beat me to it. Honestly, I've just been using for the last couple years my own unpacked version of the original TGS, after I myself caught and neutered the tracking code and decided to use my own build. Rex is correct, and this I can confirm this IS due to a recent Chromium code change. If you guys can get this and the tab group saving rolled in, now that I know about this fork I'll also contribute here if I can.

For the record, I've been using TGS since day 1, and NEVER relied on it for it's session management, simply because I already was using an extension that did it better - and session management being the ONLY thing it does - I take K.I.S.S. - (keep it simple, stupid) approach when possible. Plus, this other extension is simple yet powerful, and despite not being open-source, admittedly I've (ahem) torn it apart so I'm convinced it's safe. Now, I will say it hasn't had a (meaningful) update in a LONG time, but the beauty is, it doesn't really need one IMO as far as it's core functionality.

It's Session Buddy: https://chrome.google.com/webstore/detail/session-buddy/edacconmaakjimmfgnblocblbcdcpbko

Now, they have a forum, and I'm not affiliated in any way, just a power-user but...once you understand where the sqlite db it uses is stored, I personally not only back it up, but love that I can open the db and run stats and work with/alter the data in sqlbrowser. Just speaking for myself, but I've got YEARS and TENS OF THOUSANDS of auto-saved tab states, and since in addition to manual saves, it auto-saves so there's never been a situation where I've had a browser crash etc. and lost my state. I can do an INSTANT search of those tens of thousands, click and restore a single window, or tab. If you're like me and with the help of TGS/TMS, have six windows and 284 tabs open (right now), with most suspended, and in seconds use SB to jump to the suspended tab I want - I just haven't found another solution that comes close. It is lacking some things that if it were open-source I would have added myself, like dark mode - but I've come up with some pretty cool hacks that if anyone is interested I'll be happy to share.

The reason I mention this, is that since there are FAR more powerful session management extensions, and obviously a shortage of developers maintaining TGS/TMS, I know I'd not only be ok, but would actually LIKE to see TGS/TMS just remove the session management all together (to save performance overhead), and focus ONLY on what it does best - tab suspension. If it ever went that route, the small # of devs could focus on keeping it the #1 tab suspension extension and not worry about session mgmt that frankly unless something radically changes, will never come close to even what Session Buddy does. Just a thought.

ogrotten commented 2 years ago

One of the most productive threads I've seen on github in a while. Thank you all for your work and diligence.

So for us regular users, what's the fix at this point?

napolux commented 2 years ago

One of the most productive threads I've seen on github in a while. Thank you all for your work and diligence.

So for us regular users, what's the fix at this point?

Wait for a release

rex commented 2 years ago

@CollinChaffin I gotta tell you - as a long-time user of TGS and now TMS, I would love to see the session management stuff ripped out. As you point out, there are far more powerful session management extensions out there, and it would significantly reduce the code overhead for @gioxx and crew to not have to maintain it.

With regard to the original issue, I did want to add one additional fix since I've been having the same issue on incognito tabs:

In addition to the above code changes in js/gsUtils.js I modified the isFileTab method in the same way, as follows:

isFileTab: function(tab) {
  if (!tab || typeof tab == "undefined") {
    return false;
  }
  const url = tab.url || tab.pendingUrl;

After making this additional change I have had no other issues.

Ninja edit: I forgot to thank everyone for the kind shout-outs. I'm glad I was able to help other people resolve their issue, and especially to help @gioxx and team.

Technetium1 commented 2 years ago

I personally like the session management aspect, though I will admit I also use Session Buddy as a backup. How significant of a change would you suppose removal would bring? Has that been tested in some capacity or is it an assumption? @CollinChaffin

ogrotten commented 2 years ago

@napolux That's what I was afraid of.

As far as session management, I use Session Buddy and wasn't aware that this even had some kind of session management.

ossilator commented 2 years ago

regarding session management, see also https://github.com/greatsuspender/thegreatsuspender/issues/1251

marceloavf commented 2 years ago

I'm having this problem on Edge, seems like the Performance mode cleans the cache of it.

CollinChaffin commented 2 years ago

@Technetium1 sorry for the delay in replying! Looking at the code, I think in the big picture, it's frankly a pretty high percentage of code being maintained for what (and please I mean no offense to anyone) fairly subpar session management features. If it was the only/best option out there, then I wouldn't suggest it - but I don't think anyone (who's actually tested the other available session mgmt extensions) would argue it's anywhere near the best available.

Which leaves two possible goals - either put forth SIGNIFICANTLY more effort than has previously been put forth to make it the best.....or abandon it entirely. Given I have actually tested (and use) one of the other options and can go down the list of just how much more feature-rich that other option is, I was simply putting out there my vote that at the very least, TGS/TMS users partake in a controlled simultaneous usage, and if more and more find themselves going the route I did YEARS ago, and completely abandoning TGS/TMS session mgmt (and voicing it here), then the DEV team would feel much more comfortable sun-setting the session mgmt and making TMS far more lean, and with those (significant) extra DEV cycles no longer being wasted on S-mgmt, perhaps bring forth new and exciting (and long-time requested) features such as LIVE sorting/reordering/window-moving/etc. of suspended tabs which does NOT require any session mgmt storage making it far easier - because in my case Session Buddy would simply store those tab manipulations automatically.

And @rex - NICE! I totally missed that, albeit I don't do much w/incognito TMS - but you are absolutely correct in that your fix needs to be incorporated along with your original post. I've already implemented in my local build and can confirm it works beautifully. Thanks!

EDIT: @rex technically, and you can test this as well....the best way to do it might be to take:

if (!tab || typeof tab == "undefined") {
    return false;
  }

and define it as a IsUndefined function, and make it the first line in EVERY function that accepts (tab) as input param. That way, the undefined test is performed at every single tab manipulation, no matter what the test. I'm running that way now, and have not experienced any negative effects.

Masamune3210 commented 2 years ago

The only parts of the extension I use is the automatic suspending of tabs, and the whitelist for individual domains to never get suspended

shanness commented 2 years ago

This also seems to be breaking reloading the page. It no longer unsuspends it.

Clicking does (after leaving and coming back to the page which updates it from ... and white to normal on latest chrome).

This is breaking my automations (pushing reload requests into suspended pages).

PatrickL546 commented 2 years ago

In regards to session management in TGS/TMS, I have never used built-in session management because of how clunky it feels. In terms of UX, Session Buddy has it beat with how few clicks it takes to use. Going into the TGS/TMS settings and session management is slow when 1 click is all I need in Session Buddy. I have not used other session management other than Session Buddy but it gets the job done.

On the other hand, I guess the built-in session management made it easier for people to recover suspended tabs when Chrome Web Store shuts down TGS.

ossilator commented 2 years ago

the session management is merely a workaround for TGS nuking all suspended tabs during upgrades. in think that has been fixed (the upgrade is now performed only during chrome startup, before the session gets restored), thus making it redundant. @deanoemcke still had some reservations against simply removing it, but the only thing i remember is that i found the reasoning somewhat inconclusive.

Technetium1 commented 2 years ago

Looking forward to seeing any input from Dean, as he would know the surrounding context for why the code was not removed.

@CollinChaffin The logic there is sound, you've got me on board with removal. I strongly agree that an IsUndefined function would be a good idea. Thanks for contributing!

HananArgov commented 2 years ago

Hi all, I've been reading this thread for a while, especially since i've experienced the same issues. i've noticed something in the last chrome update (which I did a few moments ago): the issue seems to be fixed by chrome. I do support though that the fix that you've made should be entered

and in general, thank you for this :)

pannal commented 2 years ago

Hi all, I've been reading this thread for a while, especially since i've experienced the same issues. i've noticed something in the last chrome update (which I did a few moments ago): the issue seems to be fixed by chrome. I do support though that the fix that you've made should be entered

and in general, thank you for this :)

Hmm not for me. I'm on Chrome 99.0.4844.84 and the issue is still there.

TonyYangTW commented 2 years ago

Hmm not for me. I'm on Chrome 99.0.4844.84 and the issue is still there.

Try updating to Chrome 100.0.4896.60. That might work!

Technetium1 commented 2 years ago

If they caused a regression and then fixed it after a release was finalized, it will probably be a while before it gets to every release channel.

nihaals commented 2 years ago

Chrome M100 was released as stable on 2022-03-29, nice timing Although I can still reproduce the issue on 100.0.4896.60

PatrickL546 commented 2 years ago

Can confirm on my end. Version 100.0.4896.60 (Official Build) (64-bit) problem still persists.

marceloformentao-hotmart commented 2 years ago

The fix will not be released?

PatrickL546 commented 2 years ago

The fix will not be released?

You can download rex's fork with the fix (https://github.com/rex/MarvellousSuspender) and load as unpacked the src to chrome.

briantully commented 2 years ago

The fix will not be released?

You can download rex's fork with the fix (rex/MarvellousSuspender) and load as unpacked the src to chrome.

Can confirm that the fork and fix by @rex works like a charm. Thanks @rex! 🍻

Any idea where the future source of truth will be for this essential extension? Are there plans to merge rex's work into this repo or is rex'a fork now the de facto source?

gioxx commented 2 years ago

@briantully soon we merge @rex code into this repo and release a new version of TMS on Chrome Store. I'm just waiting a revision from @napolux to proceed.

briantully commented 2 years ago

@briantully soon we merge @rex code into this repo and release a new version of TMS on Chrome Store. I'm just waiting a revision from @napolux to proceed.

Awesome. Thanks for all you do, and for everyone's contributions in keeping this extension alive. I don't know what I'd do without it! 😄

Laz2516 commented 2 years ago

Tell me which file to download? I probably downloaded the wrong file. After decompressing and installing in debugger mode, there was no change in the page icons. Icons still change to the application icon after you unload the page from memory.

PatrickL546 commented 2 years ago

Tell me which file to download? I probably downloaded the wrong file. After decompressing and installing in debugger mode, there was no change in the page icons. Icons still change to the application icon after you unload the page from memory.

First uninstall the extention Then download ZIP (https://github.com/rex/MarvellousSuspender) then extract to somewhere image

Load as unpacked once you enabled dev mode image

Select this folder to install it image

Laz2516 commented 2 years ago

Restored all bookmarks. Set the tab pause mode to Never. Deleted the extension. Downloaded the file. https://github.com/rex/MarvellousSuspender/archive/refs/heads/master.zip Unarchived. Set the src folder in debug mode. The application showed the start page. It was established correctly. Set the pause mode to "15 minutes." After the tabs are suspended, all icons became the same - they are all the same and have a program icon, not a page....... ((((

Laz2516 commented 2 years ago

I don't understand anything. Why not? ( The latest version of Chrome is updated by the machine.

Laz2516 commented 2 years ago

Found a reason. You need to turn the extension off and on.

Laz2516 commented 2 years ago

P.S. unfortunately this method does not work to the end. After rebooting the extension, the icons are restored with thumbnails of their pages. But after entering the page and then unloading the page from memory with this extension, the page icon becomes the extension icon again..... ((((

ptxmac commented 2 years ago

I still see this issue with v7.1.6.2 on chrome 101.0.4951.15

nihaals commented 2 years ago

I can still reproduce the issue on 8bda8531a386ad6514c2df9d0890be03ede89d54 and 100.0.4896.75

berkshireasia commented 2 years ago

I still see this issue with v7.1.6.3 on chrome 100.0.4896.60

berkshireasia commented 2 years ago

I still see this issue with v7.1.6.3 on chrome 100.0.4896.75

gioxx commented 2 years ago

@nihaals @berkshireasia are you continuing to use the version installed from the Chrome Store or the one on GitHub manually loaded in Chrome?

nihaals commented 2 years ago

are you continuing to use the version installed from the Chrome Store or the one on GitHub manually loaded in Chrome?

I am using a local clone and have loaded it as unpacked.