@browserless.io/browserless 2.34.0-beta-0 → 2.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/build/routes/chrome/http/content.post.body.json +18 -109
  3. package/build/routes/chrome/http/pdf.post.body.json +18 -109
  4. package/build/routes/chrome/http/scrape.post.body.json +18 -109
  5. package/build/routes/chrome/http/screenshot.post.body.json +18 -109
  6. package/build/routes/chromium/http/content.post.body.json +18 -109
  7. package/build/routes/chromium/http/pdf.post.body.json +18 -109
  8. package/build/routes/chromium/http/scrape.post.body.json +18 -109
  9. package/build/routes/chromium/http/screenshot.post.body.json +18 -109
  10. package/build/routes/edge/http/content.post.body.json +18 -109
  11. package/build/routes/edge/http/pdf.post.body.json +18 -109
  12. package/build/routes/edge/http/scrape.post.body.json +18 -109
  13. package/build/routes/edge/http/screenshot.post.body.json +18 -109
  14. package/build/shared/content.http.js +9 -2
  15. package/build/shared/pdf.http.js +9 -2
  16. package/build/shared/scrape.http.js +9 -2
  17. package/build/shared/screenshot.http.js +9 -2
  18. package/build/types.d.ts +7 -1
  19. package/build/utils.d.ts +1 -0
  20. package/build/utils.js +3 -2
  21. package/extensions/ublocklite/README.md +1 -1
  22. package/extensions/ublocklite/_locales/bs/messages.json +58 -58
  23. package/extensions/ublocklite/_locales/ro/messages.json +1 -1
  24. package/extensions/ublocklite/_locales/ru/messages.json +1 -1
  25. package/extensions/ublocklite/_locales/sr/messages.json +28 -28
  26. package/extensions/ublocklite/css/dashboard.css +9 -4
  27. package/extensions/ublocklite/css/settings.css +17 -13
  28. package/extensions/ublocklite/css/unpicker-ui.css +1 -0
  29. package/extensions/ublocklite/dashboard.html +16 -12
  30. package/extensions/ublocklite/js/background.js +48 -14
  31. package/extensions/ublocklite/js/config.js +2 -1
  32. package/extensions/ublocklite/js/dashboard.js +9 -5
  33. package/extensions/ublocklite/js/debug.js +62 -3
  34. package/extensions/ublocklite/js/ext.js +6 -0
  35. package/extensions/ublocklite/js/fetch.js +3 -1
  36. package/extensions/ublocklite/js/filter-lists.js +16 -7
  37. package/extensions/ublocklite/js/filter-manager.js +63 -9
  38. package/extensions/ublocklite/js/jsonpath.js +65 -26
  39. package/extensions/ublocklite/js/mode-manager.js +5 -1
  40. package/extensions/ublocklite/js/popup.js +1 -1
  41. package/extensions/ublocklite/js/report.js +4 -2
  42. package/extensions/ublocklite/js/ruleset-manager.js +38 -13
  43. package/extensions/ublocklite/js/scripting/css-generic.js +0 -1
  44. package/extensions/ublocklite/js/scripting/css-procedural.js +2 -0
  45. package/extensions/ublocklite/js/scripting/css-specific.js +2 -0
  46. package/extensions/ublocklite/js/scripting-manager.js +4 -10
  47. package/extensions/ublocklite/js/settings.js +3 -5
  48. package/extensions/ublocklite/js/static-filtering-parser.js +18 -11
  49. package/extensions/ublocklite/js/tool-overlay-ui.js +19 -23
  50. package/extensions/ublocklite/js/troubleshooting.js +11 -19
  51. package/extensions/ublocklite/js/ubo-parser.js +1 -1
  52. package/extensions/ublocklite/manifest.json +7 -2
  53. package/extensions/ublocklite/rulesets/generic-details.json +19 -3
  54. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +3 -1
  55. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +15 -11
  56. package/extensions/ublocklite/rulesets/main/annoyances-notifications.json +276 -0
  57. package/extensions/ublocklite/rulesets/main/annoyances-others.json +2 -1
  58. package/extensions/ublocklite/rulesets/main/annoyances-widgets.json +2 -1
  59. package/extensions/ublocklite/rulesets/main/bgr-0.json +54 -68
  60. package/extensions/ublocklite/rulesets/main/block-lan.json +1 -1
  61. package/extensions/ublocklite/rulesets/main/chn-0.json +22 -12
  62. package/extensions/ublocklite/rulesets/main/deu-0.json +5 -7
  63. package/extensions/ublocklite/rulesets/main/dpollock-0.json +5 -0
  64. package/extensions/ublocklite/rulesets/main/easylist.json +29 -85
  65. package/extensions/ublocklite/rulesets/main/easyprivacy.json +44 -8
  66. package/extensions/ublocklite/rulesets/main/fra-0.json +15 -11
  67. package/extensions/ublocklite/rulesets/main/hun-0.json +5 -3
  68. package/extensions/ublocklite/rulesets/main/idn-0.json +6 -1
  69. package/extensions/ublocklite/rulesets/main/ind-0.json +14 -9
  70. package/extensions/ublocklite/rulesets/main/irn-0.json +632 -3
  71. package/extensions/ublocklite/rulesets/main/jpn-1.json +26 -18
  72. package/extensions/ublocklite/rulesets/main/kor-1.json +4 -2
  73. package/extensions/ublocklite/rulesets/main/nld-0.json +1 -1
  74. package/extensions/ublocklite/rulesets/main/nor-0.json +24 -4
  75. package/extensions/ublocklite/rulesets/main/pgl.json +8 -6
  76. package/extensions/ublocklite/rulesets/main/pol-0.json +3 -3
  77. package/extensions/ublocklite/rulesets/main/rus-0.json +18 -11
  78. package/extensions/ublocklite/rulesets/main/rus-1.json +6 -2
  79. package/extensions/ublocklite/rulesets/main/spa-1.json +11 -2
  80. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +5438 -4232
  81. package/extensions/ublocklite/rulesets/main/swe-1.json +29 -24
  82. package/extensions/ublocklite/rulesets/main/tur-0.json +30 -10
  83. package/extensions/ublocklite/rulesets/main/ublock-badware.json +29 -30
  84. package/extensions/ublocklite/rulesets/main/ublock-filters.json +73 -49
  85. package/extensions/ublocklite/rulesets/main/ubol-tests.json +17 -0
  86. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +326 -356
  87. package/extensions/ublocklite/rulesets/main/vie-1.json +30 -26
  88. package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +1 -2
  89. package/extensions/ublocklite/rulesets/modify-headers/fra-0.json +1 -0
  90. package/extensions/ublocklite/rulesets/modify-headers/irn-0.json +45 -0
  91. package/extensions/ublocklite/rulesets/modify-headers/rus-0.json +0 -1
  92. package/extensions/ublocklite/rulesets/modify-headers/ublock-filters.json +4 -3
  93. package/extensions/ublocklite/rulesets/redirect/annoyances-overlays.json +1 -2
  94. package/extensions/ublocklite/rulesets/redirect/easyprivacy.json +19 -0
  95. package/extensions/ublocklite/rulesets/redirect/irn-0.json +73 -0
  96. package/extensions/ublocklite/rulesets/redirect/jpn-1.json +0 -1
  97. package/extensions/ublocklite/rulesets/redirect/kor-1.json +1 -1
  98. package/extensions/ublocklite/rulesets/redirect/tur-0.json +2 -1
  99. package/extensions/ublocklite/rulesets/redirect/ublock-badware.json +18 -0
  100. package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +18 -28
  101. package/extensions/ublocklite/rulesets/redirect/vie-1.json +34 -2
  102. package/extensions/ublocklite/rulesets/regex/chn-0.json +3 -1
  103. package/extensions/ublocklite/rulesets/regex/easylist.json +0 -2
  104. package/extensions/ublocklite/rulesets/regex/irn-0.json +22 -0
  105. package/extensions/ublocklite/rulesets/regex/jpn-1.json +1 -1
  106. package/extensions/ublocklite/rulesets/regex/tur-0.json +2 -1
  107. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +2 -4
  108. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +10 -9
  109. package/extensions/ublocklite/rulesets/regex/ukr-0.json +1 -3
  110. package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +9 -5
  111. package/extensions/ublocklite/rulesets/removeparam/irn-0.json +16 -27
  112. package/extensions/ublocklite/rulesets/removeparam/rus-1.json +3 -1
  113. package/extensions/ublocklite/rulesets/removeparam/ublock-filters.json +6 -3
  114. package/extensions/ublocklite/rulesets/ruleset-details.json +264 -233
  115. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  116. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-notifications.js +87 -0
  117. package/extensions/ublocklite/rulesets/scripting/generic/bgr-0.js +3 -3
  118. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +1 -1
  119. package/extensions/ublocklite/rulesets/scripting/generic/deu-0.js +2 -2
  120. package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +3 -3
  121. package/extensions/ublocklite/rulesets/scripting/generic/est-0.js +1 -1
  122. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +1 -1
  123. package/extensions/ublocklite/rulesets/scripting/generic/irn-0.js +3 -3
  124. package/extensions/ublocklite/rulesets/scripting/generic/jpn-1.js +3 -3
  125. package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +1 -1
  126. package/extensions/ublocklite/rulesets/scripting/generic/pol-0.js +1 -1
  127. package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +1 -1
  128. package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +1 -1
  129. package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
  130. package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +1 -1
  131. package/extensions/ublocklite/rulesets/scripting/generic/vie-1.js +1 -1
  132. package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-notifications.css +36 -0
  133. package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +12 -0
  134. package/extensions/ublocklite/rulesets/scripting/generichigh/easylist.css +1 -12
  135. package/extensions/ublocklite/rulesets/scripting/generichigh/est-0.css +1 -0
  136. package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +11 -0
  137. package/extensions/ublocklite/rulesets/scripting/generichigh/irn-0.css +27 -0
  138. package/extensions/ublocklite/rulesets/scripting/generichigh/nor-0.css +17 -0
  139. package/extensions/ublocklite/rulesets/scripting/generichigh/pol-0.css +8 -0
  140. package/extensions/ublocklite/rulesets/scripting/generichigh/rou-1.css +1 -0
  141. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-0.css +106 -0
  142. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-1.css +3 -0
  143. package/extensions/ublocklite/rulesets/scripting/generichigh/swe-1.css +1 -0
  144. package/extensions/ublocklite/rulesets/scripting/generichigh/ublock-filters.css +8 -2
  145. package/extensions/ublocklite/rulesets/scripting/generichigh/vie-1.css +1 -0
  146. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +3 -3
  147. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +3 -3
  148. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-notifications.js +42 -0
  149. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-others.js +3 -3
  150. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
  151. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-social.js +3 -3
  152. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +3 -3
  153. package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
  154. package/extensions/ublocklite/rulesets/scripting/procedural/ind-0.js +1 -1
  155. package/extensions/ublocklite/rulesets/scripting/procedural/irn-0.js +3 -3
  156. package/extensions/ublocklite/rulesets/scripting/procedural/ita-0.js +3 -3
  157. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  158. package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +1 -1
  159. package/extensions/ublocklite/rulesets/scripting/procedural/rou-1.js +3 -3
  160. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  161. package/extensions/ublocklite/rulesets/scripting/procedural/rus-1.js +1 -1
  162. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
  163. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
  164. package/extensions/ublocklite/rulesets/scripting/procedural/tur-0.js +3 -3
  165. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  166. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-current-script.js +2 -2
  167. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie-reload.js +1 -1
  168. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-constant.js +2 -2
  169. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
  170. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  171. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-session-storage-item.js +2 -2
  172. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  173. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
  174. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.abort-current-script.js +452 -0
  175. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.abort-on-property-write.js +347 -0
  176. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.addEventListener-defuser.js +498 -0
  177. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.remove-attr.js +405 -0
  178. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.remove-class.js +396 -0
  179. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-constant.js +541 -0
  180. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-cookie.js +442 -0
  181. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-local-storage-item.js +399 -0
  182. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-session-storage-item.js +399 -0
  183. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +1 -1
  184. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-read.js +1 -1
  185. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +2 -2
  186. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setTimeout.js +2 -2
  187. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +2 -2
  188. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +1 -1
  189. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-cookie.js +2 -2
  190. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-click-element.js +1 -1
  191. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-replace-outbound-text.js +427 -0
  192. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-current-script.js +2 -2
  193. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.addEventListener-defuser.js +1 -1
  194. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.json-prune-fetch-response.js +588 -0
  195. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.json-prune.js +1 -1
  196. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +2 -2
  197. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +2 -2
  198. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.set-constant.js +1 -1
  199. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.abort-on-property-read.js +2 -2
  200. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-current-script.js +452 -0
  201. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-property-read.js +369 -0
  202. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-property-write.js +347 -0
  203. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-stack-trace.js +421 -0
  204. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.addEventListener-defuser.js +498 -0
  205. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.adjust-setInterval.js +332 -0
  206. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.adjust-setTimeout.js +332 -0
  207. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.href-sanitizer.js +541 -0
  208. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.json-prune.js +506 -0
  209. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-fetch.js +553 -0
  210. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-setTimeout.js +443 -0
  211. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-window-open.js +471 -0
  212. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-xhr.js +584 -0
  213. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-attr.js +405 -0
  214. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-cookie.js +376 -0
  215. package/extensions/ublocklite/rulesets/scripting/scriptlet/{ublock-experimental.trusted-replace-node-text.js → irn-0.remove-node-text.js} +8 -9
  216. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-attr.js +425 -0
  217. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-constant.js +541 -0
  218. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-local-storage-item.js +2 -2
  219. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-session-storage-item.js +2 -2
  220. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.abort-current-script.js +2 -2
  221. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.abort-on-property-write.js +2 -2
  222. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.href-sanitizer.js +2 -2
  223. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.spoof-css.js +2 -2
  224. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-read.js +1 -1
  225. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-write.js +2 -2
  226. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +3 -3
  227. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.href-sanitizer.js +2 -2
  228. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  229. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie.js +2 -2
  230. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.set-constant.js +3 -3
  231. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-read.js +2 -2
  232. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +3 -3
  233. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.noeval-if.js +3 -3
  234. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +2 -2
  235. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-window-open.js +1 -1
  236. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-attr.js +1 -1
  237. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-constant.js +2 -2
  238. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.prevent-xhr.js +1 -1
  239. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-read.js +1 -1
  240. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.addEventListener-defuser.js +2 -2
  241. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setTimeout.js +1 -1
  242. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +1 -1
  243. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
  244. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-local-storage-item.js +3 -3
  245. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
  246. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +2 -2
  247. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +2 -2
  248. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +2 -2
  249. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +3 -3
  250. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +3 -3
  251. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setTimeout.js +2 -2
  252. package/extensions/ublocklite/rulesets/scripting/scriptlet/{ublock-filters.trusted-json-edit-fetch-request.js → ublock-filters.json-edit-fetch-response.js} +109 -66
  253. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit.js +69 -29
  254. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-fetch-response.js +2 -2
  255. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune.js +2 -2
  256. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.jsonl-edit-xhr-response.js +68 -28
  257. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +3 -3
  258. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +3 -3
  259. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setInterval.js +3 -3
  260. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +2 -2
  261. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +3 -3
  262. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +3 -3
  263. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-cookie.js +2 -2
  264. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +2 -2
  265. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
  266. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +2 -2
  267. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-local-storage-item.js +2 -2
  268. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-create-html.js +2 -2
  269. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit-fetch-response.js +68 -28
  270. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-argument.js +2 -2
  271. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
  272. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +2 -2
  273. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +2 -2
  274. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-local-storage-item.js +1 -1
  275. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-fetch-response.js +68 -28
  276. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-xhr-response.js +68 -28
  277. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +2 -2
  278. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  279. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
  280. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  281. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-notifications.js +42 -0
  282. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  283. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  284. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  285. package/extensions/ublocklite/rulesets/scripting/specific/bgr-0.js +3 -3
  286. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  287. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  288. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  289. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  290. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  291. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
  292. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  293. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  294. package/extensions/ublocklite/rulesets/scripting/specific/irn-0.js +3 -3
  295. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +3 -3
  296. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  297. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  298. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  299. package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
  300. package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +1 -1
  301. package/extensions/ublocklite/rulesets/scripting/specific/pol-0.js +3 -3
  302. package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
  303. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  304. package/extensions/ublocklite/rulesets/scripting/specific/rus-1.js +3 -3
  305. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  306. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  307. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  308. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  309. package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
  310. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  311. package/extensions/ublocklite/rulesets/scriptlet-details.json +521 -135
  312. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +16 -0
  313. package/extensions/ublocklite/rulesets/strictblock/annoyances-notifications.json +41 -0
  314. package/extensions/ublocklite/rulesets/strictblock/bgr-0.json +1 -2
  315. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +112 -0
  316. package/extensions/ublocklite/rulesets/strictblock/dpollock-0.json +5 -0
  317. package/extensions/ublocklite/rulesets/strictblock/easylist.json +1 -1
  318. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +36 -71
  319. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +270 -16
  320. package/extensions/ublocklite/rulesets/strictblock/hun-0.json +1 -0
  321. package/extensions/ublocklite/rulesets/strictblock/irn-0.json +249 -2
  322. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +182 -177
  323. package/extensions/ublocklite/rulesets/strictblock/kor-1.json +1 -0
  324. package/extensions/ublocklite/rulesets/strictblock/nor-0.json +6 -4
  325. package/extensions/ublocklite/rulesets/strictblock/pgl.json +8 -6
  326. package/extensions/ublocklite/rulesets/strictblock/pol-0.json +1 -0
  327. package/extensions/ublocklite/rulesets/strictblock/rus-1.json +1 -0
  328. package/extensions/ublocklite/rulesets/strictblock/spa-1.json +2 -0
  329. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +5438 -4232
  330. package/extensions/ublocklite/rulesets/strictblock/swe-1.json +3 -0
  331. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +679 -675
  332. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +1 -1
  333. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +326 -356
  334. package/extensions/ublocklite/rulesets/strictblock/vie-1.json +1 -1
  335. package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +37 -12
  336. package/extensions/ublocklite/ublock.zip +0 -0
  337. package/package.json +8 -8
  338. package/scripts/build-open-api.js +15 -1
  339. package/src/shared/content.http.ts +9 -1
  340. package/src/shared/pdf.http.ts +9 -1
  341. package/src/shared/scrape.http.ts +9 -1
  342. package/src/shared/screenshot.http.ts +9 -1
  343. package/src/types.ts +7 -1
  344. package/src/utils.ts +4 -2
  345. package/static/docs/swagger.json +218 -122
  346. package/static/docs/swagger.min.json +217 -121
  347. package/static/function/client.js +71 -68
  348. package/static/function/index.html +71 -68
  349. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-experimental.trusted-json-edit-xhr-request.js +0 -795
  350. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.overlay-buster.js +0 -165
  351. package/extensions/ublocklite/rulesets/scripting/specific/easyprivacy.js +0 -42
