I ran into issues logging into one of my accounts while paying the bills earlier this week. Rather than allowing me to type in a username and password, I was instead greeted by a page informing me that Firefox's private mode was no longer supported. Excuse me?

Firefox's private mode is no longer supported by my cell phone service.

I've been using Firefox to pay my bills for this service for over a decade, and it's never been a problem before. That said, Firefox has taken the lead in user privacy over the last few years. Maybe that has something to do with it.

Firefox's private browsing prevents companies from tracking users by automatically blocking many types of cookies and clearing browser history after a session is closed. It's often considered to be better at protecting user privacy compared to Chrome or Edge, because it rejects tracking by default and even blocks some kinds of fingerprinting – a more invasive kind of tracking that relies on creating uniquely-identifying digital fingerprints based on users' specific hardware, software, and personal settings instead of by installing cookies.

So why does my cell phone service need to track me? Honestly, I don't care. They have no right to control what browser I use (within reason, of course).

To be fair, they may not actually be trying to track me. Firefox's private browsing has had issues with certain authentication mechanisms in the past. However, Chrome's incognito mode has run into the same issues. So it's hard to understand why Chrome's private browsing would be supported if Firefox's wouldn't.

Regardless, I had no intention of changing browsers just to pay one bill. Unfortunately, the easy solution of spoofing my user-agent string to make it seem like I was using Safari or Chrome didn't work. So I instead installed Firefox's Hide Private Mode extension. It works by providing a dummy implementation of IndexedDB.

Typically, when a company track users, it uses some kind of persistent storage on users' browsers. Browsers provide many ways to store data, including LocalStorage (small data), IndexedDB (large data), and WebSQL (deprecated). However, in Firefox's private browsing, access to the IndexedDB API is limited. Thus, companies can make IndexedDB API calls to determine if a user is incognito.

A dummy IndexedDB implementation prevents this check, and the implementation's pretty simple too. Check it out on GitHub.