diff --git a/moli-renderer-v8/src/native_bridge/document/detached_surface/creation/clone_adopt.rs b/moli-renderer-v8/src/native_bridge/document/detached_surface/creation/clone_adopt.rs index 7b33d6c049..a6d6549583 100644 --- a/moli-renderer-v8/src/native_bridge/document/detached_surface/creation/clone_adopt.rs +++ b/moli-renderer-v8/src/native_bridge/document/detached_surface/creation/clone_adopt.rs @@ -85,6 +85,15 @@ fn clone_detached_document_shell<'s>( { return None; } + // Browser Document clones fall back to their copied URL/about base URL + // when a copied is removed. The native clone helper also serves + // callers that need a frozen computed base; do not expose that override. + unsafe { &mut *clone_runtime } + .dom_host_mut() + .node_mut(clone_handle)? + .data_mut() + .as_document_mut()? + .set_base_url_override(None); if !deep { return Some(cloned); } diff --git a/moli-renderer-v8/src/script_vm/tests/dom_elements/detached/document_lifecycle_and_adoption.rs b/moli-renderer-v8/src/script_vm/tests/dom_elements/detached/document_lifecycle_and_adoption.rs index 39f9240e8f..76b93e043f 100644 --- a/moli-renderer-v8/src/script_vm/tests/dom_elements/detached/document_lifecycle_and_adoption.rs +++ b/moli-renderer-v8/src/script_vm/tests/dom_elements/detached/document_lifecycle_and_adoption.rs @@ -45,7 +45,7 @@ fn detached_document_clones_keep_url_and_document_uri_in_sync_with_native_metada } #[test] -fn document_clone_base_uri_survives_base_element_removal() { +fn document_clone_base_uri_falls_back_to_copied_url_after_base_removal() { let mut vm = new_storage_test_vm("https://document-clone-base.test/path/page.html"); let result = vm .eval( @@ -80,8 +80,26 @@ fn document_clone_base_uri_survives_base_element_removal() { "#, ) .expect("document clone base URI probe should evaluate"); - let row = r#"["https://cdn.example/assets/","https://other.example/","https://cdn.example/assets/","https://cdn.example/assets/image.png","https://cdn.example/assets/"]"#; - assert_eq!(result, format!("[{row},{row}]")); + let fallback = "https://document-clone-base.test/path/page.html"; + assert_eq!( + serde_json::from_str::(&result).unwrap(), + serde_json::json!([ + [ + fallback, + "https://other.example/", + fallback, + "https://document-clone-base.test/path/image.png", + fallback + ], + [ + "https://cdn.example/assets/", + "https://other.example/", + fallback, + "https://document-clone-base.test/path/image.png", + fallback + ], + ]) + ); } #[test]