v157 · web bluetooth · live probe · no hardware needed
Prototype chain probe
The whole feature is a change to an interface's ancestry, and ancestry is inspectable from any page: no device, no pairing, no permission prompt. Walk the real chain, run the exact checks, and see every Web Bluetooth interface's parentage side by side.
The headline check
probing…
Walk the chain
Each press runs one real Object.getPrototypeOf() step from BluetoothRemoteGATTServer.prototype, listing that link's own properties as it goes.
- Not started. In a browser without Web Bluetooth this walk reports the missing interface instead.
The exact contracts
- Press the button — every line evaluates the shown expression for real.
The whole family
| Interface | defined? | : EventTarget? |
|---|
The spec says Bluetooth, BluetoothDevice, BluetoothRemoteGATTService and BluetoothRemoteGATTCharacteristic all extend EventTarget — only the passive BluetoothRemoteGATTDescriptor (no events) legitimately answers "no". Chrome 157 moves the server from the wrong column to the right one; if your build also shows "NO" for BluetoothRemoteGATTService, you are looking at a real spec-vs-implementation gap this table just measured.
code path
// Contract 1: ancestry
BluetoothRemoteGATTServer.prototype instanceof EventTarget; // true
Object.getPrototypeOf(BluetoothRemoteGATTServer.prototype)
=== EventTarget.prototype; // true
// Contract 2: the methods are INHERITED, not redefined copies
BluetoothRemoteGATTServer.prototype.addEventListener
=== EventTarget.prototype.addEventListener; // true
Object.getOwnPropertyNames(BluetoothRemoteGATTServer.prototype)
.includes("addEventListener"); // false
// Contract 3: the first server-level event has its IDL handler
"onmaxwritewithoutresponsesizechanged" in
BluetoothRemoteGATTServer.prototype; // true