@@ -756,6 +756,7 @@ class ProceduralFilterer {
756756
757757self . ProceduralFiltererAPI = class {
758758 constructor ( ) {
759+ this . cssSheets = new Set ( ) ;
759760 this . proceduralFilterer = null ;
760761 this . domObserver = null ;
761762 }
@@ -766,10 +767,18 @@ self.ProceduralFiltererAPI = class {
766767 this . domObserver . disconnect ( ) ;
767768 this . domObserver = null ;
768769 }
770+ const promises = [ ] ;
769771 if ( this . proceduralFilterer ) {
770- await this . proceduralFilterer . reset ( ) ;
772+ promises . push ( this . proceduralFilterer . reset ( ) ) ;
771773 this . proceduralFilterer = null ;
772774 }
775+ for ( const css of this . cssSheets ) {
776+ promises . push (
777+ chrome . runtime . sendMessage ( { what : 'removeCSS' , css } ) . catch ( ( ) => { } )
778+ ) ;
779+ }
780+ this . cssSheets . clear ( ) ;
781+ await Promise . all ( promises ) ;
773782 }
774783
775784 addDeclaratives ( selectors ) {
@@ -806,9 +815,11 @@ self.ProceduralFiltererAPI = class {
806815 if ( ruleText === undefined ) { continue ; }
807816 sheetText . push ( ruleText ) ;
808817 }
809- if ( sheetText . length !== 0 ) {
810- self . cssAPI . insert ( sheetText . join ( '\n' ) ) ;
811- }
818+ if ( sheetText . length === 0 ) { return ; }
819+ const cssSheet = sheetText . join ( '\n' ) ;
820+ if ( this . cssSheets . has ( cssSheet ) ) { return ; }
821+ this . cssSheets . add ( cssSheet ) ;
822+ self . cssAPI . insert ( cssSheet ) ;
812823 }
813824
814825 addProcedurals ( selectors ) {
@@ -827,6 +838,10 @@ self.ProceduralFiltererAPI = class {
827838
828839 qsa ( selector ) {
829840 const o = JSON . parse ( selector ) ;
841+ if ( o . cssable ) {
842+ const selector = o . selector . replace ( / : : [ a - z ( ) - ] + $ / , '' ) ;
843+ return Array . from ( document . querySelectorAll ( selector ) ) ;
844+ }
830845 const pselector = new PSelectorRoot ( null , o ) ;
831846 return pselector . exec ( ) ;
832847 }
0 commit comments