@@ -6,7 +6,7 @@ use cssparser::{ParseErrorKind, Parser, ParserInput, SourceLocation};
6
6
use cssparser:: ToCss as ParserToCss ;
7
7
use env_logger:: Builder ;
8
8
use malloc_size_of:: MallocSizeOfOps ;
9
- use selectors:: NthIndexCache ;
9
+ use selectors:: { NthIndexCache , SelectorList } ;
10
10
use selectors:: matching:: { MatchingContext , MatchingMode , matches_selector} ;
11
11
use servo_arc:: { Arc , ArcBorrow , RawOffsetArc } ;
12
12
use smallvec:: SmallVec ;
@@ -1902,6 +1902,37 @@ pub extern "C" fn Servo_StyleRule_SelectorMatchesElement(
1902
1902
} )
1903
1903
}
1904
1904
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
+
1905
1936
#[ no_mangle]
1906
1937
pub unsafe extern "C" fn Servo_SelectorList_Closest (
1907
1938
element : RawGeckoElementBorrowed ,
0 commit comments