| /* 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, |
| } |
| } |
| } |