1j01 / jspaint

🎨 Classic MS Paint, REVIVED + ✨Extras
https://jspaint.app/about
MIT License
7.23k stars 562 forks source link

some pixels slightly different color in firefox private browsing #346

Open henryszp opened 1 month ago

henryszp commented 1 month ago

In firefox private browsing, some pixels placed by various features are slightly different in color. This can be clearly seen using the paint bucket tool. For instance, when using the handles to change the size of the image, some of the newly created white pixels are slightly off (by around 1 to 3 on one of their RGB values), and using the paint bucket tool will uncover a random sparse arrangement of miscolored pixels. From what I've seen so far this bug affects pixels placed by the resize handles, the paint bucket itself, the shape tool, the brush, and the pencil. This behavior does not happen in regular firefox.

Attached is a picture made with jspaint in firefox private browsing; whitish pixels were placed by two resizes and reddish pixels were placed by the rectangle tool. the density of miscolored pixels seems to depend on some mysterious combination of factors: test2

henryszp commented 1 month ago

P.S. the firefox version is 128.0 (64-bit), and I don't know how to send my config settings, but I never did anything weird with them

14725 commented 1 month ago

Maybe it's the effect of the "private browsing" trying to resist fingerprintng based on <canvas /> ...

1j01 commented 3 weeks ago

Yes, this looks like fingerprinting resistance, specifically a feature called "canvas farbling" Intended to avoid trackers using subtle differences between GPU's rendering as information to distinguish people, it also screws up legitimate use cases like JS Paint. (JS Paint doesn't include any advertisements / trackers.) I have already extensive code in JS Paint dedicated to dealing with this annoyance. Probably I need to increase the threshold values to account for Firefox's (presumable) new implementation.

I am able to reproduce this, and I tried disabling DuckDuckGo Privacy Essentials, and other extensions, and adding https://jspaint.app as an exception in Firefox's fingerprinting settings, but it didn't help.