aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/style/gecko/conversions.rs13
-rw-r--r--components/style/gecko/url.rs54
-rw-r--r--components/style/properties/gecko.mako.rs47
-rw-r--r--components/style/properties/longhand/font.mako.rs6
-rw-r--r--components/style/servo/url.rs14
-rw-r--r--components/style/stylesheets/rule_parser.rs2
-rw-r--r--components/style/values/specified/box.rs2
-rw-r--r--components/style/values/specified/image.rs2
8 files changed, 57 insertions, 83 deletions
diff --git a/components/style/gecko/conversions.rs b/components/style/gecko/conversions.rs
index 951360b8f5e..bbc2776daa9 100644
--- a/components/style/gecko/conversions.rs
+++ b/components/style/gecko/conversions.rs
@@ -426,10 +426,10 @@ impl nsStyleImage {
}
}
- unsafe fn get_image_url(self: &nsStyleImage) -> ComputedImageUrl {
- let url_value = bindings::Gecko_GetURLValue(self);
- ComputedImageUrl::from_url_value_data(url_value.as_ref().unwrap())
- .expect("Could not convert to ComputedUrl")
+ unsafe fn get_image_url(&self) -> ComputedImageUrl {
+ let image_request = bindings::Gecko_GetImageRequest(self)
+ .as_ref().expect("Null image request?");
+ ComputedImageUrl::from_image_request(image_request)
}
unsafe fn get_gradient(self: &nsStyleImage) -> Box<Gradient> {
@@ -634,6 +634,7 @@ pub mod basic_shape {
use gecko_bindings::structs::{StyleGeometryBox, StyleShapeSource, StyleShapeSourceType};
use gecko_bindings::structs::{nsStyleCoord, nsStyleCorners};
use gecko_bindings::sugar::ns_style_coord::{CoordDataMut, CoordDataValue};
+ use gecko_bindings::sugar::refptr::RefPtr;
use std::borrow::Borrow;
use values::computed::basic_shape::{BasicShape, ClippingShape, FloatAreaShape, ShapeRadius};
use values::computed::border::{BorderCornerRadius, BorderRadius};
@@ -678,8 +679,8 @@ pub mod basic_shape {
match other.mType {
StyleShapeSourceType::URL => unsafe {
let shape_image = &*other.mShapeImage.mPtr;
- let other_url = &(**shape_image.__bindgen_anon_1.mURLValue.as_ref());
- let url = ComputedUrl::from_url_value_data(&other_url._base).unwrap();
+ let other_url = RefPtr::new(*shape_image.__bindgen_anon_1.mURLValue.as_ref());
+ let url = ComputedUrl::from_url_value(other_url);
ShapeSource::ImageOrUrl(url)
},
StyleShapeSourceType::Image => {
diff --git a/components/style/gecko/url.rs b/components/style/gecko/url.rs
index d371f0a74e5..cb503f4720a 100644
--- a/components/style/gecko/url.rs
+++ b/components/style/gecko/url.rs
@@ -38,16 +38,11 @@ pub struct CssUrl {
impl CssUrl {
/// Try to parse a URL from a string value that is a valid CSS token for a
/// URL.
- ///
- /// Returns `Err` in the case that extra_data is incomplete.
- pub fn parse_from_string<'a>(
- url: String,
- context: &ParserContext,
- ) -> Result<Self, ParseError<'a>> {
- Ok(CssUrl {
+ pub fn parse_from_string(url: String, context: &ParserContext) -> Self {
+ CssUrl {
serialization: Arc::new(url),
extra_data: context.url_data.clone(),
- })
+ }
}
/// Returns true if the URL is definitely invalid. We don't eagerly resolve
@@ -58,13 +53,13 @@ impl CssUrl {
}
/// Convert from URLValueData to SpecifiedUrl.
- unsafe fn from_url_value_data(url: &URLValueData) -> Result<Self, ()> {
+ unsafe fn from_url_value_data(url: &URLValueData) -> Self {
let arc_type =
&url.mString as *const _ as *const RawOffsetArc<String>;
- Ok(CssUrl {
+ CssUrl {
serialization: Arc::from_raw_offset((*arc_type).clone()),
extra_data: url.mExtraData.to_safe(),
- })
+ }
}
/// Returns true if this URL looks like a fragment.
@@ -104,7 +99,7 @@ impl Parse for CssUrl {
input: &mut Parser<'i, 't>,
) -> Result<Self, ParseError<'i>> {
let url = input.expect_url()?;
- Self::parse_from_string(url.as_ref().to_owned(), context)
+ Ok(Self::parse_from_string(url.as_ref().to_owned(), context))
}
}
@@ -188,11 +183,8 @@ pub struct SpecifiedImageUrl {
impl SpecifiedImageUrl {
/// Parse a URL from a string value. See SpecifiedUrl::parse_from_string.
- pub fn parse_from_string<'a>(
- url: String,
- context: &ParserContext,
- ) -> Result<Self, ParseError<'a>> {
- CssUrl::parse_from_string(url, context).map(Self::from_css_url)
+ pub fn parse_from_string(url: String, context: &ParserContext) -> Self {
+ Self::from_css_url(CssUrl::parse_from_string(url, context))
}
fn from_css_url(url: CssUrl) -> Self {
@@ -295,11 +287,10 @@ impl ToCss for ComputedUrl {
}
impl ComputedUrl {
- /// Convert from URLValueData to ComputedUrl.
- pub unsafe fn from_url_value_data(url: &URLValueData) -> Result<Self, ()> {
- Ok(ComputedUrl(
- SpecifiedUrl::from_css_url(CssUrl::from_url_value_data(url)?)
- ))
+ /// Convert from RefPtr<URLValue> to ComputedUrl.
+ pub unsafe fn from_url_value(url_value: RefPtr<URLValue>) -> Self {
+ let url = CssUrl::from_url_value_data(&url_value._base);
+ ComputedUrl(SpecifiedUrl { url, url_value })
}
}
@@ -317,21 +308,10 @@ impl ToCss for ComputedImageUrl {
}
impl ComputedImageUrl {
- /// Convert from URLValueData to SpecifiedUrl.
- pub unsafe fn from_url_value_data(url: &URLValueData) -> Result<Self, ()> {
- Ok(ComputedImageUrl(
- SpecifiedImageUrl::from_css_url(CssUrl::from_url_value_data(url)?)
- ))
- }
-
/// Convert from nsStyleImageReques to ComputedImageUrl.
- pub unsafe fn from_image_request(image_request: &nsStyleImageRequest) -> Result<Self, ()> {
- if image_request.mImageValue.mRawPtr.is_null() {
- return Err(());
- }
-
- let image_value = image_request.mImageValue.mRawPtr.as_ref().unwrap();
- let url_value_data = &image_value._base;
- Self::from_url_value_data(url_value_data)
+ pub unsafe fn from_image_request(image_request: &nsStyleImageRequest) -> Self {
+ let image_value = image_request.mImageValue.to_safe();
+ let url = CssUrl::from_url_value_data(&image_value._base);
+ ComputedImageUrl(SpecifiedImageUrl { url, image_value })
}
}
diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs
index 3f20b8328bd..3d9a8e579af 100644
--- a/components/style/properties/gecko.mako.rs
+++ b/components/style/properties/gecko.mako.rs
@@ -43,6 +43,7 @@ use gecko_bindings::structs::mozilla::CSSPseudoElementType;
use gecko_bindings::structs::mozilla::CSSPseudoElementType_InheritingAnonBox;
use gecko_bindings::structs::root::NS_STYLE_CONTEXT_TYPE_SHIFT;
use gecko_bindings::sugar::ns_style_coord::{CoordDataValue, CoordData, CoordDataMut};
+use gecko_bindings::sugar::refptr::RefPtr;
use gecko::values::convert_nscolor_to_rgba;
use gecko::values::convert_rgba_to_nscolor;
use gecko::values::GeckoStyleCoordConvertible;
@@ -758,13 +759,10 @@ def set_gecko_property(ffi_name, expr):
nsStyleSVGPaintType::eStyleSVGPaintType_ContextFill => SVGPaintKind::ContextFill,
nsStyleSVGPaintType::eStyleSVGPaintType_ContextStroke => SVGPaintKind::ContextStroke,
nsStyleSVGPaintType::eStyleSVGPaintType_Server => {
- unsafe {
- SVGPaintKind::PaintServer(
- ComputedUrl::from_url_value_data(
- &(**paint.mPaint.mPaintServer.as_ref())._base
- ).unwrap()
- )
- }
+ SVGPaintKind::PaintServer(unsafe {
+ let url = RefPtr::new(*paint.mPaint.mPaintServer.as_ref());
+ ComputedUrl::from_url_value(url)
+ })
}
nsStyleSVGPaintType::eStyleSVGPaintType_Color => {
unsafe { SVGPaintKind::Color(convert_nscolor_to_rgba(*paint.mPaint.mColor.as_ref())) }
@@ -967,13 +965,9 @@ def set_gecko_property(ffi_name, expr):
return UrlOrNone::none()
}
- unsafe {
- let gecko_url_value = &*self.gecko.${gecko_ffi_name}.mRawPtr;
- UrlOrNone::Url(
- ComputedUrl::from_url_value_data(&gecko_url_value._base)
- .expect("${gecko_ffi_name} could not convert to ComputedUrl")
- )
- }
+ UrlOrNone::Url(unsafe {
+ ComputedUrl::from_url_value(self.gecko.${gecko_ffi_name}.to_safe())
+ })
}
</%def>
@@ -2613,10 +2607,16 @@ fn static_assert() {
}
pub fn set_font_stretch(&mut self, v: longhands::font_stretch::computed_value::T) {
- unsafe { bindings::Gecko_FontStretch_SetFloat(&mut self.gecko.mFont.stretch, (v.0).0) };
+ unsafe {
+ bindings::Gecko_FontStretch_SetFloat(
+ &mut self.gecko.mFont.stretch,
+ v.value(),
+ )
+ };
}
${impl_simple_copy('font_stretch', 'mFont.stretch')}
pub fn clone_font_stretch(&self) -> longhands::font_stretch::computed_value::T {
+ use values::computed::font::FontStretch;
use values::computed::Percentage;
use values::generics::NonNegative;
@@ -2624,7 +2624,7 @@ fn static_assert() {
unsafe { bindings::Gecko_FontStretch_ToFloat(self.gecko.mFont.stretch) };
debug_assert!(stretch >= 0.);
- NonNegative(Percentage(stretch))
+ FontStretch(NonNegative(Percentage(stretch)))
}
pub fn set_font_style(&mut self, v: longhands::font_style::computed_value::T) {
@@ -4146,9 +4146,7 @@ fn static_assert() {
unsafe {
let ref gecko_image_request = *self.gecko.mListStyleImage.mRawPtr;
- UrlOrNone::Url(ComputedImageUrl::from_image_request(
- gecko_image_request
- ).expect("mListStyleImage could not convert to ComputedImageUrl"))
+ UrlOrNone::Url(ComputedImageUrl::from_image_request(gecko_image_request))
}
}
@@ -4553,11 +4551,10 @@ fn static_assert() {
});
},
NS_STYLE_FILTER_URL => {
- filters.push(unsafe {
- Filter::Url(
- ComputedUrl::from_url_value_data(&(**filter.__bindgen_anon_1.mURL.as_ref())._base).unwrap()
- )
- });
+ filters.push(Filter::Url(unsafe {
+ let url = RefPtr::new(*filter.__bindgen_anon_1.mURL.as_ref());
+ ComputedUrl::from_url_value(url)
+ }));
}
_ => {},
}
@@ -5438,7 +5435,6 @@ clip-path
let url = unsafe {
let gecko_image_request = gecko_cursor_image.mImage.mRawPtr.as_ref().unwrap();
ComputedImageUrl::from_image_request(&gecko_image_request)
- .expect("mCursorImages.mImage could not convert to ComputedImageUrl")
};
let hotspot =
@@ -5714,7 +5710,6 @@ clip-path
&**gecko_content.mContent.mImage.as_ref();
ContentItem::Url(
ComputedImageUrl::from_image_request(gecko_image_request)
- .expect("mContent could not convert to ComputedImageUrl")
)
}
},
diff --git a/components/style/properties/longhand/font.mako.rs b/components/style/properties/longhand/font.mako.rs
index 0dca4a4c67e..69f95532c16 100644
--- a/components/style/properties/longhand/font.mako.rs
+++ b/components/style/properties/longhand/font.mako.rs
@@ -335,7 +335,7 @@ ${helpers.predefined_type("-x-text-zoom",
use gecko_bindings::structs::{LookAndFeel_FontID, nsFont};
use std::mem;
use values::computed::Percentage;
- use values::computed::font::{FontSize, FontStyle, FontFamilyList};
+ use values::computed::font::{FontSize, FontStretch, FontStyle, FontFamilyList};
use values::generics::NonNegative;
let id = match *self {
@@ -356,9 +356,9 @@ ${helpers.predefined_type("-x-text-zoom",
)
}
let font_weight = longhands::font_weight::computed_value::T::from_gecko_weight(system.weight);
- let font_stretch = NonNegative(Percentage(unsafe {
+ let font_stretch = FontStretch(NonNegative(Percentage(unsafe {
bindings::Gecko_FontStretch_ToFloat(system.stretch)
- }));
+ })));
let font_style = FontStyle::from_gecko(system.style);
let ret = ComputedSystemFont {
font_family: longhands::font_family::computed_value::T(
diff --git a/components/style/servo/url.rs b/components/style/servo/url.rs
index c0867122ae3..b4821f21e66 100644
--- a/components/style/servo/url.rs
+++ b/components/style/servo/url.rs
@@ -40,18 +40,14 @@ pub struct CssUrl {
impl CssUrl {
/// Try to parse a URL from a string value that is a valid CSS token for a
- /// URL. Never fails - the API is only fallible to be compatible with the
- /// gecko version.
- pub fn parse_from_string<'a>(
- url: String,
- context: &ParserContext,
- ) -> Result<Self, ParseError<'a>> {
+ /// URL.
+ pub fn parse_from_string(url: String, context: &ParserContext) -> Self {
let serialization = Arc::new(url);
let resolved = context.url_data.join(&serialization).ok();
- Ok(CssUrl {
+ CssUrl {
original: Some(serialization),
resolved: resolved,
- })
+ }
}
/// Returns true if the URL is definitely invalid. For Servo URLs, we can
@@ -110,7 +106,7 @@ impl Parse for CssUrl {
input: &mut Parser<'i, 't>,
) -> Result<Self, ParseError<'i>> {
let url = input.expect_url()?;
- Self::parse_from_string(url.as_ref().to_owned(), context)
+ Ok(Self::parse_from_string(url.as_ref().to_owned(), context))
}
}
diff --git a/components/style/stylesheets/rule_parser.rs b/components/style/stylesheets/rule_parser.rs
index 3444dd62614..93f0eaab650 100644
--- a/components/style/stylesheets/rule_parser.rs
+++ b/components/style/stylesheets/rule_parser.rs
@@ -158,7 +158,7 @@ impl<'a, 'i, R: ParseErrorReporter> AtRuleParser<'i> for TopLevelRuleParser<'a,
}
let url_string = input.expect_url_or_string()?.as_ref().to_owned();
- let url = CssUrl::parse_from_string(url_string, &self.context)?;
+ let url = CssUrl::parse_from_string(url_string, &self.context);
let media = parse_media_query_list(&self.context, input,
self.error_context.error_reporter);
diff --git a/components/style/values/specified/box.rs b/components/style/values/specified/box.rs
index f56d6afd430..d716e9e6798 100644
--- a/components/style/values/specified/box.rs
+++ b/components/style/values/specified/box.rs
@@ -212,6 +212,8 @@ impl Display {
Display::Table => Display::InlineTable,
Display::Flex => Display::InlineFlex,
Display::Grid => Display::InlineGrid,
+ // XXX bug 1105868 this should probably be InlineListItem:
+ Display::ListItem => Display::Inline,
Display::MozBox => Display::MozInlineBox,
Display::MozStack => Display::MozInlineStack,
Display::WebkitBox => Display::WebkitInlineBox,
diff --git a/components/style/values/specified/image.rs b/components/style/values/specified/image.rs
index f00b9b53f3c..2390292253b 100644
--- a/components/style/values/specified/image.rs
+++ b/components/style/values/specified/image.rs
@@ -990,7 +990,7 @@ impl Parse for MozImageRect {
input.try(|i| i.expect_function_matching("-moz-image-rect"))?;
input.parse_nested_block(|i| {
let string = i.expect_url_or_string()?;
- let url = SpecifiedImageUrl::parse_from_string(string.as_ref().to_owned(), context)?;
+ let url = SpecifiedImageUrl::parse_from_string(string.as_ref().to_owned(), context);
i.expect_comma()?;
let top = NumberOrPercentage::parse_non_negative(context, i)?;
i.expect_comma()?;