Is there a reason you need the fake for loop and the vertex shader? Can a single infinitely looping shader not do the same thing?
And what happens in WebGL?
And what happens in WebGL?
Interestingly though there was another way to make only the tab crash, even if I had all three shaders in the pipeline: If I placed the canvas far offscreen using position: absolute, only the tab would crash even if the render shaders were waiting! There's some weird interactions going on I don't yet fully understand.