mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Remove some usage of unsafe code in Permissions
This commit is contained in:
parent
8968286aa1
commit
4a5f51e079
2 changed files with 30 additions and 37 deletions
|
@ -30,13 +30,13 @@ use crate::dom::eventtarget::EventTarget;
|
||||||
use crate::dom::globalscope::GlobalScope;
|
use crate::dom::globalscope::GlobalScope;
|
||||||
use crate::dom::permissions::{get_descriptor_permission_state, PermissionAlgorithm};
|
use crate::dom::permissions::{get_descriptor_permission_state, PermissionAlgorithm};
|
||||||
use crate::dom::promise::Promise;
|
use crate::dom::promise::Promise;
|
||||||
use crate::script_runtime::JSContext as SafeJSContext;
|
use crate::script_runtime::JSContext;
|
||||||
use crate::task::TaskOnce;
|
use crate::task::TaskOnce;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
use ipc_channel::ipc::{self, IpcSender};
|
use ipc_channel::ipc::{self, IpcSender};
|
||||||
use ipc_channel::router::ROUTER;
|
use ipc_channel::router::ROUTER;
|
||||||
use js::conversions::ConversionResult;
|
use js::conversions::ConversionResult;
|
||||||
use js::jsapi::{JSContext, JSObject};
|
use js::jsapi::JSObject;
|
||||||
use js::jsval::{ObjectValue, UndefinedValue};
|
use js::jsval::{ObjectValue, UndefinedValue};
|
||||||
use profile_traits::ipc as ProfiledIpc;
|
use profile_traits::ipc as ProfiledIpc;
|
||||||
use std::cell::Ref;
|
use std::cell::Ref;
|
||||||
|
@ -616,28 +616,24 @@ impl PermissionAlgorithm for Bluetooth {
|
||||||
type Descriptor = BluetoothPermissionDescriptor;
|
type Descriptor = BluetoothPermissionDescriptor;
|
||||||
type Status = BluetoothPermissionResult;
|
type Status = BluetoothPermissionResult;
|
||||||
|
|
||||||
#[allow(unsafe_code)]
|
|
||||||
fn create_descriptor(
|
fn create_descriptor(
|
||||||
cx: *mut JSContext,
|
cx: JSContext,
|
||||||
permission_descriptor_obj: *mut JSObject,
|
permission_descriptor_obj: *mut JSObject,
|
||||||
) -> Result<BluetoothPermissionDescriptor, Error> {
|
) -> Result<BluetoothPermissionDescriptor, Error> {
|
||||||
rooted!(in(cx) let mut property = UndefinedValue());
|
rooted!(in(*cx) let mut property = UndefinedValue());
|
||||||
property
|
property
|
||||||
.handle_mut()
|
.handle_mut()
|
||||||
.set(ObjectValue(permission_descriptor_obj));
|
.set(ObjectValue(permission_descriptor_obj));
|
||||||
unsafe {
|
match BluetoothPermissionDescriptor::new(cx, property.handle()) {
|
||||||
match BluetoothPermissionDescriptor::new(SafeJSContext::from_ptr(cx), property.handle())
|
Ok(ConversionResult::Success(descriptor)) => Ok(descriptor),
|
||||||
{
|
Ok(ConversionResult::Failure(error)) => Err(Error::Type(error.into_owned())),
|
||||||
Ok(ConversionResult::Success(descriptor)) => Ok(descriptor),
|
Err(_) => Err(Error::Type(String::from(BT_DESC_CONVERSION_ERROR))),
|
||||||
Ok(ConversionResult::Failure(error)) => Err(Error::Type(error.into_owned())),
|
|
||||||
Err(_) => Err(Error::Type(String::from(BT_DESC_CONVERSION_ERROR))),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://webbluetoothcg.github.io/web-bluetooth/#query-the-bluetooth-permission
|
// https://webbluetoothcg.github.io/web-bluetooth/#query-the-bluetooth-permission
|
||||||
fn permission_query(
|
fn permission_query(
|
||||||
_cx: *mut JSContext,
|
_cx: JSContext,
|
||||||
promise: &Rc<Promise>,
|
promise: &Rc<Promise>,
|
||||||
descriptor: &BluetoothPermissionDescriptor,
|
descriptor: &BluetoothPermissionDescriptor,
|
||||||
status: &BluetoothPermissionResult,
|
status: &BluetoothPermissionResult,
|
||||||
|
@ -727,7 +723,7 @@ impl PermissionAlgorithm for Bluetooth {
|
||||||
|
|
||||||
// https://webbluetoothcg.github.io/web-bluetooth/#request-the-bluetooth-permission
|
// https://webbluetoothcg.github.io/web-bluetooth/#request-the-bluetooth-permission
|
||||||
fn permission_request(
|
fn permission_request(
|
||||||
_cx: *mut JSContext,
|
_cx: JSContext,
|
||||||
promise: &Rc<Promise>,
|
promise: &Rc<Promise>,
|
||||||
descriptor: &BluetoothPermissionDescriptor,
|
descriptor: &BluetoothPermissionDescriptor,
|
||||||
status: &BluetoothPermissionResult,
|
status: &BluetoothPermissionResult,
|
||||||
|
|
|
@ -17,10 +17,10 @@ use crate::dom::bluetoothpermissionresult::BluetoothPermissionResult;
|
||||||
use crate::dom::globalscope::GlobalScope;
|
use crate::dom::globalscope::GlobalScope;
|
||||||
use crate::dom::permissionstatus::PermissionStatus;
|
use crate::dom::permissionstatus::PermissionStatus;
|
||||||
use crate::dom::promise::Promise;
|
use crate::dom::promise::Promise;
|
||||||
use crate::script_runtime::JSContext as SafeJSContext;
|
use crate::script_runtime::JSContext;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
use js::conversions::ConversionResult;
|
use js::conversions::ConversionResult;
|
||||||
use js::jsapi::{JSContext, JSObject};
|
use js::jsapi::JSObject;
|
||||||
use js::jsval::{ObjectValue, UndefinedValue};
|
use js::jsval::{ObjectValue, UndefinedValue};
|
||||||
use servo_config::pref;
|
use servo_config::pref;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
@ -37,17 +37,17 @@ pub trait PermissionAlgorithm {
|
||||||
type Descriptor;
|
type Descriptor;
|
||||||
type Status;
|
type Status;
|
||||||
fn create_descriptor(
|
fn create_descriptor(
|
||||||
cx: *mut JSContext,
|
cx: JSContext,
|
||||||
permission_descriptor_obj: *mut JSObject,
|
permission_descriptor_obj: *mut JSObject,
|
||||||
) -> Result<Self::Descriptor, Error>;
|
) -> Result<Self::Descriptor, Error>;
|
||||||
fn permission_query(
|
fn permission_query(
|
||||||
cx: *mut JSContext,
|
cx: JSContext,
|
||||||
promise: &Rc<Promise>,
|
promise: &Rc<Promise>,
|
||||||
descriptor: &Self::Descriptor,
|
descriptor: &Self::Descriptor,
|
||||||
status: &Self::Status,
|
status: &Self::Status,
|
||||||
);
|
);
|
||||||
fn permission_request(
|
fn permission_request(
|
||||||
cx: *mut JSContext,
|
cx: JSContext,
|
||||||
promise: &Rc<Promise>,
|
promise: &Rc<Promise>,
|
||||||
descriptor: &Self::Descriptor,
|
descriptor: &Self::Descriptor,
|
||||||
status: &Self::Status,
|
status: &Self::Status,
|
||||||
|
@ -88,7 +88,7 @@ impl Permissions {
|
||||||
fn manipulate(
|
fn manipulate(
|
||||||
&self,
|
&self,
|
||||||
op: Operation,
|
op: Operation,
|
||||||
cx: *mut JSContext,
|
cx: JSContext,
|
||||||
permissionDesc: *mut JSObject,
|
permissionDesc: *mut JSObject,
|
||||||
promise: Option<Rc<Promise>>,
|
promise: Option<Rc<Promise>>,
|
||||||
) -> Rc<Promise> {
|
) -> Rc<Promise> {
|
||||||
|
@ -201,18 +201,18 @@ impl Permissions {
|
||||||
|
|
||||||
impl PermissionsMethods for Permissions {
|
impl PermissionsMethods for Permissions {
|
||||||
// https://w3c.github.io/permissions/#dom-permissions-query
|
// https://w3c.github.io/permissions/#dom-permissions-query
|
||||||
fn Query(&self, cx: SafeJSContext, permissionDesc: *mut JSObject) -> Rc<Promise> {
|
fn Query(&self, cx: JSContext, permissionDesc: *mut JSObject) -> Rc<Promise> {
|
||||||
self.manipulate(Operation::Query, *cx, permissionDesc, None)
|
self.manipulate(Operation::Query, cx, permissionDesc, None)
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/permissions/#dom-permissions-request
|
// https://w3c.github.io/permissions/#dom-permissions-request
|
||||||
fn Request(&self, cx: SafeJSContext, permissionDesc: *mut JSObject) -> Rc<Promise> {
|
fn Request(&self, cx: JSContext, permissionDesc: *mut JSObject) -> Rc<Promise> {
|
||||||
self.manipulate(Operation::Request, *cx, permissionDesc, None)
|
self.manipulate(Operation::Request, cx, permissionDesc, None)
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/permissions/#dom-permissions-revoke
|
// https://w3c.github.io/permissions/#dom-permissions-revoke
|
||||||
fn Revoke(&self, cx: SafeJSContext, permissionDesc: *mut JSObject) -> Rc<Promise> {
|
fn Revoke(&self, cx: JSContext, permissionDesc: *mut JSObject) -> Rc<Promise> {
|
||||||
self.manipulate(Operation::Revoke, *cx, permissionDesc, None)
|
self.manipulate(Operation::Revoke, cx, permissionDesc, None)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,27 +220,24 @@ impl PermissionAlgorithm for Permissions {
|
||||||
type Descriptor = PermissionDescriptor;
|
type Descriptor = PermissionDescriptor;
|
||||||
type Status = PermissionStatus;
|
type Status = PermissionStatus;
|
||||||
|
|
||||||
#[allow(unsafe_code)]
|
|
||||||
fn create_descriptor(
|
fn create_descriptor(
|
||||||
cx: *mut JSContext,
|
cx: JSContext,
|
||||||
permission_descriptor_obj: *mut JSObject,
|
permission_descriptor_obj: *mut JSObject,
|
||||||
) -> Result<PermissionDescriptor, Error> {
|
) -> Result<PermissionDescriptor, Error> {
|
||||||
rooted!(in(cx) let mut property = UndefinedValue());
|
rooted!(in(*cx) let mut property = UndefinedValue());
|
||||||
property
|
property
|
||||||
.handle_mut()
|
.handle_mut()
|
||||||
.set(ObjectValue(permission_descriptor_obj));
|
.set(ObjectValue(permission_descriptor_obj));
|
||||||
unsafe {
|
match PermissionDescriptor::new(cx, property.handle()) {
|
||||||
match PermissionDescriptor::new(SafeJSContext::from_ptr(cx), property.handle()) {
|
Ok(ConversionResult::Success(descriptor)) => Ok(descriptor),
|
||||||
Ok(ConversionResult::Success(descriptor)) => Ok(descriptor),
|
Ok(ConversionResult::Failure(error)) => Err(Error::Type(error.into_owned())),
|
||||||
Ok(ConversionResult::Failure(error)) => Err(Error::Type(error.into_owned())),
|
Err(_) => Err(Error::JSFailed),
|
||||||
Err(_) => Err(Error::JSFailed),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://w3c.github.io/permissions/#boolean-permission-query-algorithm
|
// https://w3c.github.io/permissions/#boolean-permission-query-algorithm
|
||||||
fn permission_query(
|
fn permission_query(
|
||||||
_cx: *mut JSContext,
|
_cx: JSContext,
|
||||||
_promise: &Rc<Promise>,
|
_promise: &Rc<Promise>,
|
||||||
_descriptor: &PermissionDescriptor,
|
_descriptor: &PermissionDescriptor,
|
||||||
status: &PermissionStatus,
|
status: &PermissionStatus,
|
||||||
|
@ -251,7 +248,7 @@ impl PermissionAlgorithm for Permissions {
|
||||||
|
|
||||||
// https://w3c.github.io/permissions/#boolean-permission-request-algorithm
|
// https://w3c.github.io/permissions/#boolean-permission-request-algorithm
|
||||||
fn permission_request(
|
fn permission_request(
|
||||||
cx: *mut JSContext,
|
cx: JSContext,
|
||||||
promise: &Rc<Promise>,
|
promise: &Rc<Promise>,
|
||||||
descriptor: &PermissionDescriptor,
|
descriptor: &PermissionDescriptor,
|
||||||
status: &PermissionStatus,
|
status: &PermissionStatus,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue