I'm not sure what you mean by "displays in". Presumably there are a bunch of inputs to canvas, from
drawImage, that take inputs that have a known color space (often sRGB, but sometimes something else that could be converted to sRGB). They all need to get converted to device color space eventually (by the time they're drawn) in order to match colors in the rest of the page. The question is when to do that conversion -- it seems like you have either the option of storing the canvas bitmap in sRGB (or some other known color space), or storing it in device color space. Storing it in sRGB seems to have at least three advantages:
putImageData APIs produce interoperable results across devices (or don't need to do conversion)
- blending operations in canvas produce interoperable results rather than differing slightly as a function of the device color space
- you don't expose color management information as a fingerprinting vector.
Given what you've said about
putImageData in other browsers, it seems most likely that other browsers store the canvas backing store in sRGB and convert it to device space when drawing, whereas it seems like the initial Gecko implementation was instead storing the canvas backing store in device color space.