Struct adblock::resources::PermissionMask
source · pub struct PermissionMask(/* private fields */);
Expand description
Specifies a set of permissions required to inject a scriptlet resource.
Permissions can be specified when parsing individual lists using crate::FilterSet
in
order to propagate the permission level to all filters contained in the list.
In practice, permissions are used to limit the risk of third-party lists having access to
powerful scriptlets like uBlock Origin’s trusted-set-cookie
, which has the ability to set
arbitrary cookies to arbitrary values on visited sites.
§Example
const COOKIE_ACCESS: PermissionMask = PermissionMask::from_bits(0b00000001);
const LOCALSTORAGE_ACCESS: PermissionMask = PermissionMask::from_bits(0b00000010);
// `untrusted_filters` will not be able to use privileged scriptlet injections.
filter_set.add_filters(
untrusted_filters,
Default::default(),
);
// `trusted_filters` will be able to inject scriptlets requiring `COOKIE_ACCESS`
// permissions or `LOCALSTORAGE_ACCESS` permissions.
filter_set.add_filters(
trusted_filters,
ParseOptions {
permissions: COOKIE_ACCESS | LOCALSTORAGE_ACCESS,
..Default::default()
},
);
let mut engine = Engine::from_filter_set(filter_set, true);
// The `trusted-set-cookie` scriptlet cannot be injected without `COOKIE_ACCESS`
// permission.
engine.add_resource(Resource {
name: "trusted-set-cookie.js".to_string(),
aliases: vec![],
kind: ResourceType::Mime(MimeType::ApplicationJavascript),
content: base64::encode("document.cookie = '...';"),
dependencies: vec![],
permission: COOKIE_ACCESS,
});
Implementations§
source§impl PermissionMask
impl PermissionMask
sourcepub const fn from_bits(bits: u8) -> Self
pub const fn from_bits(bits: u8) -> Self
Construct a new PermissionMask
with the given bitmask. Use
PermissionMask::default()
instead if you don’t want to restrict or grant any
permissions.
sourcepub fn is_injectable_by(&self, filter_mask: PermissionMask) -> bool
pub fn is_injectable_by(&self, filter_mask: PermissionMask) -> bool
Can filter_mask
authorize injecting a resource requiring self
permissions?
Trait Implementations§
source§impl BitOr for PermissionMask
impl BitOr for PermissionMask
§type Output = PermissionMask
type Output = PermissionMask
The resulting type after applying the
|
operator.source§impl BitOrAssign for PermissionMask
impl BitOrAssign for PermissionMask
source§fn bitor_assign(&mut self, rhs: PermissionMask)
fn bitor_assign(&mut self, rhs: PermissionMask)
Performs the
|=
operation. Read moresource§impl Clone for PermissionMask
impl Clone for PermissionMask
source§fn clone(&self) -> PermissionMask
fn clone(&self) -> PermissionMask
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Debug for PermissionMask
impl Debug for PermissionMask
source§impl Default for PermissionMask
impl Default for PermissionMask
source§fn default() -> PermissionMask
fn default() -> PermissionMask
Returns the “default value” for a type. Read more
source§impl<'de> Deserialize<'de> for PermissionMask
impl<'de> Deserialize<'de> for PermissionMask
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
source§impl Serialize for PermissionMask
impl Serialize for PermissionMask
impl Copy for PermissionMask
Auto Trait Implementations§
impl Freeze for PermissionMask
impl RefUnwindSafe for PermissionMask
impl Send for PermissionMask
impl Sync for PermissionMask
impl Unpin for PermissionMask
impl UnwindSafe for PermissionMask
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more