toDataURL sounds excessively slow. The native btoa can go at 1MB per millisecond on a good CPU.
My monitor size is 1920 x 1200 and it took 133ms
I just uploaded it using the nsIFile method check it out
A blob is essentially a file behind the scenes, although sometimes it is a
memory file (nsDOMMemoryFile). I thought it used a memory file for canvas work, but that would still be slower than working directly on a binary string.