This is an unfortunate consequence of nsPluginHostImpl registering itself with two different CIDs. As a result, you get two instances of it floating around. nsObjectFrame stops the plugin on the instance that's gotten via the plugin manager CID and contract, while presshell (for bfcache) uses the plugin host contract, which means the plugins are not fully stopped...
The upshot is that we stop the plugin itself, but the plugin manager still thinks the plugin is running, which breaks things like trying to unload the plugin if plugin reload happens.
Created attachment 200416 [details] [diff] [review] Fix Brian, if you can't get to this in time for it to make 1.8, please let me know ASAP so I can ask someone else for review Sunday morning. If you do get to this tomorrow, could you go ahead and check it in?
I think this is something we should really fix on branch -- we don't want to be creating a second instance of the plugin host (which is effectively what this codepath does), since that makes it very unclear which one of them is actually responsible for the running plugins. This fix is very very safe, and I'm hoping I'll get review by Sunday... :(
checked in on trunk.
checked in on branch.