@@ -6,7 +6,7 @@ use cssparser::{ParseErrorKind, Parser, ParserInput, SourceLocation};
66use cssparser:: ToCss as ParserToCss ;
77use env_logger:: Builder ;
88use malloc_size_of:: MallocSizeOfOps ;
9- use selectors:: NthIndexCache ;
9+ use selectors:: { NthIndexCache , SelectorList } ;
1010use selectors:: matching:: { MatchingContext , MatchingMode , matches_selector} ;
1111use servo_arc:: { Arc , ArcBorrow , RawOffsetArc } ;
1212use 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]
19061937pub unsafe extern "C" fn Servo_SelectorList_Closest (
19071938 element : RawGeckoElementBorrowed ,
0 commit comments