@@ -1072,7 +1072,17 @@ func getUrlProps(_ url: String) -> [String: String]? {
1072
1072
err ( " failed to parse url in getUrlProps " )
1073
1073
return nil
1074
1074
}
1075
- return [ " protocol " : " \( ptcl) : " , " host " : host, " pathname " : parts. path, " href " : url]
1075
+ var search = " "
1076
+ if let query = parts. query {
1077
+ search = " ? " + query
1078
+ }
1079
+ return [
1080
+ " protocol " : " \( ptcl) : " ,
1081
+ " host " : host,
1082
+ " pathname " : parts. path,
1083
+ " search " : search,
1084
+ " href " : url
1085
+ ]
1076
1086
}
1077
1087
1078
1088
func stringToRegex( _ stringPattern: String ) -> NSRegularExpression ? {
@@ -1085,7 +1095,23 @@ func stringToRegex(_ stringPattern: String) -> NSRegularExpression? {
1085
1095
return regex
1086
1096
}
1087
1097
1088
- func match( _ ptcl: String , _ host: String , _ path: String , _ matchPattern: String ) -> Bool {
1098
+ func match( _ url: String , _ matchPattern: String ) -> Bool {
1099
+ guard
1100
+ let parts = getUrlProps ( url) ,
1101
+ let ptcl = parts [ " protocol " ] ,
1102
+ let host = parts [ " host " ] ,
1103
+ var path = parts [ " pathname " ]
1104
+ else {
1105
+ err ( " invalid url \( url) " )
1106
+ return false
1107
+ }
1108
+
1109
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Match_patterns#path
1110
+ // The value for the path matches against the string which is the URL path plus the URL query string
1111
+ if let search = parts [ " search " ] , search. count > 0 {
1112
+ path += search
1113
+ }
1114
+
1089
1115
// matchPattern is the value from metatdata key @match or @exclude-match
1090
1116
if ( matchPattern == " <all_urls> " ) {
1091
1117
return true
@@ -1156,17 +1182,7 @@ func include(_ url: String,_ pattern: String) -> Bool {
1156
1182
func getMatchedFiles( _ url: String , _ optionalManifest: Manifest ? , _ checkBlocklist: Bool ) -> [ String ] {
1157
1183
logText ( " Getting matched files for \( url) " )
1158
1184
let manifest = optionalManifest ?? getManifest ( )
1159
- guard
1160
- let parts = getUrlProps ( url) ,
1161
- let ptcl = parts [ " protocol " ] ,
1162
- let host = parts [ " host " ] ,
1163
- let path = parts [ " pathname " ] ,
1164
- let href = parts [ " href " ]
1165
- else {
1166
- err ( " getMatchedFiles failed at (1) for \( url) " )
1167
- return [ String] ( )
1168
- }
1169
-
1185
+
1170
1186
// filenames that should not load for the passed url
1171
1187
// the manifest values from @exclude and @exclude-match populate this set
1172
1188
var excludedFilenames : Set < String > = [ ]
@@ -1185,7 +1201,7 @@ func getMatchedFiles(_ url: String, _ optionalManifest: Manifest?, _ checkBlockl
1185
1201
// if url matches a pattern in blocklist, no injection for this url
1186
1202
if ( checkBlocklist) {
1187
1203
for pattern in manifest. blacklist {
1188
- if match ( ptcl , host , path , pattern) {
1204
+ if match ( url , pattern) {
1189
1205
// return empty array
1190
1206
return Array ( matchedFilenames)
1191
1207
}
@@ -1195,7 +1211,7 @@ func getMatchedFiles(_ url: String, _ optionalManifest: Manifest?, _ checkBlockl
1195
1211
// loop through all the @exclude-match patterns
1196
1212
// if any match passed url, push all filenames to excludedFilenames set
1197
1213
for pattern in excludeMatchPatterns {
1198
- if match ( ptcl , host , path , pattern) {
1214
+ if match ( url , pattern) {
1199
1215
guard let filenames = manifest. excludeMatch [ pattern] else {
1200
1216
err ( " getMatchedFiles failed at (2) for \( pattern) " )
1201
1217
continue
@@ -1204,7 +1220,7 @@ func getMatchedFiles(_ url: String, _ optionalManifest: Manifest?, _ checkBlockl
1204
1220
}
1205
1221
}
1206
1222
for exp in excludeExpressions {
1207
- if include ( href , exp) {
1223
+ if include ( url , exp) {
1208
1224
guard let filenames = manifest. exclude [ exp] else {
1209
1225
err ( " getMatchedFiles failed at (3) for \( exp) " )
1210
1226
continue
@@ -1213,7 +1229,7 @@ func getMatchedFiles(_ url: String, _ optionalManifest: Manifest?, _ checkBlockl
1213
1229
}
1214
1230
}
1215
1231
for pattern in matchPatterns {
1216
- if match ( ptcl , host , path , pattern) {
1232
+ if match ( url , pattern) {
1217
1233
guard let filenames = manifest. match [ pattern] else {
1218
1234
err ( " getMatchedFiles failed at (4) for \( pattern) " )
1219
1235
continue
@@ -1222,7 +1238,7 @@ func getMatchedFiles(_ url: String, _ optionalManifest: Manifest?, _ checkBlockl
1222
1238
}
1223
1239
}
1224
1240
for exp in includeExpressions {
1225
- if include ( href , exp) {
1241
+ if include ( url , exp) {
1226
1242
guard let filenames = manifest. include [ exp] else {
1227
1243
err ( " getMatchedFiles failed at (5) for \( exp) " )
1228
1244
continue
@@ -1616,14 +1632,10 @@ func getPopupBadgeCount(_ url: String, _ subframeUrls: [String]) -> Int? {
1616
1632
if showCount == " false " {
1617
1633
return 0
1618
1634
}
1619
- if let parts = getUrlProps ( url) , let ptcl = parts [ " protocol " ] , let host = parts [ " host " ] , let path = parts [ " pathname " ] {
1620
- for pattern in manifest. blacklist {
1621
- if match ( ptcl, host, path, pattern) {
1622
- return 0
1623
- }
1635
+ for pattern in manifest. blacklist {
1636
+ if match ( url, pattern) {
1637
+ return 0
1624
1638
}
1625
- } else {
1626
- return 0
1627
1639
}
1628
1640
if active != " true " {
1629
1641
return 0
0 commit comments