From 6fc967f3f9d117379fd85e64b6cf978975669ff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Mon, 2 Oct 2017 18:14:15 +0200 Subject: [PATCH] stylo: Implement Element.matches using stylo. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: 1404897 Reviewed-by: heycam MozReview-Commit-ID: 7nxYVcweu0W Signed-off-by: Emilio Cobos Álvarez --- ports/geckolib/glue.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index d9830844bb8..f87b8c1487e 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -6,7 +6,7 @@ use cssparser::{Parser, ParserInput}; use cssparser::ToCss as ParserToCss; use env_logger::LogBuilder; use malloc_size_of::MallocSizeOfOps; -use selectors::Element; +use selectors::{self, Element}; use selectors::matching::{MatchingContext, MatchingMode, matches_selector}; use servo_arc::{Arc, ArcBorrow, RawOffsetArc}; use std::cell::RefCell; @@ -1522,6 +1522,22 @@ pub extern "C" fn Servo_StyleRule_SelectorMatchesElement(rule: RawServoStyleRule }) } +#[no_mangle] +pub unsafe extern "C" fn Servo_SelectorList_Matches( + element: RawGeckoElementBorrowed, + selectors: &::selectors::SelectorList, +) -> bool { + let element = GeckoElement(element); + let mut context = MatchingContext::new( + MatchingMode::Normal, + None, + None, + element.owner_document_quirks_mode(), + ); + + selectors::matching::matches_selector_list(selectors, &element, &mut context) +} + #[no_mangle] pub extern "C" fn Servo_ImportRule_GetHref(rule: RawServoImportRuleBorrowed, result: *mut nsAString) { read_locked_arc(rule, |rule: &ImportRule| { @@ -4104,7 +4120,9 @@ pub extern "C" fn Servo_CorruptRuleHashAndCrash(set: RawServoStyleSetBorrowed, i } #[no_mangle] -pub unsafe extern "C" fn Servo_SelectorList_Parse(selector_list: *const nsACString) -> *mut ::selectors::SelectorList { +pub unsafe extern "C" fn Servo_SelectorList_Parse( + selector_list: *const nsACString, +) -> *mut ::selectors::SelectorList { use style::selector_parser::SelectorParser; debug_assert!(!selector_list.is_null());