diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs index adeecc3925d..b3fa77ee974 100644 --- a/components/style/gecko_bindings/bindings.rs +++ b/components/style/gecko_bindings/bindings.rs @@ -927,6 +927,11 @@ extern "C" { pub fn Servo_DeclarationBlock_CreateEmpty() -> RawServoDeclarationBlockStrong; } +extern "C" { + pub fn Servo_DeclarationBlock_Clone(declarations: + RawServoDeclarationBlockBorrowed) + -> RawServoDeclarationBlockStrong; +} extern "C" { pub fn Servo_DeclarationBlock_Equals(a: RawServoDeclarationBlockBorrowed, b: RawServoDeclarationBlockBorrowed) diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 4e3062faa0b..becd1ff7dc0 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -426,6 +426,13 @@ pub extern "C" fn Servo_DeclarationBlock_CreateEmpty() -> RawServoDeclarationBlo Arc::new(RwLock::new(PropertyDeclarationBlock { declarations: vec![], important_count: 0 })).into_strong() } +#[no_mangle] +pub extern "C" fn Servo_DeclarationBlock_Clone(declarations: RawServoDeclarationBlockBorrowed) + -> RawServoDeclarationBlockStrong { + let declarations = RwLock::::as_arc(&declarations); + Arc::new(RwLock::new(declarations.read().clone())).into_strong() +} + #[no_mangle] pub extern "C" fn Servo_DeclarationBlock_AddRef(declarations: RawServoDeclarationBlockBorrowed) { unsafe { RwLock::::addref(declarations) };