diff --git a/components/style/gecko/wrapper.rs b/components/style/gecko/wrapper.rs index 9ec7ee3cf76..6f59864b322 100644 --- a/components/style/gecko/wrapper.rs +++ b/components/style/gecko/wrapper.rs @@ -694,7 +694,7 @@ impl<'le> PresentationalHintsSynthetizer for GeckoElement<'le> { let global_style_data = &*GLOBAL_STYLE_DATA; let pdb = PropertyDeclarationBlock::with_one( - PropertyDeclaration::XLang(SpecifiedLang(Atom::from(ptr))), + PropertyDeclaration::XLang(SpecifiedLang(unsafe { Atom::from_addrefed(ptr) })), Importance::Normal ); let arc = Arc::new(global_style_data.shared_lock.wrap(pdb)); diff --git a/components/style/gecko_string_cache/mod.rs b/components/style/gecko_string_cache/mod.rs index b464d459a0e..b6659c6ab91 100644 --- a/components/style/gecko_string_cache/mod.rs +++ b/components/style/gecko_string_cache/mod.rs @@ -197,6 +197,16 @@ impl Atom { "Called from_static for a non-static atom!"); atom } + + /// Creates an atom from a dynamic atom pointer that has already had AddRef + /// called on it. + #[inline] + pub unsafe fn from_addrefed(ptr: *mut nsIAtom) -> Self { + debug_assert!(!ptr.is_null()); + unsafe { + Atom(WeakAtom::new(ptr)) + } + } } impl Hash for Atom {