aboutsummaryrefslogtreecommitdiffstats
path: root/ports
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2017-05-12 13:46:00 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2017-05-12 15:20:12 +0200
commitbc156cfe1c2f52a6f609f1ad1a28dcbfd36a9d4e (patch)
tree9787d0b01154f434e44c7ae3bac69056a4ef7cab /ports
parent58253f545bfed82f4503069c5dd8e22e2dd5e2d4 (diff)
downloadservo-bc156cfe1c2f52a6f609f1ad1a28dcbfd36a9d4e.tar.gz
servo-bc156cfe1c2f52a6f609f1ad1a28dcbfd36a9d4e.zip
Stylo: Bug 1350175 - Support getting line / column number of CSS rules
Fix font_cache_thread test
Diffstat (limited to 'ports')
-rw-r--r--ports/geckolib/glue.rs43
1 files changed, 27 insertions, 16 deletions
diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs
index 9d37f8f01f8..60de6e441f3 100644
--- a/ports/geckolib/glue.rs
+++ b/ports/geckolib/glue.rs
@@ -552,7 +552,8 @@ pub extern "C" fn Servo_StyleSheet_FromUTF8Bytes(loader: *mut Loader,
data: *const nsACString,
mode: SheetParsingMode,
media_list: *const RawServoMediaList,
- extra_data: *mut URLExtraData)
+ extra_data: *mut URLExtraData,
+ line_number_offset: u32)
-> RawServoStyleSheetStrong {
let global_style_data = &*GLOBAL_STYLE_DATA;
let input = unsafe { data.as_ref().unwrap().as_str_unchecked() };
@@ -586,7 +587,8 @@ pub extern "C" fn Servo_StyleSheet_FromUTF8Bytes(loader: *mut Loader,
Arc::new(Stylesheet::from_str(
input, url_data.clone(), origin, media,
- shared_lock, loader, &RustLogReporter, QuirksMode::NoQuirks, 0u64)
+ shared_lock, loader, &RustLogReporter,
+ QuirksMode::NoQuirks, line_number_offset as u64)
).into_strong()
}
@@ -595,7 +597,8 @@ pub extern "C" fn Servo_StyleSheet_ClearAndUpdate(stylesheet: RawServoStyleSheet
loader: *mut Loader,
gecko_stylesheet: *mut ServoStyleSheet,
data: *const nsACString,
- extra_data: *mut URLExtraData)
+ extra_data: *mut URLExtraData,
+ line_number_offset: u32)
{
let input = unsafe { data.as_ref().unwrap().as_str_unchecked() };
let url_data = unsafe { RefPtr::from_ptr_ref(&extra_data) };
@@ -613,8 +616,8 @@ pub extern "C" fn Servo_StyleSheet_ClearAndUpdate(stylesheet: RawServoStyleSheet
};
let sheet = Stylesheet::as_arc(&stylesheet);
- Stylesheet::update_from_str(&sheet, input, url_data,
- loader, &RustLogReporter);
+ Stylesheet::update_from_str(&sheet, input, url_data, loader,
+ &RustLogReporter, line_number_offset as u64);
}
#[no_mangle]
@@ -763,16 +766,24 @@ macro_rules! impl_basic_rule_funcs {
to_css: $to_css:ident,
} => {
#[no_mangle]
- pub extern "C" fn $getter(rules: ServoCssRulesBorrowed, index: u32) -> Strong<$raw_type> {
- read_locked_arc(rules, |rules: &CssRules| {
- match rules.0[index as usize] {
- CssRule::$name(ref rule) => rule.clone().into_strong(),
- _ => {
- unreachable!(concat!(stringify!($getter), "should only be called ",
- "on a ", stringify!($name), " rule"));
- }
+ pub extern "C" fn $getter(rules: ServoCssRulesBorrowed, index: u32,
+ line: *mut u32, column: *mut u32)
+ -> Strong<$raw_type> {
+ let global_style_data = &*GLOBAL_STYLE_DATA;
+ let guard = global_style_data.shared_lock.read();
+ let rules = Locked::<CssRules>::as_arc(&rules).read_with(&guard);
+ match rules.0[index as usize] {
+ CssRule::$name(ref rule) => {
+ let location = rule.read_with(&guard).source_location;
+ *unsafe { line.as_mut().unwrap() } = location.line as u32;
+ *unsafe { column.as_mut().unwrap() } = location.column as u32;
+ rule.clone().into_strong()
+ },
+ _ => {
+ unreachable!(concat!(stringify!($getter), "should only be called ",
+ "on a ", stringify!($name), " rule"));
}
- })
+ }
}
#[no_mangle]
@@ -905,7 +916,7 @@ pub extern "C" fn Servo_NamespaceRule_GetURI(rule: RawServoNamespaceRuleBorrowed
#[no_mangle]
pub extern "C" fn Servo_PageRule_GetStyle(rule: RawServoPageRuleBorrowed) -> RawServoDeclarationBlockStrong {
read_locked_arc(rule, |rule: &PageRule| {
- rule.0.clone().into_strong()
+ rule.block.clone().into_strong()
})
}
@@ -914,7 +925,7 @@ pub extern "C" fn Servo_PageRule_SetStyle(rule: RawServoPageRuleBorrowed,
declarations: RawServoDeclarationBlockBorrowed) {
let declarations = Locked::<PropertyDeclarationBlock>::as_arc(&declarations);
write_locked_arc(rule, |rule: &mut PageRule| {
- rule.0 = declarations.clone();
+ rule.block = declarations.clone();
})
}