Skip to content

Commit 2c14584

Browse files
krkMoggers
authored andcommitted
style: Implement ServoStyleRule::SetSelectorText.
Bug: 37468 Reviewed-by: xidorn
1 parent b61b797 commit 2c14584

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

ports/geckolib/glue.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use cssparser::{ParseErrorKind, Parser, ParserInput, SourceLocation};
66
use cssparser::ToCss as ParserToCss;
77
use env_logger::Builder;
88
use malloc_size_of::MallocSizeOfOps;
9-
use selectors::NthIndexCache;
9+
use selectors::{NthIndexCache, SelectorList};
1010
use selectors::matching::{MatchingContext, MatchingMode, matches_selector};
1111
use servo_arc::{Arc, ArcBorrow, RawOffsetArc};
1212
use smallvec::SmallVec;
@@ -1902,6 +1902,37 @@ pub extern "C" fn Servo_StyleRule_SelectorMatchesElement(
19021902
})
19031903
}
19041904

1905+
#[no_mangle]
1906+
pub unsafe extern "C" fn Servo_StyleRule_SetSelectorText(
1907+
sheet: RawServoStyleSheetContentsBorrowed,
1908+
rule: RawServoStyleRuleBorrowed,
1909+
text: *const nsAString,
1910+
) -> bool {
1911+
let value_str = (*text).to_string();
1912+
1913+
write_locked_arc(rule, |rule: &mut StyleRule| {
1914+
use style::selector_parser::SelectorParser;
1915+
1916+
let contents = StylesheetContents::as_arc(&sheet);
1917+
let namespaces = contents.namespaces.read();
1918+
let url_data = contents.url_data.read();
1919+
let parser = SelectorParser {
1920+
stylesheet_origin: contents.origin,
1921+
namespaces: &namespaces,
1922+
url_data: Some(&url_data),
1923+
};
1924+
1925+
let mut parser_input = ParserInput::new(&value_str);
1926+
match SelectorList::parse(&parser, &mut Parser::new(&mut parser_input)) {
1927+
Ok(selectors) => {
1928+
rule.selectors = selectors;
1929+
true
1930+
}
1931+
Err(_) => false,
1932+
}
1933+
})
1934+
}
1935+
19051936
#[no_mangle]
19061937
pub unsafe extern "C" fn Servo_SelectorList_Closest(
19071938
element: RawGeckoElementBorrowed,

0 commit comments

Comments
 (0)