1. Introduction
The Proximity Sensor extends the Generic Sensor API [GENERIC-SENSOR] to provide information about proximity level, as detected by the device’s primary proximity sensor. The proximity level is reported as the distance (in centimeter) from the sensor to the closest visible surface. § 8 Limitations of Proximity Sensors describes more about the potential limitations, why the precise distance value reported by different devices can be different, due to differences in detection method, sensor construction, etc. Moreover some proximity sensors might be only able to provide just a boolean to indicate if there is a physical object which is near, more like presence detection, than an absolute value for the distance.
2. Examples
let sensor= new ProximitySensor(); sensor. start(); sensor. onreading= () => console. log( sensor. distance); sensor. onerror= event=> console. log( event. error. name, event. error. message);
3. Security and Privacy Considerations
Proximity sensor provides information about closeness of the sensor to nearby objects, thus, may expose privacy sensitive information for user identifying and/or fingerprinting attacks.
To mitigate these, user agents should use one or both of the following mitigation strategies:
These mitigation strategies complement the generic mitigations defined in the Generic Sensor API [GENERIC-SENSOR].
4. Model
The Proximity Sensor sensor type’s associated Sensor
subclass is the ProximitySensor
class.
The Proximity Sensor has a default sensor, which is the device’s main proximity detector.
A latest reading for a Sensor
of Proximity Sensor sensor type includes three entries whose keys are "distance", "max", "near" and whose values contain distance, max and near values.
The distance is a value that represents the distance between a device and the closest visible surface of the physical object within the sensing range. Its unit is the centimeter (cm).
The max is a value that represents the maximum sensing range of the main proximity detector, in centimeters.
The near is a value that represent the presence of a visible surface in the vicinity of the main proximity detector.
5. API
5.1. The ProximitySensor Interface
[SecureContext ,Exposed =Window ]interface :
ProximitySensor Sensor {(
constructor optional SensorOptions = {});
sensorOptions readonly attribute double ?;
distance readonly attribute double ?;
max readonly attribute boolean ?; };
near
To construct a ProximitySensor
object the user agent must invoke the construct a proximity sensor object abstract operation.
5.1.1. The distance attribute
The distance
attribute of the ProximitySensor
interface returns the result of invoking get value from latest reading with
If the physical object is outside the sensing range, the attribute must return null.
5.1.2. The max attribute
The max
attribute of the ProximitySensor
interface returns the result of invoking get value from latest reading with
5.1.3. The near attribute
The near
attribute of the ProximitySensor
interface returns the result of invoking get value from latest reading with
If the physical object is outside the sensing range, the attribute must return null.
Note: If the implementation is unable to provide the near value, it could infer the near value from the value of distance. For example, if distance is not equal to max, it could imply there is a physical object in the sensing range.
6. Abstract Operations
6.1. Construct a proximity sensor object
- input
-
options, a
SensorOptions
object. - output
-
A
ProximitySensor
object.
-
Let allowed be the result of invoking check sensor policy-controlled features with
ProximitySensor
. -
If allowed is false, then:
-
Let proximity_sensor be the new
ProximitySensor
object. -
Invoke initialize a sensor object with proximity_sensor and options.
-
Return proximity_sensor.
7. Automation
This section extends the automation section defined in the Generic Sensor API [GENERIC-SENSOR] to provide mocking information about the proximity level for the purposes of testing a user agent’s implementation ofProximitySensor
API.
7.1. Mock Sensor Type
The ProximitySensor
class has an associated mock sensor type which is "proximity", its mock sensor reading values dictionary is defined as follows:
dictionary {
ProximityReadingValues required double ?;
distance required double ?;
max required boolean ?; };
near
8. Limitations of Proximity Sensors
Since most proximity sensors detect electromagnetic radiation (e.g., an infrared light or a magnetic field), certain material properties can interfere with the sensor’s ability to sense the presence of a physical object. Things that can interfere with a sensor include, but are not limited to, the material’s translucency, reflectiveness, color, temperature, chemical composition, and even the angle at which the physical object is reflecting the radiation back at the sensor. As such, proximity sensors should not be relied on as a means to measure distance. The only thing that can be deduced from a proximity sensor is that a physical object is somewhere in the distance between the minimum sensing distance and the maximum sensing distance with some degree of certainty.
9. Acknowledgements
Tobie Langel for the work on Generic Sensor API and inputs on this specification. Doug Turner for the initial prototype and Marcos Caceres for the test suite.
10. Conformance
Conformance requirements are expressed with a combination of descriptive assertions and RFC 2119 terminology. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in the normative parts of this document are to be interpreted as described in RFC 2119. However, for readability, these words do not appear in all uppercase letters in this specification.
All of the text of this specification is normative except sections explicitly marked as non-normative, examples, and notes. [RFC2119]
A conformant user agent must implement all the requirements listed in this specification that are applicable to user agents.
The IDL fragments in this specification must be interpreted as required for conforming IDL fragments, as described in the Web IDL specification. [WEBIDL]