mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
stylo: handle unresolved url value gracefully
This commit is contained in:
parent
fed488cd01
commit
09ce1320e9
3 changed files with 21 additions and 8 deletions
|
@ -133,7 +133,9 @@ impl nsStyleImage {
|
|||
self.set_gradient(gradient)
|
||||
},
|
||||
Image::Url(ref url) if with_url => {
|
||||
let (ptr, len) = url.as_slice_components();
|
||||
let (ptr, len) = match url.as_slice_components() {
|
||||
Ok(value) | Err(value) => value
|
||||
};
|
||||
let extra_data = url.extra_data();
|
||||
unsafe {
|
||||
Gecko_SetUrlImageValue(self,
|
||||
|
|
|
@ -1152,7 +1152,10 @@ fn static_assert() {
|
|||
Either::Second(_none) => debug_assert!(self.gecko.mBinding.mRawPtr.is_null()),
|
||||
Either::First(ref url) => {
|
||||
let extra_data = url.extra_data();
|
||||
let (ptr, len) = url.as_slice_components();
|
||||
let (ptr, len) = match url.as_slice_components() {
|
||||
Ok(value) => value,
|
||||
Err(_) => (ptr::null(), 0),
|
||||
};
|
||||
unsafe {
|
||||
Gecko_SetMozBinding(&mut self.gecko,
|
||||
ptr,
|
||||
|
@ -1737,7 +1740,9 @@ fn static_assert() {
|
|||
}
|
||||
}
|
||||
Either::First(ref url) => {
|
||||
let (ptr, len) = url.as_slice_components();
|
||||
let (ptr, len) = match url.as_slice_components() {
|
||||
Ok(value) | Err(value) => value
|
||||
};
|
||||
let extra_data = url.extra_data();
|
||||
unsafe {
|
||||
Gecko_SetListStyleImage(&mut self.gecko,
|
||||
|
@ -2433,7 +2438,9 @@ clip-path
|
|||
for i in 0..v.images.len() {
|
||||
let image = &v.images[i];
|
||||
let extra_data = image.url.extra_data();
|
||||
let (ptr, len) = image.url.as_slice_components();
|
||||
let (ptr, len) = match image.url.as_slice_components() {
|
||||
Ok(value) | Err(value) => value,
|
||||
};
|
||||
unsafe {
|
||||
Gecko_SetCursorImage(&mut self.gecko.mCursorImages[i],
|
||||
ptr, len as u32,
|
||||
|
|
|
@ -13,7 +13,6 @@ use parser::ParserContextExtraData;
|
|||
use servo_url::ServoUrl;
|
||||
use std::borrow::Cow;
|
||||
use std::fmt::{self, Write};
|
||||
use std::ptr;
|
||||
use std::sync::Arc;
|
||||
use style_traits::ToCss;
|
||||
use values::NoViewportPercentage;
|
||||
|
@ -121,10 +120,15 @@ impl SpecifiedUrl {
|
|||
}
|
||||
|
||||
/// Little helper for Gecko's ffi.
|
||||
pub fn as_slice_components(&self) -> (*const u8, usize) {
|
||||
#[cfg(feature = "gecko")]
|
||||
pub fn as_slice_components(&self) -> Result<(*const u8, usize), (*const u8, usize)> {
|
||||
match self.resolved {
|
||||
Some(ref url) => (url.as_str().as_ptr(), url.as_str().len()),
|
||||
None => (ptr::null(), 0),
|
||||
Some(ref url) => Ok((url.as_str().as_ptr(), url.as_str().len())),
|
||||
None => {
|
||||
let url = self.original.as_ref()
|
||||
.expect("We should always have either the original or the resolved value");
|
||||
Err((url.as_str().as_ptr(), url.as_str().len()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue