This needs rust-selectors and other servo-side changes. Right now in servo [foo="bar"i] works but [foo^="bar"i] does not. Same for the other attribute matching operators.
https://github.com/servo/servo/pull/16915 does the parsing for this. snapshot.rs and wrapper.rs in servo/components/style/gecko now each have a attr_matches method where a ignore_case boolean is passed to Gecko_SnapshotAttrEquals and Gecko_AttrEquals but ignored in other cases. What’s needed now is to add pass these booleans through FFI, and implement matching accordingly.