blob: 192506e812bc9374e56319b88ea39fb7bfe2991e [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module device.mojom;
import "mojo/public/mojom/base/time.mojom";
import "services/device/public/mojom/geoposition.mojom";
// Types and interfaces defined in this file are intended for use by the
// geolocation internals WebUI. (chrome://location-internals)
const int32 kInvalidRadioSignalStrength = -2147483648; // INT32_MIN
const int32 kInvalidChannel = -2147483648; // INT32_MIN
const int32 kInvalidSignalToNoise = -2147483648; // INT32_MIN
// Information about a nearby Wi-Fi access point seen while scanning.
struct AccessPointData {
// MAC address, formatted as per MacAddressAsString.
string mac_address;
// Signal strength measured in dBm, or kInvalidRadioSignalStrength if the
// signal strength is not provided.
int32 radio_signal_strength = kInvalidRadioSignalStrength;
// An integer representing the frequency range used by this access point, or
// kInvalidChannel if the channel is not provided.
int32 channel = kInvalidChannel;
// The ratio in dB of the signal strength to the background noise level, or
// kInvalidSignalToNoise if the signal to noise ratio is not provided.
int32 signal_to_noise = kInvalidSignalToNoise;
// Timestamp when this access point was last seen, or null if the platform
// does not provide a last seen timestamp.
mojo_base.mojom.Time? timestamp;
};
// A snapshot of the internal state of the NetworkLocationProvider.
struct NetworkLocationDiagnostics {
// The most recently received set of nearby Wi-Fi access points, or an empty
// array if no access point data has been received.
array<AccessPointData> access_point_data;
// The time when `access_point_data` was received from the platform API, or
// null if no access point data has been received.
mojo_base.mojom.Time? wifi_timestamp;
};
// Diagnostic information about the cache of responses from the location
// service.
struct PositionCacheDiagnostics {
// The number of entries in the cache.
uint32 cache_size = 0;
// Timestamps recorded for the most recent cache hit and miss. May be null if
// the cache has not been accessed.
mojo_base.mojom.Time? last_hit;
mojo_base.mojom.Time? last_miss;
// The cache hit rate. May be null if the cache has not been accessed.
double? hit_rate;
// The most recently used network position estimate or error, or null if no
// network position estimate has been created.
GeopositionResult? last_network_result;
};
// Diagnostic information about the WifiPollingPolicy.
struct WifiPollingPolicyDiagnostics {
// The time when the last Wi-Fi scan was started, or null if
// no Wi-Fi scanning has occurred.
mojo_base.mojom.Time? interval_start;
// The duration of the current interval.
mojo_base.mojom.TimeDelta interval_duration;
// The duration of the next Wi-Fi polling interval.
mojo_base.mojom.TimeDelta polling_interval;
// The duration of the default polling interval.
mojo_base.mojom.TimeDelta default_interval;
// The duration of the polling interval when the scan data has not changed
// significantly between the last two consecutive scans.
mojo_base.mojom.TimeDelta no_change_interval;
// The duration of the polling interval when the scan data has not changed
// significantly between the last three consecutive scans.
mojo_base.mojom.TimeDelta two_no_change_interval;
// The duration of the polling interval when Wi-Fi scanning is not available.
mojo_base.mojom.TimeDelta no_wifi_interval;
};
// A snapshot of the internal state of the Geolocation API implementation.
struct GeolocationDiagnostics {
// The current state of a LocationProvider.
[Extensible]
enum ProviderState {
// The provider is not started.
[Default] kStopped,
// The provider is started and configured for high accuracy.
kHighAccuracy,
// The provider is started and configured for low accuracy.
kLowAccuracy,
// The provider is started but blocked by a system-level permission.
kBlockedBySystemPermission,
};
// The state of the active provider, or kStopped if there is no provider.
ProviderState provider_state;
// Internal state of the network location provider, or null if the network
// location provider is not active.
NetworkLocationDiagnostics? network_location_diagnostics;
// Diagnostic information about the position cache, or null if the position
// cache has not been created.
PositionCacheDiagnostics? position_cache_diagnostics;
// Internal state of Wi-Fi data polling policy.
WifiPollingPolicyDiagnostics? wifi_polling_policy_diagnostics;
};
// A position estimate parsed from a location service response.
struct NetworkLocationResponse {
// The estimated latitude in degrees.
double latitude;
// The estimated longitude in degrees.
double longitude;
// The estimated accuracy in meters, or null if accuracy was not included in
// the response.
double? accuracy;
};
// Interface for chrome://location-internals to be notified when the debug data
// is updated.
interface GeolocationInternalsObserver {
// Called after handling an event that may have changed the debug data.
OnDiagnosticsChanged(GeolocationDiagnostics diagnostics);
// Called when a request is sent to the location service. `request` contains
// the information about nearby access points sent to the service.
OnNetworkLocationRequested(array<AccessPointData> access_point_data);
// Called when a response is received for a request to the location service.
// `response` is the position estimate parsed from the response, or null if a
// position estimate was not included in the response.
OnNetworkLocationReceived(NetworkLocationResponse? response);
};
// Interface for chrome://location-internals to access geolocation debug data.
interface GeolocationInternals {
// Registers a geolocation debug data observer. Responds with the current
// debug data, or null if the geolocation API has not been initialized.
AddInternalsObserver(pending_remote<GeolocationInternalsObserver> observer) =>
(GeolocationDiagnostics? diagnostics);
};