Glossary
Battery Status API
The Battery Status API is a browser call that tells a page the charge level, the charging state and the time left.
What the call answers
One call returns four values, and it returns them to any page on the open web. They were meant to let a site do less work on a phone that is running low.
Charge level
A fraction between empty and full, reported with more digits than a person would ever read.
Charging or not
Whether the machine is on power at this moment.
Time to full
Seconds until the charge is complete, or zero on a machine that is already there.
Time to empty
Seconds of use remaining, and an endless value where there is no battery at all.
Why a slow value identifies
Charge is not a name, and on its own it belongs to everyone else at the same level. What makes it useful is that it barely moves.
Two sessions opened minutes apart carry the same level to the digit, and that is enough to join them when nothing else about them matches.
The pairing works in one direction only. It joins visits that are close in time and says nothing about visits a day apart.
Who still answers the call
The call was written for phones on weak batteries, and the identification problem was noticed soon after. Several browser families dropped it and never brought it back.
Chromium kept it, so a browser built on Chromium answers. That includes ours, and it includes the browser you are reading this in if it is one of them.
A desktop answers too
A machine with no battery reports full and on power, which is a perfectly ordinary reply and tells a site what kind of machine it found.
A laptop is the interesting one
There the level drifts through the day, and every profile opened on that laptop drifts with it together.
The reply is a promise
It arrives a moment after the page asks, so a site can take it while the page is still loading.
Where the value comes from here
Our engine publishes a list of the readings it answers from the profile seed, and this one is not on that list. The charge belongs to the computer the browser runs on.
The built-in engine takes the other road and removes the call rather than answering it, so the two engines do not agree on this one name.
What the profile does own
Processor count, memory, devices, speech voices, fonts, time zone and the network figures are drawn from the profile seed.
What the machine keeps
Charge is one of the readings that stay with the computer, and every profile opened on it reads the same one.
Why it is written here
A reading we do not touch belongs on the page as plainly as one we do, because a reader planning around it deserves to know.
Often confused with
Device memory
Also a machine level number read without asking, and that one is drawn from the profile seed rather than from the computer.
Network information
Speed and latency are the signature of a connection in the same way, and those are answered from the seed as well.
A permission prompt
Camera and location ask you first. This one never does, which is what made it worth writing about.
What this does not do
- The profile does not get a battery of its own. Every profile on one computer reads the same charge, because the reading is the computer's.
- The two engines do not answer this name the same way. Our own engine leaves the call where Chromium put it, and the built-in one takes it away.
- It does not identify a person by itself. A charge level is shared with everyone at the same level, and it only works next to the rest of the readings.
- It does not stay useful for long. Charge moves, so it joins sessions that are close together in time and nothing further apart than that.
Check it
Every claim above comes from a file you can open.
- The readings the engine answers from the seed, named one by one
- packages/shared/src/index.js
- The shape of our engine beside the shape of Chrome
- engine/приёмка-отчёт-форма-наша.json · engine/приёмка-отчёт-форма-chrome.json
- How that shape is taken
- engine/scripts/compare-shape.js
- Where the built-in engine drops the call
- apps/desktop/src/injected/fingerprint.js
Questions
- Does a site need permission to read my battery?
- No. There is no prompt, no indicator and no entry in the site settings, and the reading finishes before the page has drawn itself.
- Does a proxy or a tunnel hide it?
- No. Those change the address your traffic leaves from. The charge is read on your machine and never travels through the network at all.
- Can I turn the call off in the browser?
- Chromium has no setting for it. An extension can take the call away, and a browser that answers nothing where Chromium answers something is a difference of its own.
- Is this why my accounts got linked?
- On its own, almost certainly not. It is a short lived hint that works next to an address, a fingerprint and the way the accounts behave.
- What does my profile answer instead?
- The fingerprint self-test inside a profile lists all 29 measurements it runs, and a battery row is not among them.
Next to this
See what your own profile answers
The fingerprint self-test runs inside a profile and shows all 29 measurements, green and red alike.