From 7ebdf95a3d81febe066e730ed5787a89cd70dac9 Mon Sep 17 00:00:00 2001 From: Hiroyuki Ikezoe Date: Wed, 10 May 2017 13:39:08 +0900 Subject: [PATCH] Factor out common part of Servo_ParseProperty() and set_property(). --- ports/geckolib/glue.rs | 54 ++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 906358fd48c..2566f813d6d 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -1117,24 +1117,32 @@ pub extern "C" fn Servo_StyleSet_Drop(data: RawServoStyleSetOwned) { let _ = data.into_box::(); } +fn parse_property(property_id: PropertyId, + value: *const nsACString, + data: *mut URLExtraData, + length_parsing_mode: structs::LengthParsingMode) -> Result { + let value = unsafe { value.as_ref().unwrap().as_str_unchecked() }; + let url_data = unsafe { RefPtr::from_ptr_ref(&data) }; + let length_parsing_mode = match length_parsing_mode { + structs::LengthParsingMode::Default => LengthParsingMode::Default, + structs::LengthParsingMode::SVG => LengthParsingMode::SVG, + }; + + parse_one_declaration(property_id, + value, + url_data, + &RustLogReporter, + length_parsing_mode, + QuirksMode::NoQuirks) +} + #[no_mangle] pub extern "C" fn Servo_ParseProperty(property: nsCSSPropertyID, value: *const nsACString, data: *mut URLExtraData) -> RawServoDeclarationBlockStrong { let id = get_property_id_from_nscsspropertyid!(property, RawServoDeclarationBlockStrong::null()); - let value = unsafe { value.as_ref().unwrap().as_str_unchecked() }; - - let url_data = unsafe { RefPtr::from_ptr_ref(&data) }; - let reporter = RustLogReporter; - let context = ParserContext::new(Origin::Author, - url_data, - &reporter, - Some(CssRuleType::Style), - LengthParsingMode::Default, - QuirksMode::NoQuirks); - - match ParsedDeclaration::parse(id, &context, &mut Parser::new(value)) { + match parse_property(id, value, data, structs::LengthParsingMode::Default) { Ok(parsed) => { let global_style_data = &*GLOBAL_STYLE_DATA; let mut block = PropertyDeclarationBlock::new(); @@ -1293,20 +1301,14 @@ pub extern "C" fn Servo_DeclarationBlock_GetPropertyIsImportant(declarations: Ra fn set_property(declarations: RawServoDeclarationBlockBorrowed, property_id: PropertyId, value: *const nsACString, is_important: bool, data: *mut URLExtraData, length_parsing_mode: structs::LengthParsingMode) -> bool { - let value = unsafe { value.as_ref().unwrap().as_str_unchecked() }; - let url_data = unsafe { RefPtr::from_ptr_ref(&data) }; - let length_parsing_mode = match length_parsing_mode { - structs::LengthParsingMode::Default => LengthParsingMode::Default, - structs::LengthParsingMode::SVG => LengthParsingMode::SVG, - }; - if let Ok(parsed) = parse_one_declaration(property_id, value, url_data, &RustLogReporter, - length_parsing_mode, QuirksMode::NoQuirks) { - let importance = if is_important { Importance::Important } else { Importance::Normal }; - write_locked_arc(declarations, |decls: &mut PropertyDeclarationBlock| { - parsed.expand_set_into(decls, importance) - }) - } else { - false + match parse_property(property_id, value, data, length_parsing_mode) { + Ok(parsed) => { + let importance = if is_important { Importance::Important } else { Importance::Normal }; + write_locked_arc(declarations, |decls: &mut PropertyDeclarationBlock| { + parsed.expand_set_into(decls, importance) + }) + }, + Err(_) => false, } }