servo/components/shared/embedder/user_content_manager.rs
Tony 5a76906d64
Allow setting userscripts directly without the need of files (#35388)
* Allow settings userscripts through preferences

Signed-off-by: Tony <legendmastertony@gmail.com>

* mach fmt instead of cargo fmt

Signed-off-by: Tony <legendmastertony@gmail.com>

* Fix pref loading not working for array values

Signed-off-by: Tony <legendmastertony@gmail.com>

* Use pref! in userscripts instead

Signed-off-by: Tony <legendmastertony@gmail.com>

* Implement the model jdm suggested
- Remove userscripts from all places and move it to servoshell
- Add in `UserContentManager` struct and passing it through `Servo::new`
all the way down to script thread

Signed-off-by: Tony <legendmastertony@gmail.com>

* Apply suggestions from code review and format

Signed-off-by: Tony <legendmastertony@gmail.com>

* Revert unrelated change

Signed-off-by: Tony <legendmastertony@gmail.com>

---------

Signed-off-by: Tony <legendmastertony@gmail.com>
Signed-off-by: Tony <68118705+Legend-Master@users.noreply.github.com>
2025-03-27 03:00:08 +00:00

55 lines
1.5 KiB
Rust

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::path::PathBuf;
use malloc_size_of::MallocSizeOfOps;
use malloc_size_of_derive::MallocSizeOf;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, MallocSizeOf, Serialize)]
pub struct UserContentManager {
user_scripts: Vec<UserScript>,
}
impl UserContentManager {
pub fn new() -> Self {
UserContentManager::default()
}
pub fn add_script(&mut self, script: impl Into<UserScript>) {
self.user_scripts.push(script.into());
}
pub fn scripts(&self) -> &[UserScript] {
&self.user_scripts
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct UserScript {
pub script: String,
pub source_file: Option<PathBuf>,
}
// Maybe we should implement `MallocSizeOf` for `PathBuf` in `malloc_size_of` crate?
impl malloc_size_of::MallocSizeOf for UserScript {
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize {
let mut sum = 0;
sum += self.script.size_of(ops);
if let Some(path) = &self.source_file {
sum += unsafe { ops.malloc_size_of(path.as_path()) };
}
sum
}
}
impl<T: Into<String>> From<T> for UserScript {
fn from(script: T) -> Self {
UserScript {
script: script.into(),
source_file: None,
}
}
}