fix(permissions): make profile snapshots authoritative

This commit is contained in:
2026-07-09 21:56:36 -04:00
parent c28ec2bee8
commit b422ac1631
47 changed files with 1918 additions and 403 deletions
@@ -0,0 +1,49 @@
use servo::Preferences;
pub(super) fn ely_servo_preferences() -> Preferences {
// Servo's current permission request omits the requesting principal. WebRTC,
// Clipboard, and Bluetooth also contain paths that bypass the embedder broker.
// Keep every affected API explicitly gated until those contracts are complete.
Preferences {
dom_async_clipboard_enabled: false,
dom_bluetooth_enabled: false,
dom_geolocation_enabled: false,
dom_notification_enabled: false,
dom_permissions_enabled: false,
dom_storage_manager_api_enabled: false,
dom_wakelock_enabled: false,
dom_webrtc_enabled: false,
dom_intersection_observer_enabled: true,
layout_grid_enabled: true,
layout_variable_fonts_enabled: true,
..Preferences::default()
}
}
#[cfg(test)]
mod tests {
use super::ely_servo_preferences;
#[test]
fn unsafe_permission_surfaces_stay_gated() {
let preferences = ely_servo_preferences();
assert!(!preferences.dom_async_clipboard_enabled);
assert!(!preferences.dom_bluetooth_enabled);
assert!(!preferences.dom_geolocation_enabled);
assert!(!preferences.dom_notification_enabled);
assert!(!preferences.dom_permissions_enabled);
assert!(!preferences.dom_storage_manager_api_enabled);
assert!(!preferences.dom_wakelock_enabled);
assert!(!preferences.dom_webrtc_enabled);
}
#[test]
fn required_rendering_features_stay_enabled() {
let preferences = ely_servo_preferences();
assert!(preferences.dom_intersection_observer_enabled);
assert!(preferences.layout_grid_enabled);
assert!(preferences.layout_variable_fonts_enabled);
}
}