@@ -99,12 +99,19 @@ export class JSONPath {
99
99
  const r = this.#compile(query, 0);
100
100
  if ( r === undefined ) { return; }
101
101
  if ( r.i !== query.length ) {
102
- if ( query.startsWith('+=', r.i) ) {
102
+ let val;
103
+ if ( query.startsWith('=', r.i) ) {
104
+ if ( /^=repl\(.+\)$/.test(query.slice(r.i)) ) {
105
+ r.modify = 'repl';
106
+ val = query.slice(r.i+6, -1);
107
+ } else {
108
+ val = query.slice(r.i+1);
109
+ }
110
+ } else if ( query.startsWith('+=', r.i) ) {
103
111
  r.modify = '+';
104
- r.i += 1;
112
+ val = query.slice(r.i+2);
105
113
  }
106
- if ( query.startsWith('=', r.i) === false ) { return; }
107
- try { r.rval = JSON.parse(query.slice(r.i+1)); }
114
+ try { r.rval = JSON.parse(val); }
108
115
  catch { return; }
109
116
  }
110
117
  this.#compiled = r;
@@ -117,28 +124,25 @@ export class JSONPath {
117
124
  return paths;
118
125
  }
119
126
  apply(root) {
120
- if ( this.valid === false ) { return 0; }
121
- const { modify, rval } = this.#compiled;
122
- this.#root = root;
127
+ if ( this.valid === false ) { return; }
128
+ const { rval } = this.#compiled;
129
+ this.#root = { '$': root };
123
130
  const paths = this.#evaluate(this.#compiled.steps, []);
124
- const n = paths.length;
125
- let i = n;
131
+ let i = paths.length
132
+ if ( i === 0 ) { this.#root = null; return; }
126
133
  while ( i-- ) {
127
134
  const { obj, key } = this.#resolvePath(paths[i]);
128
135
  if ( rval !== undefined ) {
129
- if ( modify === '+' ) {
130
- this.#modifyVal(obj, key, rval);
131
- } else {
132
- obj[key] = rval;
133
- }
136
+ this.#modifyVal(obj, key);
134
137
  } else if ( Array.isArray(obj) && typeof key === 'number' ) {
135
138
  obj.splice(key, 1);
136
139
  } else {
137
140
  delete obj[key];
138
141
  }
139
142
  }
143
+ const result = this.#root['$'] ?? null;
140
144
  this.#root = null;
141
- return n;
145
+ return result;
142
146
  }
143
147
  dump() {
144
148
  return JSON.stringify(this.#compiled);
@@ -163,8 +167,15 @@ export class JSONPath {
163
167
  if ( query.length === 0 ) { return; }
164
168
  const steps = [];
165
169
  let c = query.charCodeAt(i);
166
- steps.push({ mv: c === 0x24 /* $ */ ? this.#ROOT : this.#CURRENT });
167
- if ( c === 0x24 /* $ */ || c === 0x40 /* @ */ ) { i += 1; }
170
+ if ( c === 0x24 /* $ */ ) {
171
+ steps.push({ mv: this.#ROOT });
172
+ i += 1;
173
+ } else if ( c === 0x40 /* @ */ ) {
174
+ steps.push({ mv: this.#CURRENT });
175
+ i += 1;
176
+ } else {
177
+ steps.push({ mv: i === 0 ? this.#ROOT : this.#CURRENT });
178
+ }
168
179
  let mv = this.#UNDEFINED;
169
180
  for (;;) {
170
181
  if ( i === query.length ) { break; }
@@ -226,7 +237,8 @@ export class JSONPath {
226
237
  i = r.i + 1;
227
238
  mv = this.#UNDEFINED;
228
239
  }
229
- if ( steps.length <= 1 ) { return; }
240
+ if ( steps.length === 0 ) { return; }
241
+ if ( mv !== this.#UNDEFINED ) { return; }
230
242
  return { steps, i };
231
243
  }
232
244
  #evaluate(steps, pathin) {
@@ -235,7 +247,7 @@ export class JSONPath {
235
247
  for ( const step of steps ) {
236
248
  switch ( step.mv ) {
237
249
  case this.#ROOT:
238
- resultset = [ [] ];
250
+ resultset = [ [ '$' ] ];
239
251
  break;
240
252
  case this.#CURRENT:
241
253
  resultset = [ pathin ];
@@ -458,13 +470,40 @@ export class JSONPath {
458
470
  }
459
471
  if ( outcome ) { return k; }
460
472
  }
461
- #modifyVal(obj, key, rval) {
462
- const lval = obj[key];
463
- if ( rval instanceof Object === false ) { return; }
464
- if ( lval instanceof Object === false ) { return; }
465
- if ( Array.isArray(lval) ) { return; }
466
- for ( const [ k, v ] of Object.entries(rval) ) {
467
- lval[k] = v;
473
+ #modifyVal(obj, key) {
474
+ const { modify, rval } = this.#compiled;
475
+ switch ( modify ) {
476
+ case undefined:
477
+ obj[key] = rval;
478
+ break;
479
+ case '+': {
480
+ if ( rval instanceof Object === false ) { return; }
481
+ const lval = obj[key];
482
+ if ( lval instanceof Object === false ) { return; }
483
+ if ( Array.isArray(lval) ) { return; }
484
+ for ( const [ k, v ] of Object.entries(rval) ) {
485
+ lval[k] = v;
486
+ }
487
+ break;
488
+ }
489
+ case 'repl': {
490
+ const lval = obj[key];
491
+ if ( typeof lval !== 'string' ) { return; }
492
+ if ( this.#compiled.re === undefined ) {
493
+ this.#compiled.re = null;
494
+ try {
495
+ this.#compiled.re = rval.regex !== undefined
496
+ ? new RegExp(rval.regex, rval.flags)
497
+ : new RegExp(rval.pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
498
+ } catch {
499
+ }
500
+ }
501
+ if ( this.#compiled.re === null ) { return; }
502
+ obj[key] = lval.replace(this.#compiled.re, rval.replacement);
503
+ break;
504
+ }
505
+ default:
506
+ break;
468
507
  }
469
508
  }
470
509
  }
@@ -361,16 +361,20 @@ export async function syncWithBrowserPermissions() {
361
361
  const { optimal, complete } = filteringModes;
362
362
  for ( const hn of optimal ) {
363
363
  if ( allowedHostnames.has(hn) ) { continue; }
364
+ if ( isDescendantHostnameOfIter(hn, allowedHostnames) ) { continue; }
364
365
  optimal.delete(hn);
365
366
  modified = true;
366
367
  }
367
368
  for ( const hn of complete ) {
368
369
  if ( allowedHostnames.has(hn) ) { continue; }
370
+ if ( isDescendantHostnameOfIter(hn, allowedHostnames) ) { continue; }
369
371
  complete.delete(hn);
370
372
  modified = true;
371
373
  }
374
+ if ( modified ) {
375
+ await writeFilteringModeDetails(filteringModes);
376
+ }
372
377
  }
373
- await writeFilteringModeDetails(filteringModes);
374
378
  return modified;
375
379
  }
376
380
 
@@ -233,7 +233,7 @@ dom.on('#gotoReport', 'click', ev => {
233
233
  }
234
234
  if ( url === undefined ) { return; }
235
235
  const reportURL = new URL(runtime.getURL('/report.html'));
236
- reportURL.searchParams.set('url', url.href);
236
+ reportURL.searchParams.set('url', tabURL.href);
237
237
  reportURL.searchParams.set('mode', popupPanelData.level);
238
238
  sendMessage({
239
239
  what: 'gotoURL',
@@ -20,7 +20,6 @@
20
20
  */
21
21
 
22
22
  import { dom, qs$ } from './dom.js';
23
- import { getTroubleshootingInfo } from './troubleshooting.js';
24
23
  import { sendMessage } from './ext.js';
25
24
 
26
25
  /******************************************************************************/
@@ -93,7 +92,10 @@ async function reportSpecificFilterIssue() {
93
92
 
94
93
  /******************************************************************************/
95
94
 
96
- getTroubleshootingInfo(reportedPage.mode).then(config => {
95
+ sendMessage({
96
+ what: 'getTroubleshootingInfo',
97
+ siteMode: reportedPage.mode,
98
+ }).then(config => {
97
99
  qs$('[data-i18n="supportS5H"] + pre').textContent = config;
98
100
 
99
101
  dom.on('[data-url]', 'click', ev => {
@@ -36,7 +36,7 @@ import { fetchJSON } from './fetch.js';
36
36
  import { getAdminRulesets } from './admin.js';
37
37
  import { hasBroadHostPermissions } from './utils.js';
38
38
  import { rulesFromText } from './dnr-parser.js';
39
- import { ubolLog } from './debug.js';
39
+ import { ubolErr, ubolLog } from './debug.js';
40
40
 
41
41
  /******************************************************************************/
42
42
 
@@ -306,6 +306,9 @@ async function updateDynamicRules() {
306
306
  if ( dynamicRegexCount !== 0 ) {
307
307
  ubolLog(`Using ${dynamicRegexCount}/${dnr.MAX_NUMBER_OF_REGEX_RULES} dynamic regex-based DNR rules`);
308
308
  }
309
+
310
+ const response = {};
311
+
309
312
  try {
310
313
  await dnr.updateDynamicRules({ addRules, removeRuleIds });
311
314
  if ( removeRuleIds.length !== 0 ) {
@@ -315,9 +318,16 @@ async function updateDynamicRules() {
315
318
  ubolLog(`Add ${addRules.length} dynamic DNR rules`);
316
319
  }
317
320
  } catch(reason) {
318
- console.error(`updateDynamicRules() / ${reason}`);
321
+ ubolErr(`updateDynamicRules/${reason}`);
322
+ response.error = `${reason}`;
319
323
  }
320
- await updateSessionRules();
324
+
325
+ const result = await updateSessionRules();
326
+ if ( result?.error ) {
327
+ response.error ||= result.error;
328
+ }
329
+
330
+ return response;
321
331
  }
322
332
 
323
333
  /******************************************************************************/
@@ -452,6 +462,7 @@ async function updateSessionRules() {
452
462
  if ( sessionRegexCount !== 0 ) {
453
463
  ubolLog(`Using ${sessionRegexCount}/${dnr.MAX_NUMBER_OF_REGEX_RULES} session regex-based DNR rules`);
454
464
  }
465
+ const response = {};
455
466
  try {
456
467
  await dnr.updateSessionRules({ addRules, removeRuleIds });
457
468
  if ( removeRuleIds.length !== 0 ) {
@@ -461,8 +472,10 @@ async function updateSessionRules() {
461
472
  ubolLog(`Add ${addRules.length} session DNR rules`);
462
473
  }
463
474
  } catch(reason) {
464
- console.error(`updateSessionRules() / ${reason}`);
475
+ ubolErr(`updateSessionRules/${reason}`);
476
+ response.error = `${reason}`;
465
477
  }
478
+ return response;
466
479
  }
467
480
 
468
481
  /******************************************************************************/
@@ -636,9 +649,7 @@ async function enableRulesets(ids) {
636
649
  disableRulesetSet.delete(id);
637
650
  }
638
651
 
639
- if ( enableRulesetSet.size === 0 && disableRulesetSet.size === 0 ) {
640
- return false;
641
- }
652
+ if ( enableRulesetSet.size === 0 && disableRulesetSet.size === 0 ) { return; }
642
653
 
643
654
  const enableRulesetIds = Array.from(enableRulesetSet);
644
655
  const disableRulesetIds = Array.from(disableRulesetSet);
@@ -649,20 +660,34 @@ async function enableRulesets(ids) {
649
660
  if ( disableRulesetIds.length !== 0 ) {
650
661
  ubolLog(`Disable ruleset: ${disableRulesetIds}`);
651
662
  }
652
- await dnr.updateEnabledRulesets({ enableRulesetIds, disableRulesetIds }).catch(reason => {
653
- ubolLog(reason);
663
+
664
+ const response = {};
665
+
666
+ await dnr.updateEnabledRulesets({
667
+ enableRulesetIds,
668
+ disableRulesetIds,
669
+ }).catch(reason => {
670
+ ubolErr(`updateEnabledRulesets/${reason}`);
671
+ response.error = `${reason}`;
654
672
  });
655
673
 
656
- await updateDynamicRules();
674
+ const result = await updateDynamicRules();
675
+ if ( result?.error ) {
676
+ response.error ||= result.error;
677
+ }
657
678
 
658
- dnr.getEnabledRulesets().then(enabledRulesets => {
679
+ await dnr.getEnabledRulesets().then(enabledRulesets => {
659
680
  ubolLog(`Enabled rulesets: ${enabledRulesets}`);
681
+ response.enabledRulesets = enabledRulesets;
660
682
  return dnr.getAvailableStaticRuleCount();
661
683
  }).then(count => {
662
684
  ubolLog(`Available static rule count: ${count}`);
685
+ response.staticRuleCount = count;
686
+ }).catch(reason => {
687
+ ubolErr(`getEnabledRulesets/${reason}`);
663
688
  });
664
689
 
665
- return true;
690
+ return response;
666
691
  }
667
692
 
668
693
  /******************************************************************************/
@@ -756,7 +781,7 @@ async function updateUserRules() {
756
781
  out.added = addRules.length;
757
782
  out.removed = removeRuleIds.length;
758
783
  } catch(reason) {
759
- console.info(`updateUserRules() / ${reason}`);
784
+ ubolErr(`updateUserRules/${reason}`);
760
785
  out.errors.push(`${reason}`);
761
786
  } finally {
762
787
  const userRules = await getEffectiveUserRules();
@@ -233,7 +233,6 @@ const stopAll = reason => {
233
233
  domMutationObserver.takeRecords();
234
234
  domMutationObserver = undefined;
235
235
  genericSelectorMap.clear();
236
- console.info(`uBOL: Generic cosmetic filtering stopped because ${reason}`);
237
236
  };
238
237
 
239
238
  /******************************************************************************/
@@ -60,6 +60,8 @@ self.isolatedAPI.forEachHostname(lookupAll, {
60
60
  });
61
61
  proceduralImports.length = 0;
62
62
 
63
+ if ( selectors.length === 0 ) { return; }
64
+
63
65
  const exceptedSelectors = exceptions.length !== 0
64
66
  ? selectors.filter(a => exceptions.includes(JSON.stringify(a)) === false)
65
67
  : selectors;
@@ -58,6 +58,8 @@ self.isolatedAPI.forEachHostname(lookupAll, {
58
58
 
59
59
  specificImports.length = 0;
60
60
 
61
+ if ( selectors.length === 0 ) { return; }
62
+
61
63
  const exceptedSelectors = exceptions.length !== 0
62
64
  ? selectors.filter(a => exceptions.includes(a) === false)
63
65
  : selectors;
@@ -21,18 +21,14 @@
21
21
 
22
22
  import * as ut from './utils.js';
23
23
 
24
- import {
25
- browser,
26
- localRemove,
27
- localWrite,
28
- } from './ext.js';
24
+ import { browser, localRemove } from './ext.js';
25
+ import { ubolErr, ubolLog } from './debug.js';
29
26
 
30
27
  import { fetchJSON } from './fetch.js';
31
28
  import { getEnabledRulesetsDetails } from './ruleset-manager.js';
32
29
  import { getFilteringModeDetails } from './mode-manager.js';
33
30
  import { registerCustomFilters } from './filter-manager.js';
34
31
  import { registerToolbarIconToggler } from './action.js';
35
- import { ubolLog } from './debug.js';
36
32
 
37
33
  /******************************************************************************/
38
34
 
@@ -555,8 +551,7 @@ async function registerInjectables() {
555
551
  await browser.scripting.unregisterContentScripts({ ids: toRemove });
556
552
  localRemove('$scripting.unregisterContentScripts');
557
553
  } catch(reason) {
558
- localWrite('$scripting.unregisterContentScripts', `${reason}`);
559
- console.info(reason);
554
+ ubolErr(`unregisterContentScripts/${reason}`);
560
555
  }
561
556
  }
562
557
 
@@ -566,8 +561,7 @@ async function registerInjectables() {
566
561
  await browser.scripting.registerContentScripts(toAdd);
567
562
  localRemove('$scripting.registerContentScripts');
568
563
  } catch(reason) {
569
- localWrite('$scripting.registerContentScripts', `${reason}`);
570
- console.info(reason);
564
+ ubolErr(`registerContentScripts/${reason}`);
571
565
  }
572
566
  }
573
567
 
@@ -222,10 +222,8 @@ listen.onmessage = ev => {
222
222
  }
223
223
 
224
224
  if ( message.enabledRulesets !== undefined ) {
225
- if ( hashFromIterable(message.enabledRulesets) !== hashFromIterable(local.enabledRulesets) ) {
226
- local.enabledRulesets = message.enabledRulesets;
227
- render = true;
228
- }
225
+ local.enabledRulesets = message.enabledRulesets;
226
+ render = true;
229
227
  }
230
228
 
231
229
  if ( render === false ) { return; }
@@ -250,7 +248,7 @@ sendMessage({
250
248
  }
251
249
  listen();
252
250
  }).catch(reason => {
253
- console.trace(reason);
251
+ console.error(reason);
254
252
  });
255
253
 
256
254
  /******************************************************************************/
@@ -841,6 +841,11 @@ export class AstFilterParser {
841
841
  this.netOptionValueParser = new ArglistParser(',');
842
842
  this.scriptletArgListParser = new ArglistParser(',');
843
843
  this.domainRegexValueParser = new ArglistParser('/');
844
+ this.reNetOptionTokens = new RegExp(
845
+ `^~?(${Array.from(netOptionTokenDescriptors.keys())
846
+ .map(s => escapeForRegex(s))
847
+ .join('|')})\\b`
848
+ );
844
849
  }
845
850
 
846
851
  finish() {
@@ -1273,7 +1278,6 @@ export class AstFilterParser {
1273
1278
  case NODE_TYPE_NET_OPTION_NAME_FONT:
1274
1279
  case NODE_TYPE_NET_OPTION_NAME_IMAGE:
1275
1280
  case NODE_TYPE_NET_OPTION_NAME_MEDIA:
1276
- case NODE_TYPE_NET_OPTION_NAME_OBJECT:
1277
1281
  case NODE_TYPE_NET_OPTION_NAME_OTHER:
1278
1282
  case NODE_TYPE_NET_OPTION_NAME_SCRIPT:
1279
1283
  case NODE_TYPE_NET_OPTION_NAME_XHR:
@@ -1301,6 +1305,7 @@ export class AstFilterParser {
1301
1305
  break;
1302
1306
  case NODE_TYPE_NET_OPTION_NAME_DOC:
1303
1307
  case NODE_TYPE_NET_OPTION_NAME_FRAME:
1308
+ case NODE_TYPE_NET_OPTION_NAME_OBJECT:
1304
1309
  realBad = hasValue;
1305
1310
  if ( realBad ) { break; }
1306
1311
  docTypeCount += 1;
@@ -1512,12 +1517,7 @@ export class AstFilterParser {
1512
1517
  for (;;) {
1513
1518
  const before = s.charAt(j-1);
1514
1519
  if ( before === '$' ) { return -1; }
1515
- const after = s.charAt(j+1);
1516
- if ( ')/|'.includes(after) === false ) {
1517
- if ( before === '' || '"\'\\`'.includes(before) === false ) {
1518
- return j;
1519
- }
1520
- }
1520
+ if ( this.reNetOptionTokens.test(s.slice(j+1)) ) { return j; }
1521
1521
  if ( j === start ) { break; }
1522
1522
  j = s.lastIndexOf('$', j-1);
1523
1523
  if ( j === -1 ) { break; }
@@ -3080,9 +3080,10 @@ export function parseReplaceByRegexValue(s) {
3080
3080
  if ( parser.transform ) {
3081
3081
  pattern = parser.normalizeArg(pattern);
3082
3082
  }
3083
- if ( pattern === '' ) { return; }
3084
- pattern = parser.normalizeArg(pattern, '$');
3085
- pattern = parser.normalizeArg(pattern, ',');
3083
+ if ( pattern !== '' ) {
3084
+ pattern = parser.normalizeArg(pattern, '$');
3085
+ pattern = parser.normalizeArg(pattern, ',');
3086
+ }
3086
3087
  parser.nextArg(s, parser.separatorEnd);
3087
3088
  let replacement = s.slice(parser.argBeg, parser.argEnd);
3088
3089
  if ( parser.separatorEnd === parser.separatorBeg ) { return; }
@@ -3092,6 +3093,9 @@ export function parseReplaceByRegexValue(s) {
3092
3093
  replacement = parser.normalizeArg(replacement, '$');
3093
3094
  replacement = parser.normalizeArg(replacement, ',');
3094
3095
  const flags = s.slice(parser.separatorEnd);
3096
+ if ( pattern === '' ) {
3097
+ return { flags, replacement }
3098
+ }
3095
3099
  try {
3096
3100
  return { re: new RegExp(pattern, flags), replacement };
3097
3101
  } catch {
@@ -3101,7 +3105,10 @@ export function parseReplaceByRegexValue(s) {
3101
3105
  export function parseReplaceValue(s) {
3102
3106
  if ( s.startsWith('/') ) {
3103
3107
  const r = parseReplaceByRegexValue(s);
3104
- if ( r ) { r.type = 'text'; }
3108
+ if ( r ) {
3109
+ if ( r.re === undefined ) { return; }
3110
+ r.type = 'text';
3111
+ }
3105
3112
  return r;
3106
3113
  }
3107
3114
  const pos = s.indexOf(':');
@@ -48,9 +48,8 @@ export const toolOverlay = {
48
48
  };
49
49
  this.moveable = qs$('aside:has(#move)');
50
50
  if ( this.moveable !== null ) {
51
- dom.on('aside #move', 'pointerdown', ev => {
52
- this.mover(ev);
53
- });
51
+ dom.on('aside #move', 'pointerdown', ev => { this.mover(ev); });
52
+ dom.on('aside #move', 'touchstart', this.eatTouchEvent);
54
53
  }
55
54
  this.onMessage({ what: 'startTool',
56
55
  url: msg.url,
@@ -167,20 +166,16 @@ export const toolOverlay = {
167
166
  if ( target.matches('#move') === false ) { return; }
168
167
  if ( dom.cl.has(this.moveable, 'moving') ) { return; }
169
168
  target.setPointerCapture(ev.pointerId);
170
- this.moverIsTouch = ev.type.startsWith('touch');
171
- if ( this.moverIsTouch ) {
172
- const touch = ev.touches[0];
173
- this.moverX0 = touch.pageX;
174
- this.moverY0 = touch.pageY;
175
- } else {
176
- this.moverX0 = ev.pageX;
177
- this.moverY0 = ev.pageY;
178
- }
169
+ this.moverX0 = ev.pageX;
170
+ this.moverY0 = ev.pageY;
179
171
  const rect = this.moveable.getBoundingClientRect();
180
172
  this.moverCX0 = rect.x + rect.width / 2;
181
173
  this.moverCY0 = rect.y + rect.height / 2;
182
174
  dom.cl.add(this.moveable, 'moving');
183
- self.addEventListener('pointermove', this.moverMoveAsync, { capture: true });
175
+ self.addEventListener('pointermove', this.moverMoveAsync, {
176
+ passive: true,
177
+ capture: true,
178
+ });
184
179
  self.addEventListener('pointerup', this.moverStop, { capture: true, once: true });
185
180
  ev.stopPropagation();
186
181
  ev.preventDefault();
@@ -209,15 +204,9 @@ export const toolOverlay = {
209
204
  }
210
205
  },
211
206
  moverMoveAsync(ev) {
207
+ toolOverlay.moverX1 = ev.pageX;
208
+ toolOverlay.moverY1 = ev.pageY;
212
209
  if ( toolOverlay.moverTimer !== undefined ) { return; }
213
- if ( toolOverlay.moverIsTouch ) {
214
- const touch = ev.touches[0];
215
- toolOverlay.moverX1 = touch.pageX;
216
- toolOverlay.moverY1 = touch.pageY;
217
- } else {
218
- toolOverlay.moverX1 = ev.pageX;
219
- toolOverlay.moverY1 = ev.pageY;
220
- }
221
210
  toolOverlay.moverTimer = self.requestAnimationFrame(( ) => {
222
211
  toolOverlay.moverMove();
223
212
  });
@@ -225,13 +214,20 @@ export const toolOverlay = {
225
214
  moverStop(ev) {
226
215
  if ( dom.cl.has(toolOverlay.moveable, 'moving') === false ) { return; }
227
216
  dom.cl.remove(toolOverlay.moveable, 'moving');
228
- self.removeEventListener('pointermove', toolOverlay.moverMoveAsync, { capture: true });
217
+ self.removeEventListener('pointermove', toolOverlay.moverMoveAsync, {
218
+ passive: true,
219
+ capture: true,
220
+ });
229
221
  ev.target.releasePointerCapture(ev.pointerId);
230
222
  ev.stopPropagation();
231
223
  ev.preventDefault();
232
224
  },
225
+ eatTouchEvent(ev) {
226
+ if ( ev.target !== qs$('aside #move') ) { return; }
227
+ ev.stopPropagation();
228
+ ev.preventDefault();
229
+ },
233
230
  moveable: null,
234
- moverIsTouch: false,
235
231
  moverX0: 0, moverY0: 0,
236
232
  moverX1: 0, moverY1: 0,
237
233
  moverCX0: 0, moverCY0: 0,
@@ -19,14 +19,11 @@
19
19
  Home: https://github.com/gorhill/uBlock
20
20
  */
21
21
 
22
- import {
23
- localRead,
24
- runtime,
25
- sendMessage,
26
- } from './ext.js';
27
-
28
22
  import { dnr } from './ext-compat.js';
29
- import { dom } from './dom.js';
23
+ import { getConsoleOutput } from './debug.js';
24
+ import { getDefaultFilteringMode } from './mode-manager.js';
25
+ import { getEffectiveUserRules } from './ruleset-manager.js';
26
+ import { runtime } from './ext.js';
30
27
 
31
28
  /******************************************************************************/
32
29
 
@@ -63,15 +60,11 @@ export async function getTroubleshootingInfo(siteMode) {
63
60
  rulesets,
64
61
  defaultMode,
65
62
  userRules,
66
- registerContentScriptsReason,
67
- unregisterContentScriptsReason,
68
63
  ] = await Promise.all([
69
64
  runtime.getPlatformInfo(),
70
65
  dnr.getEnabledRulesets(),
71
- sendMessage({ what: 'getDefaultFilteringMode' }),
72
- sendMessage({ what: 'getEffectiveUserRules' }),
73
- localRead('$scripting.registerContentScripts'),
74
- localRead('$scripting.unregisterContentScripts'),
66
+ getDefaultFilteringMode(),
67
+ getEffectiveUserRules(),
75
68
  ]);
76
69
  const browser = (( ) => {
77
70
  const extURL = runtime.getURL('');
@@ -85,7 +78,6 @@ export async function getTroubleshootingInfo(siteMode) {
85
78
  } else {
86
79
  agent = 'Chrome';
87
80
  }
88
- dom.cl.add('html', agent.toLowerCase());
89
81
  if ( /\bMobile\b/.test(navigator.userAgent) ) {
90
82
  agent += ' Mobile';
91
83
  }
@@ -113,11 +105,11 @@ export async function getTroubleshootingInfo(siteMode) {
113
105
  config['user rules'] = userRules.length;
114
106
  }
115
107
  config.rulesets = rulesets;
116
- if ( registerContentScriptsReason !== undefined ) {
117
- config.registerContentScripts = registerContentScriptsReason;
118
- }
119
- if ( unregisterContentScriptsReason !== undefined ) {
120
- config.unregisterContentScripts = unregisterContentScriptsReason;
108
+ const consoleOutput = getConsoleOutput();
109
+ if ( consoleOutput.length !== 0 ) {
110
+ config.console = siteMode
111
+ ? consoleOutput.slice(-8)
112
+ : consoleOutput;
121
113
  }
122
114
  return renderData(config);
123
115
  }
@@ -314,7 +314,7 @@ function parseNetworkFilter(parser) {
314
314
  break;
315
315
  case sfp.NODE_TYPE_NET_OPTION_NAME_METHOD: {
316
316
  const value = parser.getNetOptionValue(type);
317
- for ( const method of value.toUpperCase().split('|') ) {
317
+ for ( const method of value.toLowerCase().split('|') ) {
318
318
  const not = method.charCodeAt(0) === 0x7E /* '~' */;
319
319
  if ( not ) {
320
320
  excludedRequestMethods.add(method.slice(1));
@@ -97,6 +97,11 @@
97
97
  "enabled": false,
98
98
  "path": "/rulesets/main/annoyances-others.json"
99
99
  },
100
+ {
101
+ "id": "annoyances-notifications",
102
+ "enabled": false,
103
+ "path": "/rulesets/main/annoyances-notifications.json"
104
+ },
100
105
  {
101
106
  "id": "ublock-experimental",
102
107
  "enabled": false,
@@ -319,7 +324,7 @@
319
324
  "storage": {
320
325
  "managed_schema": "managed_storage.json"
321
326
  },
322
- "version": "2025.804.1547",
327
+ "version": "2025.818.1918",
323
328
  "web_accessible_resources": [
324
329
  {
325
330
  "resources": [
@@ -360,8 +365,8 @@
360
365
  {
361
366
  "resources": [
362
367
  "web_accessible_resources/noop.js",
363
- "web_accessible_resources/google-ima.js",
364
368
  "web_accessible_resources/amazon_apstag.js",
369
+ "web_accessible_resources/google-ima.js",
365
370
  "web_accessible_resources/noop.txt",
366
371
  "web_accessible_resources/noop.css",
367
372
  "web_accessible_resources/1x1.gif",