diff options
author | Samson <16504129+sagudev@users.noreply.github.com> | 2023-08-04 12:17:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-04 10:17:43 +0000 |
commit | 9514f670d12b4d92514c1402d686e694f3f234a5 (patch) | |
tree | cd847449b332ac27b6018fbe8a83a248af020c5a /components/script/script_module.rs | |
parent | 66e0d543cfbaecb08ade2e071d6575f9f72f4dbb (diff) | |
download | servo-9514f670d12b4d92514c1402d686e694f3f234a5.tar.gz servo-9514f670d12b4d92514c1402d686e694f3f234a5.zip |
No tracing of nop traceable fields (#29926)
* Add `no_trace` option to JSTraceable derive
* NoTrace wrapper
* Port some types to no_trace schematics
* Fixing my unsafe mistakes (not tracing traceables)
* Add docs & safety guards for no_trace
Safety guards (trait shenanigans) guarantees safety usage of `no_trace`
* Port canvas_traits to no_trace
* Port servo_media to no_trace
* Port net_traits to no_trace
* Port style to no_trace
* Port webgpu to no_trace
* Port script_traits to no_trace
* Port canvas_traits, devtools_traits, embedder_traits, profile_traits to no_trace
* unrooted_must_root lint in seperate file
* Add trace_in_no_trace_lint as script_plugin
* Composable types in must_not_have_traceable
* Introduced HashMapTracedValues wrapper
* `HashMap<NoTrace<K>,V>`->`HashMapTracedValues<K,V>`
* Port rest of servo's types to no_trace
* Port html5ever, euclid, mime and http to no_trace
* Port remaining externals to no_trace
* Port webxr and Arc<Mutex<_>>
* Fix spelling in notrace doc
Diffstat (limited to 'components/script/script_module.rs')
-rw-r--r-- | components/script/script_module.rs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/components/script/script_module.rs b/components/script/script_module.rs index 9ba8dd523a0..01fe01e3472 100644 --- a/components/script/script_module.rs +++ b/components/script/script_module.rs @@ -145,7 +145,7 @@ impl ModuleScript { #[derive(Clone, Debug, Eq, Hash, JSTraceable, PartialEq)] pub enum ModuleIdentity { ScriptId(ScriptId), - ModuleUrl(ServoUrl), + ModuleUrl(#[no_trace] ServoUrl), } impl ModuleIdentity { @@ -165,6 +165,7 @@ impl ModuleIdentity { #[derive(JSTraceable)] pub struct ModuleTree { + #[no_trace] url: ServoUrl, text: DomRefCell<Rc<DOMString>>, record: DomRefCell<Option<ModuleObject>>, @@ -178,11 +179,15 @@ pub struct ModuleTree { // (https://infra.spec.whatwg.org/#ordered-map), however we can usually get away with using // stdlib maps and sets because we rarely iterate over them. parent_identities: DomRefCell<IndexSet<ModuleIdentity>>, + #[no_trace] descendant_urls: DomRefCell<IndexSet<ServoUrl>>, // A set to memoize which descendants are under fetching + #[no_trace] incomplete_fetch_urls: DomRefCell<IndexSet<ServoUrl>>, + #[no_trace] visited_urls: DomRefCell<HashSet<ServoUrl>>, rethrow_error: DomRefCell<Option<RethrowError>>, + #[no_trace] network_error: DomRefCell<Option<NetworkError>>, // A promise for owners to execute when the module tree // is finished @@ -324,7 +329,7 @@ impl ModuleTree { let module_map = global.get_module_map().borrow(); let mut discovered_urls = HashSet::new(); - return ModuleTree::recursive_check_descendants(&self, &module_map, &mut discovered_urls); + return ModuleTree::recursive_check_descendants(&self, &module_map.0, &mut discovered_urls); } // We just leverage the power of Promise to run the task for `finish` the owner. @@ -926,7 +931,7 @@ impl ModuleOwner { let network_error = module_tree.get_network_error().borrow(); match network_error.as_ref() { - Some(network_error) => Err(network_error.clone()), + Some(network_error) => Err(network_error.clone().into()), None => match module_identity { ModuleIdentity::ModuleUrl(script_src) => Ok(ScriptOrigin::external( Rc::clone(&module_tree.get_text().borrow()), @@ -1296,11 +1301,15 @@ pub unsafe extern "C" fn host_import_module_dynamically( #[derive(Clone, JSTraceable, MallocSizeOf)] /// <https://html.spec.whatwg.org/multipage/#script-fetch-options> pub struct ScriptFetchOptions { + #[no_trace] pub referrer: Referrer, pub integrity_metadata: String, + #[no_trace] pub credentials_mode: CredentialsMode, pub cryptographic_nonce: String, + #[no_trace] pub parser_metadata: ParserMetadata, + #[no_trace] pub referrer_policy: Option<ReferrerPolicy>, } |