Error in raven.js, plugin.setSuspendState

I googled for setSuspendState but couldn’t find it anywhere, it’s most likely coming from a library. Unfortunately, the stack trace starts and ends in raven.js so I have no idea where it’s coming from. I’m guessing this shouldn’t be possible or maybe the method is disappearing somehow. Does anyone have any ideas?

Did you toggle the “Full” button on the right to make sure all potential frames are expanded? You could also look at the raw JSON view of the event to verify that there are no additional frames that aren’t being rendered.

Also – I found this: https://greasyfork.org/en/forum/discussion/9577/not-work. Seems to be related to a browser extension. Plugins are weird, and Raven.js may not always have insight into what’s happening there.

Yup, there are no more frames. Nice find on the plugin, not sure why it didn’t show up for me.

Also had the same error: https://gist.github.com/slorber/a8ad18a347e5a590388fd2bd31f506be

Only on Firefox 50 / 1 user for now

We’ve now heard from enough users now that I feel this is a plugin/extension problem, and nobody has managed to “fix it” so it may be beyond anyone’s control.

Can anyone identify the extension in question?

I’m currently watching at this error in my Sentry dashboard. It’s being submitted by all browsers, from all OS’s and all kind of devices (mobile and desktop). So that is kind of a dead end…

I got over 142k entries in 5 months, so worth the fixing…

The only thing I can kind of distract from the overload of information is this particular URL:
https://translate.googleusercontent.com/translate_c

It’s the one that occurs the most in the url tag. Still, I cannot pinpoint the extension (if any) for this problem, but maybe someone could use this information.

I searched for the code on GitHub, and found this.

It’s not the original source of the extension - it is just someone who saved their default chrome extensions as part of their dotfiles repo. But according to the extension’s manifest.json, it is configured to load on every page, which certainly fits with triggering a lot of errors.

Looking at the copyright section in that code, I found:

(C) Copyright Nuance Communications, Inc. 

Nuance Communications offers the Dragon Web Extension, which apparently has over 200k installs. I think this may be what we’re looking for.

A little more from reading deeper into the dotfile copy of this extension:

  • plugin.setSuspendState is invoked via setTimeout, which explains how it would be wrapped in Raven’s try/catch
  • According to the comments, the code is shared between Firefox and Chrome
  • I can’t reproduce with Chrome – this code is served via content_scripts, which are sandboxed (this environment has an unmodified setTimeout, and errors do not propagate to the main page’s onerror listener)
  • Wild stab in the dark: is Firefox’s Add-on model less locked down, such that the error could trigger there?

@daanvanham – are you a sentry.io customer by chance? I’d love to see these “all browser” events. Or if you could screenshot one. Because up until this point, all the reporters have indicated it is Firefox, and that fits the narrative I’m building so far.

Okay, this is definitely it.

You can download the Firefox version of the extension here, rename it to .zip, unzip it, and browse the source code.

Inside, you can see that this code is injected into the main page using script insertion (e.g. document.createElement('script') … the code containing setTimeout, plugin.setSuspendState appears to operate inside the host/parent window context, which is why it is caught.

Since the script file is loaded from Firefox’s extension system / the user’s hard disk … might not be a surprise that there are no frames or additional context for security reasons. Just taking a guess that that’s what’s happening.

There is also a Safari extension on that website that probably operates similarly.

Sorry for my late response, missed the notification.

Here is a screenshot of the tags:

Mostly Chrome, as you can see. For the browser tag I get these percentages:

15%	Chrome 52.0.2743
15%	Firefox 48.0
14%	Chrome 53.0.2785
14%	Mobile Safari 9.0
11%	IE 11.0
2%	Edge 13.10586
2%	Chrome 49.0.2623
2%	Mobile Safari 10.0
2%	Safari 9.1.3
18%	Other 

So, your tag distribution graph isn’t 100% indicative because the generic low fidelity stack trace means that this could be grouped with other, unrelated errors.

I recently got some errors as mentioned above (plugin.setSuspendState is not a function). I now enabled the Inbound Filters for my project.

However, I also get similar errors; these one’s are coming from IE (IE 11.0 in this case). I have like two dozen of them:

TypeError: Das Objekt unterstützt die Eigenschaft oder Methode "setSuspendState" nicht
  at setSuspended(eval code:153:5)
  at frameConnector_isForegroundChanged(eval code:141:13)
  at notify(eval code:72:13)
  at updateForegroundState(eval code:512:4)
  at bubbleBlur(eval code:317:4)
  at Anonymous function(eval code:307:4)

It seems to be very similar (if not the same) but in german (translation: ‘The object does not support the attribute or method with the name “setSuspendState”’).

As done for the english version here, maybe you want to add this phrase to the exclusions list also?