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

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 (312) hide show
  1. package/CHANGELOG.md +13 -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/_locales/ru/messages.json +1 -1
  22. package/extensions/ublocklite/css/dashboard.css +9 -4
  23. package/extensions/ublocklite/css/settings.css +17 -13
  24. package/extensions/ublocklite/dashboard.html +16 -12
  25. package/extensions/ublocklite/js/background.js +46 -14
  26. package/extensions/ublocklite/js/config.js +2 -1
  27. package/extensions/ublocklite/js/dashboard.js +9 -5
  28. package/extensions/ublocklite/js/debug.js +62 -3
  29. package/extensions/ublocklite/js/ext.js +6 -0
  30. package/extensions/ublocklite/js/fetch.js +3 -1
  31. package/extensions/ublocklite/js/filter-lists.js +16 -7
  32. package/extensions/ublocklite/js/filter-manager.js +26 -8
  33. package/extensions/ublocklite/js/jsonpath.js +65 -26
  34. package/extensions/ublocklite/js/mode-manager.js +5 -1
  35. package/extensions/ublocklite/js/popup.js +1 -1
  36. package/extensions/ublocklite/js/report.js +4 -2
  37. package/extensions/ublocklite/js/ruleset-manager.js +38 -13
  38. package/extensions/ublocklite/js/scripting/css-generic.js +0 -1
  39. package/extensions/ublocklite/js/scripting-manager.js +4 -10
  40. package/extensions/ublocklite/js/settings.js +3 -5
  41. package/extensions/ublocklite/js/static-filtering-parser.js +1 -1
  42. package/extensions/ublocklite/js/tool-overlay-ui.js +19 -23
  43. package/extensions/ublocklite/js/troubleshooting.js +11 -19
  44. package/extensions/ublocklite/js/ubo-parser.js +1 -1
  45. package/extensions/ublocklite/manifest.json +6 -1
  46. package/extensions/ublocklite/rulesets/generic-details.json +18 -2
  47. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +3 -1
  48. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +11 -8
  49. package/extensions/ublocklite/rulesets/main/annoyances-notifications.json +276 -0
  50. package/extensions/ublocklite/rulesets/main/annoyances-widgets.json +2 -1
  51. package/extensions/ublocklite/rulesets/main/bgr-0.json +54 -68
  52. package/extensions/ublocklite/rulesets/main/block-lan.json +1 -1
  53. package/extensions/ublocklite/rulesets/main/chn-0.json +17 -11
  54. package/extensions/ublocklite/rulesets/main/deu-0.json +1 -1
  55. package/extensions/ublocklite/rulesets/main/dpollock-0.json +3 -0
  56. package/extensions/ublocklite/rulesets/main/easylist.json +18 -16
  57. package/extensions/ublocklite/rulesets/main/easyprivacy.json +27 -3
  58. package/extensions/ublocklite/rulesets/main/fra-0.json +13 -11
  59. package/extensions/ublocklite/rulesets/main/hun-0.json +5 -3
  60. package/extensions/ublocklite/rulesets/main/idn-0.json +6 -1
  61. package/extensions/ublocklite/rulesets/main/ind-0.json +5 -3
  62. package/extensions/ublocklite/rulesets/main/irn-0.json +635 -3
  63. package/extensions/ublocklite/rulesets/main/jpn-1.json +18 -10
  64. package/extensions/ublocklite/rulesets/main/kor-1.json +1 -1
  65. package/extensions/ublocklite/rulesets/main/nld-0.json +1 -1
  66. package/extensions/ublocklite/rulesets/main/nor-0.json +23 -3
  67. package/extensions/ublocklite/rulesets/main/pgl.json +7 -3
  68. package/extensions/ublocklite/rulesets/main/pol-0.json +2 -1
  69. package/extensions/ublocklite/rulesets/main/rus-0.json +15 -8
  70. package/extensions/ublocklite/rulesets/main/rus-1.json +4 -2
  71. package/extensions/ublocklite/rulesets/main/spa-1.json +6 -1
  72. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +2534 -1986
  73. package/extensions/ublocklite/rulesets/main/swe-1.json +15 -13
  74. package/extensions/ublocklite/rulesets/main/tur-0.json +21 -9
  75. package/extensions/ublocklite/rulesets/main/ublock-badware.json +26 -26
  76. package/extensions/ublocklite/rulesets/main/ublock-filters.json +48 -36
  77. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +139 -235
  78. package/extensions/ublocklite/rulesets/main/vie-1.json +14 -16
  79. package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +1 -2
  80. package/extensions/ublocklite/rulesets/modify-headers/fra-0.json +1 -0
  81. package/extensions/ublocklite/rulesets/modify-headers/irn-0.json +45 -0
  82. package/extensions/ublocklite/rulesets/modify-headers/ublock-filters.json +2 -2
  83. package/extensions/ublocklite/rulesets/redirect/annoyances-overlays.json +0 -1
  84. package/extensions/ublocklite/rulesets/redirect/easyprivacy.json +19 -0
  85. package/extensions/ublocklite/rulesets/redirect/irn-0.json +73 -0
  86. package/extensions/ublocklite/rulesets/redirect/kor-1.json +1 -1
  87. package/extensions/ublocklite/rulesets/redirect/tur-0.json +2 -1
  88. package/extensions/ublocklite/rulesets/redirect/ublock-badware.json +18 -0
  89. package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +5 -7
  90. package/extensions/ublocklite/rulesets/redirect/vie-1.json +2 -2
  91. package/extensions/ublocklite/rulesets/regex/irn-0.json +22 -0
  92. package/extensions/ublocklite/rulesets/regex/tur-0.json +2 -1
  93. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +2 -4
  94. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +9 -7
  95. package/extensions/ublocklite/rulesets/regex/ukr-0.json +1 -3
  96. package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +6 -2
  97. package/extensions/ublocklite/rulesets/removeparam/irn-0.json +16 -27
  98. package/extensions/ublocklite/rulesets/removeparam/rus-1.json +2 -1
  99. package/extensions/ublocklite/rulesets/removeparam/ublock-filters.json +5 -3
  100. package/extensions/ublocklite/rulesets/ruleset-details.json +238 -207
  101. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  102. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-notifications.js +87 -0
  103. package/extensions/ublocklite/rulesets/scripting/generic/bgr-0.js +3 -3
  104. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +1 -1
  105. package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +2 -2
  106. package/extensions/ublocklite/rulesets/scripting/generic/est-0.js +1 -1
  107. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +1 -1
  108. package/extensions/ublocklite/rulesets/scripting/generic/irn-0.js +3 -3
  109. package/extensions/ublocklite/rulesets/scripting/generic/jpn-1.js +3 -3
  110. package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +1 -1
  111. package/extensions/ublocklite/rulesets/scripting/generic/pol-0.js +1 -1
  112. package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +1 -1
  113. package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +1 -1
  114. package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
  115. package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +1 -1
  116. package/extensions/ublocklite/rulesets/scripting/generic/vie-1.js +1 -1
  117. package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-notifications.css +36 -0
  118. package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +12 -0
  119. package/extensions/ublocklite/rulesets/scripting/generichigh/est-0.css +1 -0
  120. package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +8 -0
  121. package/extensions/ublocklite/rulesets/scripting/generichigh/irn-0.css +27 -0
  122. package/extensions/ublocklite/rulesets/scripting/generichigh/nor-0.css +17 -0
  123. package/extensions/ublocklite/rulesets/scripting/generichigh/pol-0.css +8 -0
  124. package/extensions/ublocklite/rulesets/scripting/generichigh/rou-1.css +1 -0
  125. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-0.css +105 -0
  126. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-1.css +3 -0
  127. package/extensions/ublocklite/rulesets/scripting/generichigh/swe-1.css +1 -0
  128. package/extensions/ublocklite/rulesets/scripting/generichigh/ublock-filters.css +8 -2
  129. package/extensions/ublocklite/rulesets/scripting/generichigh/vie-1.css +1 -0
  130. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +3 -3
  131. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +3 -3
  132. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-notifications.js +42 -0
  133. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-others.js +3 -3
  134. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +2 -2
  135. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +2 -2
  136. package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
  137. package/extensions/ublocklite/rulesets/scripting/procedural/ind-0.js +1 -1
  138. package/extensions/ublocklite/rulesets/scripting/procedural/irn-0.js +3 -3
  139. package/extensions/ublocklite/rulesets/scripting/procedural/ita-0.js +3 -3
  140. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  141. package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +1 -1
  142. package/extensions/ublocklite/rulesets/scripting/procedural/rou-1.js +3 -3
  143. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  144. package/extensions/ublocklite/rulesets/scripting/procedural/rus-1.js +1 -1
  145. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
  146. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
  147. package/extensions/ublocklite/rulesets/scripting/procedural/tur-0.js +3 -3
  148. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  149. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-current-script.js +2 -2
  150. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-constant.js +2 -2
  151. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
  152. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  153. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-session-storage-item.js +2 -2
  154. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  155. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
  156. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.abort-current-script.js +452 -0
  157. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.abort-on-property-write.js +347 -0
  158. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.addEventListener-defuser.js +498 -0
  159. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.remove-attr.js +405 -0
  160. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.remove-class.js +396 -0
  161. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-constant.js +541 -0
  162. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-cookie.js +442 -0
  163. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-local-storage-item.js +399 -0
  164. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-notifications.set-session-storage-item.js +399 -0
  165. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +1 -1
  166. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-read.js +1 -1
  167. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setTimeout.js +2 -2
  168. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +2 -2
  169. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +1 -1
  170. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.addEventListener-defuser.js +1 -1
  171. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.json-prune.js +1 -1
  172. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +2 -2
  173. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +2 -2
  174. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.set-constant.js +1 -1
  175. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.abort-on-property-read.js +2 -2
  176. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-current-script.js +452 -0
  177. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-property-read.js +369 -0
  178. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-property-write.js +347 -0
  179. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.abort-on-stack-trace.js +421 -0
  180. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.addEventListener-defuser.js +498 -0
  181. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.adjust-setInterval.js +332 -0
  182. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.adjust-setTimeout.js +332 -0
  183. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.href-sanitizer.js +541 -0
  184. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.json-prune.js +506 -0
  185. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-fetch.js +553 -0
  186. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-setTimeout.js +443 -0
  187. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-window-open.js +471 -0
  188. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.prevent-xhr.js +584 -0
  189. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-attr.js +405 -0
  190. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-cookie.js +376 -0
  191. package/extensions/ublocklite/rulesets/scripting/scriptlet/{ublock-experimental.trusted-replace-node-text.js → irn-0.remove-node-text.js} +8 -9
  192. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-attr.js +425 -0
  193. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-constant.js +541 -0
  194. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-local-storage-item.js +2 -2
  195. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.set-session-storage-item.js +2 -2
  196. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.abort-on-property-write.js +2 -2
  197. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.href-sanitizer.js +2 -2
  198. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.spoof-css.js +2 -2
  199. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-read.js +1 -1
  200. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.href-sanitizer.js +2 -2
  201. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  202. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie.js +2 -2
  203. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.set-constant.js +3 -3
  204. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +3 -3
  205. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.noeval-if.js +3 -3
  206. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +2 -2
  207. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-attr.js +1 -1
  208. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.prevent-xhr.js +1 -1
  209. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setInterval.js +2 -2
  210. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setTimeout.js +1 -1
  211. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +1 -1
  212. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
  213. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-local-storage-item.js +3 -3
  214. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
  215. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +2 -2
  216. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +2 -2
  217. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +2 -2
  218. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +2 -2
  219. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +2 -2
  220. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setTimeout.js +3 -3
  221. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit.js +69 -29
  222. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-fetch-response.js +2 -2
  223. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.jsonl-edit-xhr-response.js +68 -28
  224. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +1 -1
  225. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +2 -2
  226. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setInterval.js +3 -3
  227. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +2 -2
  228. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +2 -2
  229. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +3 -3
  230. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +2 -2
  231. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
  232. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +2 -2
  233. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-create-html.js +2 -2
  234. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit-fetch-response.js +68 -28
  235. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-argument.js +2 -2
  236. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
  237. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +2 -2
  238. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +1 -1
  239. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-local-storage-item.js +1 -1
  240. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-fetch-response.js +68 -28
  241. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-xhr-response.js +68 -28
  242. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +1 -1
  243. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  244. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
  245. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  246. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-notifications.js +42 -0
  247. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  248. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  249. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  250. package/extensions/ublocklite/rulesets/scripting/specific/bgr-0.js +3 -3
  251. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  252. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  253. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  254. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  255. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  256. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
  257. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  258. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  259. package/extensions/ublocklite/rulesets/scripting/specific/irn-0.js +3 -3
  260. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +3 -3
  261. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  262. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  263. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  264. package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
  265. package/extensions/ublocklite/rulesets/scripting/specific/pol-0.js +3 -3
  266. package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
  267. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  268. package/extensions/ublocklite/rulesets/scripting/specific/rus-1.js +3 -3
  269. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  270. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  271. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  272. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  273. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  274. package/extensions/ublocklite/rulesets/scriptlet-details.json +469 -114
  275. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +7 -0
  276. package/extensions/ublocklite/rulesets/strictblock/annoyances-notifications.json +41 -0
  277. package/extensions/ublocklite/rulesets/strictblock/bgr-0.json +1 -2
  278. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +43 -0
  279. package/extensions/ublocklite/rulesets/strictblock/dpollock-0.json +3 -0
  280. package/extensions/ublocklite/rulesets/strictblock/easylist.json +1 -1
  281. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +22 -1
  282. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +270 -16
  283. package/extensions/ublocklite/rulesets/strictblock/hun-0.json +1 -0
  284. package/extensions/ublocklite/rulesets/strictblock/irn-0.json +249 -2
  285. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +171 -168
  286. package/extensions/ublocklite/rulesets/strictblock/kor-1.json +1 -0
  287. package/extensions/ublocklite/rulesets/strictblock/nor-0.json +6 -4
  288. package/extensions/ublocklite/rulesets/strictblock/pgl.json +7 -3
  289. package/extensions/ublocklite/rulesets/strictblock/rus-1.json +1 -0
  290. package/extensions/ublocklite/rulesets/strictblock/spa-1.json +1 -0
  291. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +2534 -1986
  292. package/extensions/ublocklite/rulesets/strictblock/swe-1.json +3 -0
  293. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +341 -339
  294. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +1 -1
  295. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +139 -235
  296. package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +37 -12
  297. package/extensions/ublocklite/ublock.zip +0 -0
  298. package/package.json +5 -5
  299. package/src/shared/content.http.ts +9 -1
  300. package/src/shared/pdf.http.ts +9 -1
  301. package/src/shared/scrape.http.ts +9 -1
  302. package/src/shared/screenshot.http.ts +9 -1
  303. package/src/types.ts +7 -1
  304. package/src/utils.ts +4 -2
  305. package/static/docs/swagger.json +218 -122
  306. package/static/docs/swagger.min.json +217 -121
  307. package/static/function/client.js +1 -1
  308. package/static/function/index.html +1 -1
  309. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-experimental.trusted-json-edit-xhr-request.js +0 -795
  310. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.overlay-buster.js +0 -165
  311. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-json-edit-fetch-request.js +0 -884
  312. package/extensions/ublocklite/rulesets/scripting/specific/easyprivacy.js +0 -42
package/build/utils.d.ts CHANGED
@@ -80,6 +80,7 @@ export declare const exists: (path: string) => Promise<boolean>;
80
80
  * @returns {boolean}
81
81
  */
82
82
  export declare const fileExists: (path: string) => Promise<boolean>;
83
+ export declare const isBase64Encoded: (item: string) => boolean;
83
84
  export declare const convertIfBase64: (item: string) => string;
84
85
  export declare const availableBrowsers: Promise<(typeof ChromiumCDP | typeof ChromiumPlaywright | typeof FirefoxPlaywright | typeof WebKitPlaywright)[]>;
85
86
  export declare const queryParamsToObject: (params: URLSearchParams) => Record<string, unknown>;
package/build/utils.js CHANGED
@@ -233,7 +233,7 @@ export const generateDataDir = async (sessionId = id(), config) => {
233
233
  };
234
234
  export const readBody = async (req, maxSize = 10485760) => {
235
235
  if (typeof req.body === 'string' &&
236
- (isBase64.test(req.body) || req.body.startsWith('{'))) {
236
+ (isBase64Encoded(req.body) || req.body.startsWith('{'))) {
237
237
  return safeParse(convertIfBase64(req.body));
238
238
  }
239
239
  const body = await readRequestBody(req, maxSize);
@@ -352,7 +352,8 @@ export const fileExists = async (path) => fs
352
352
  .then((stat) => stat.isFile())
353
353
  .catch(() => false);
354
354
  const isBase64 = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;
355
- export const convertIfBase64 = (item) => isBase64.test(item) ? Buffer.from(item, 'base64').toString() : item;
355
+ export const isBase64Encoded = (item) => isBase64.test(item);
356
+ export const convertIfBase64 = (item) => isBase64Encoded(item) ? Buffer.from(item, 'base64').toString() : item;
356
357
  export const availableBrowsers = Promise.all([
357
358
  exists(playwright.chromium.executablePath()),
358
359
  exists(playwright.firefox.executablePath()),
@@ -68,7 +68,7 @@
68
68
  "description": "Header for a ruleset section in 'Filter lists pane'"
69
69
  },
70
70
  "3pGroupMalware": {
71
- "message": "Вредоносные домены",
71
+ "message": "Защита от вредоносных сайтов, безопасность",
72
72
  "description": "Header for a ruleset section in 'Filter lists pane'"
73
73
  },
74
74
  "3pGroupAnnoyances": {
@@ -1,5 +1,10 @@
1
- nav {
1
+ header {
2
2
  background-color: var(--surface-1);
3
+ position: sticky;
4
+ top: 0;
5
+ z-index: 100;
6
+ }
7
+ nav {
3
8
  border: 0;
4
9
  border-bottom: 1px solid var(--border-1);
5
10
  display: flex;
@@ -7,9 +12,6 @@ nav {
7
12
  flex-wrap: wrap;
8
13
  overflow-x: hidden;
9
14
  padding: 0;
10
- position: sticky;
11
- top: 0;
12
- z-index: 100;
13
15
  }
14
16
  nav > .tabButton {
15
17
  background-color: transparent;
@@ -44,6 +46,9 @@ body[data-pane="about"] #dashboard-nav .tabButton[data-pane="about"] {
44
46
  body:not([data-develop="true"]) #dashboard-nav .tabButton[data-pane="develop"] {
45
47
  display: none;
46
48
  }
49
+ body:not([data-pane="rulesets"]) header [data-pane-related="rulesets"] {
50
+ display: none;
51
+ }
47
52
 
48
53
  body > section {
49
54
  display: none;
@@ -1,3 +1,8 @@
1
+ @keyframes spin {
2
+ 0% { transform: rotate(0deg); }
3
+ 100% { transform: rotate(360deg); }
4
+ }
5
+
1
6
  :root {
2
7
  --filtering-mode-button-size: 32px;
3
8
  }
@@ -80,20 +85,19 @@ label:has(input[type="checkbox"][disabled]) + legend {
80
85
  h3[data-i18n="filteringMode0Name"]::first-letter {
81
86
  text-transform: capitalize;
82
87
  }
83
- #trustedSites {
84
- background-color: var(--surface-0);
85
- border: 1px solid var(--surface-3);
86
- font-size: var(--monospace-size);
87
- min-height: 8rem;
88
- }
89
88
 
90
- section[data-pane="rulesets"] > div:first-of-type {
91
- background-color: var(--surface-1);
92
- flex-shrink: 0;
93
- padding: 1em 0;
94
- position: sticky;
95
- top: 0;
96
- z-index: 10;
89
+ body:not(.committing) #commit-spinner {
90
+ display: none;
91
+ }
92
+ body.committing #commit-spinner {
93
+ animation: spin 1s steps(8) infinite;
94
+ fill: var(--accent-surface-1);
95
+ }
96
+ #dnrError {
97
+ color: var(--info3-ink);
98
+ }
99
+ #dnrError:empty {
100
+ display: none;
97
101
  }
98
102
  section[data-pane="rulesets"] > div:first-of-type > p:first-of-type {
99
103
  margin-top: 0;
@@ -20,13 +20,21 @@
20
20
 
21
21
  <body data-pane="settings" class="loading">
22
22
  <!-- -------- -->
23
- <nav id="dashboard-nav">
24
- <span class="logo"><img data-i18n-title="extName" src="img/ublock.svg" alt="uBO Lite"></span><!--
25
- --><button class="tabButton" type="button" data-pane="settings" data-i18n="settingsPageName" tabindex="0"></button><!--
26
- --><button class="tabButton" type="button" data-pane="rulesets" data-i18n="aboutFilterLists" tabindex="0"></button><!--
27
- --><button class="tabButton" type="button" data-pane="develop" data-i18n="developPageName"tabindex="0"></button><!--
28
- --><button class="tabButton" type="button" data-pane="about" data-i18n="aboutPageName" tabindex="0"></button>
29
- </nav>
23
+ <header>
24
+ <nav id="dashboard-nav">
25
+ <span class="logo"><img data-i18n-title="extName" src="img/ublock.svg" alt="uBO Lite"></span><!--
26
+ --><button class="tabButton" type="button" data-pane="settings" data-i18n="settingsPageName" tabindex="0"></button><!--
27
+ --><button class="tabButton" type="button" data-pane="rulesets" data-i18n="aboutFilterLists" tabindex="0"></button><!--
28
+ --><button class="tabButton" type="button" data-pane="develop" data-i18n="developPageName"tabindex="0"></button><!--
29
+ --><button class="tabButton" type="button" data-pane="about" data-i18n="aboutPageName" tabindex="0"></button>
30
+ </nav>
31
+ <!-- -------- -->
32
+ <div data-pane-related="rulesets">
33
+ <p><span id="commit-spinner" class="fa-icon">spinner</span> <span id="listsOfBlockedHostsPrompt"></span></p>
34
+ <p id="dnrError"></p>
35
+ <p><input id="findInLists" type="search" spellcheck="false" placeholder="findListsPlaceholder" /></p>
36
+ </div>
37
+ </header>
30
38
  <!-- -------- -->
31
39
  <section data-pane="settings">
32
40
  <div>
@@ -92,10 +100,6 @@
92
100
  </section>
93
101
  <!-- -------- -->
94
102
  <section data-pane="rulesets">
95
- <div>
96
- <p id="listsOfBlockedHostsPrompt"></p>
97
- <p><input id="findInLists" type="search" spellcheck="false" placeholder="findListsPlaceholder" /></p>
98
- </div>
99
103
  <div id="lists"></div>
100
104
  </section>
101
105
  <!-- -------- -->
@@ -122,7 +126,7 @@
122
126
  <div class="liul">
123
127
  <div class="li">Copyright (c) Raymond Hill 2014-present</div>
124
128
  </div>
125
- <div class="li"><a href="https://github.com/gorhill/uBlock/wiki/Privacy-policy" data-i18n="aboutPrivacyPolicy"></a></div>
129
+ <div class="li"><a href="https://github.com/uBlockOrigin/uBOL-home/wiki/Privacy-policy" data-i18n="aboutPrivacyPolicy"></a></div>
126
130
  <div class="li"><a href="https://github.com/uBlockOrigin/uBOL-home/releases" data-i18n="aboutChangelog"></a></div>
127
131
  <div class="li"><a href="https://github.com/gorhill/uBlock" data-i18n="aboutCode"></a></div>
128
132
  <div class="li"><span data-i18n="aboutContributors"></span></div>
@@ -58,6 +58,7 @@ import {
58
58
  browser,
59
59
  localRead, localRemove, localWrite,
60
60
  runtime,
61
+ webextFlavor,
61
62
  } from './ext.js';
62
63
 
63
64
  import {
@@ -78,6 +79,7 @@ import {
78
79
  getMatchedRules,
79
80
  isSideloaded,
80
81
  toggleDeveloperMode,
82
+ ubolErr,
81
83
  ubolLog,
82
84
  } from './debug.js';
83
85
 
@@ -89,6 +91,7 @@ import {
89
91
  } from './config.js';
90
92
 
91
93
  import { dnr } from './ext-compat.js';
94
+ import { getTroubleshootingInfo } from './troubleshooting.js';
92
95
  import { registerInjectables } from './scripting-manager.js';
93
96
  import { toggleToolbarIcon } from './action.js';
94
97
 
@@ -106,6 +109,18 @@ function getCurrentVersion() {
106
109
  return runtime.getManifest().version;
107
110
  }
108
111
 
112
+ // The goal is just to be able to find out whether a specific version is older
113
+ // than another one.
114
+
115
+ function intFromVersion(version) {
116
+ const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version);
117
+ if ( match === null ) { return 0; }
118
+ const year = parseInt(match[1], 10);
119
+ const monthday = parseInt(match[2], 10);
120
+ const min = parseInt(match[3], 10);
121
+ return (year - 2022) * (1232 * 2400) + monthday * 2400 + min;
122
+ }
123
+
109
124
  /******************************************************************************/
110
125
 
111
126
  async function onPermissionsRemoved() {
@@ -176,7 +191,7 @@ function onMessage(request, sender, callback) {
176
191
  origin: 'USER',
177
192
  target: { tabId, frameIds: [ frameId ] },
178
193
  }).catch(reason => {
179
- console.log(reason);
194
+ ubolErr(reason);
180
195
  });
181
196
  return false;
182
197
  }
@@ -188,7 +203,7 @@ function onMessage(request, sender, callback) {
188
203
  origin: 'USER',
189
204
  target: { tabId, frameIds: [ frameId ] },
190
205
  }).catch(reason => {
191
- console.log(reason);
206
+ ubolErr(reason);
192
207
  });
193
208
  return false;
194
209
  }
@@ -227,7 +242,7 @@ function onMessage(request, sender, callback) {
227
242
  target: { tabId, frameIds: [ frameId ] },
228
243
  injectImmediately: true,
229
244
  }).catch(reason => {
230
- console.log(reason);
245
+ ubolErr(reason);
231
246
  }).then(( ) => {
232
247
  callback();
233
248
  });
@@ -248,15 +263,19 @@ function onMessage(request, sender, callback) {
248
263
  switch ( request.what ) {
249
264
 
250
265
  case 'applyRulesets': {
251
- enableRulesets(request.enabledRulesets).then(( ) => {
252
- rulesetConfig.enabledRulesets = request.enabledRulesets;
253
- return saveRulesetConfig();
254
- }).then(( ) => {
255
- registerInjectables();
256
- callback();
257
- return dnr.getEnabledRulesets();
258
- }).then(enabledRulesets => {
259
- broadcastMessage({ enabledRulesets });
266
+ enableRulesets(request.enabledRulesets).then(result => {
267
+ if ( result === undefined || result.error ) {
268
+ callback(result);
269
+ return;
270
+ }
271
+ rulesetConfig.enabledRulesets = result.enabledRulesets;
272
+ return saveRulesetConfig().then(( ) => {
273
+ return registerInjectables();
274
+ }).then(( ) => {
275
+ callback(result);
276
+ });
277
+ }).finally(( ) => {
278
+ broadcastMessage({ enabledRulesets: rulesetConfig.enabledRulesets });
260
279
  });
261
280
  return true;
262
281
  }
@@ -490,6 +509,12 @@ function onMessage(request, sender, callback) {
490
509
  });
491
510
  return true;
492
511
 
512
+ case 'getTroubleshootingInfo':
513
+ getTroubleshootingInfo(request.siteMode).then(info => {
514
+ callback(info);
515
+ });
516
+ return true;
517
+
493
518
  default:
494
519
  break;
495
520
  }
@@ -539,6 +564,13 @@ async function startSession() {
539
564
  // obsolete ruleset to remove.
540
565
  if ( isNewVersion ) {
541
566
  ubolLog(`Version change: ${rulesetConfig.version} => ${currentVersion}`);
567
+ // https://github.com/uBlockOrigin/uBOL-home/issues/428#issuecomment-3172663563
568
+ if ( webextFlavor === 'safari' && rulesetConfig.strictBlockMode ) {
569
+ const before = intFromVersion(rulesetConfig.version);
570
+ if ( before <= intFromVersion('2025.804.2359') ) {
571
+ rulesetConfig.strictBlockMode = false;
572
+ }
573
+ }
542
574
  rulesetConfig.version = currentVersion;
543
575
  await patchDefaultRulesets();
544
576
  saveRulesetConfig();
@@ -547,7 +579,7 @@ async function startSession() {
547
579
  const rulesetsUpdated = await enableRulesets(rulesetConfig.enabledRulesets);
548
580
 
549
581
  // We need to update the regex rules only when ruleset version changes.
550
- if ( rulesetsUpdated === false ) {
582
+ if ( rulesetsUpdated === undefined ) {
551
583
  if ( isNewVersion ) {
552
584
  updateDynamicRules();
553
585
  } else {
@@ -616,7 +648,7 @@ const isFullyInitialized = start().then(( ) => {
616
648
  localRemove('goodStart');
617
649
  return false;
618
650
  }).catch(reason => {
619
- console.trace(reason);
651
+ ubolErr(reason);
620
652
  if ( process.wakeupRun ) { return; }
621
653
  return localRead('goodStart').then(goodStart => {
622
654
  if ( goodStart === false ) {
@@ -22,6 +22,7 @@
22
22
  import {
23
23
  localRead, localWrite,
24
24
  sessionRead, sessionWrite,
25
+ webextFlavor,
25
26
  } from './ext.js';
26
27
 
27
28
  /******************************************************************************/
@@ -31,7 +32,7 @@ export const rulesetConfig = {
31
32
  enabledRulesets: [],
32
33
  autoReload: true,
33
34
  showBlockedCount: true,
34
- strictBlockMode: true,
35
+ strictBlockMode: webextFlavor !== 'safari',
35
36
  developerMode: false,
36
37
  hasBroadHostPermissions: true,
37
38
  };
@@ -24,11 +24,10 @@ import {
24
24
  localRead,
25
25
  localRemove,
26
26
  localWrite,
27
+ runtime,
28
+ sendMessage,
27
29
  } from './ext.js';
28
30
 
29
- import { getTroubleshootingInfo } from './troubleshooting.js';
30
- import { runtime } from './ext.js';
31
-
32
31
  /******************************************************************************/
33
32
 
34
33
  {
@@ -53,9 +52,14 @@ localRead('dashboard.activePane').then(pane => {
53
52
  dom.body.dataset.pane = pane;
54
53
  });
55
54
 
56
- getTroubleshootingInfo().then(config => {
57
- qs$('[data-i18n="supportS5H"] + pre').textContent = config;
55
+ // Update troubleshooting on-demand
56
+ const tsinfoObserver = new IntersectionObserver(entries => {
57
+ if ( entries.every(a => a.isIntersecting === false) ) { return; }
58
+ sendMessage({ what: 'getTroubleshootingInfo' }).then(config => {
59
+ qs$('[data-i18n="supportS5H"] + pre').textContent = config;
60
+ });
58
61
  });
62
+ tsinfoObserver.observe(qs$('[data-i18n="supportS5H"] + pre'));
59
63
 
60
64
  /******************************************************************************/
61
65
 
@@ -19,26 +19,85 @@
19
19
  Home: https://github.com/gorhill/uBlock
20
20
  */
21
21
 
22
- import { dnr, normalizeDNRRules } from './ext-compat.js';
23
- import { browser } from './ext.js';
22
+ import {
23
+ dnr,
24
+ normalizeDNRRules,
25
+ webext,
26
+ } from './ext-compat.js';
27
+
28
+ import {
29
+ sessionRead,
30
+ sessionWrite,
31
+ } from './ext.js';
24
32
 
25
33
  /******************************************************************************/
26
34
 
27
35
  const isModern = dnr.onRuleMatchedDebug instanceof Object;
28
36
 
29
37
  export const isSideloaded = (( ) => {
30
- const { permissions } = browser.runtime.getManifest();
38
+ const { permissions } = webext.runtime.getManifest();
31
39
  return permissions?.includes('declarativeNetRequestFeedback') ?? false;
32
40
  })();
33
41
 
34
42
  /******************************************************************************/
35
43
 
44
+ const CONSOLE_MAX_LINES = 32;
45
+ const consoleOutput = [];
46
+
47
+ sessionRead('console').then(before => {
48
+ if ( Array.isArray(before) === false ) { return; }
49
+ for ( const s of before.reverse() ) {
50
+ consoleOutput.unshift(s);
51
+ }
52
+ consoleTruncate();
53
+ });
54
+
55
+ const consoleTruncate = ( ) => {
56
+ if ( consoleOutput.length <= CONSOLE_MAX_LINES ) { return; }
57
+ consoleOutput.copyWithin(0, -CONSOLE_MAX_LINES);
58
+ consoleOutput.length = CONSOLE_MAX_LINES;
59
+ };
60
+
61
+ const consoleAdd = (...args) => {
62
+ if ( args.length === 0 ) { return; }
63
+ const now = new Date();
64
+ const time = [
65
+ `${now.getUTCMonth()+1}`.padStart(2, '0'),
66
+ `${now.getUTCDate()}`.padStart(2, '0'),
67
+ '.',
68
+ `${now.getUTCHours()}`.padStart(2, '0'),
69
+ `${now.getUTCMinutes()}`.padStart(2, '0'),
70
+ ].join('');
71
+ for ( let i = 0; i < args.length; i++ ) {
72
+ const s = `[${time}]${args[i]}`;
73
+ if ( Boolean(s) === false ) { continue; }
74
+ if ( s === consoleOutput.at(-1) ) { continue; }
75
+ consoleOutput.push(s);
76
+ }
77
+ consoleTruncate();
78
+ sessionWrite('console', getConsoleOutput());
79
+ }
80
+
36
81
  export const ubolLog = (...args) => {
37
82
  // Do not pollute dev console in stable releases.
38
83
  if ( isSideloaded !== true ) { return; }
39
84
  console.info('[uBOL]', ...args);
40
85
  };
41
86
 
87
+ export const ubolErr = (...args) => {
88
+ if ( Array.isArray(args) === false ) { return; }
89
+ if ( globalThis.ServiceWorkerGlobalScope ) {
90
+ consoleAdd(...args);
91
+ }
92
+ // Do not pollute dev console in stable releases.
93
+ if ( isSideloaded !== true ) { return; }
94
+ console.error('[uBOL]', ...args);
95
+ };
96
+
97
+ export const getConsoleOutput = ( ) => {
98
+ return consoleOutput.slice();
99
+ };
100
+
42
101
  /******************************************************************************/
43
102
 
44
103
  const rulesets = new Map();
@@ -27,6 +27,12 @@ export const browser = webext;
27
27
  export const i18n = browser.i18n;
28
28
  export const runtime = browser.runtime;
29
29
 
30
+ export const webextFlavor = (( ) => {
31
+ const extURL = runtime.getURL('');
32
+ if ( extURL.startsWith('safari-web-extension:') ) { return 'safari'; }
33
+ return extURL.startsWith('moz-extension:') ? 'firefox' : 'chromium';
34
+ })();
35
+
30
36
  /******************************************************************************/
31
37
 
32
38
  // The extension's service worker can be evicted at any time, so when we
@@ -19,13 +19,15 @@
19
19
  Home: https://github.com/gorhill/uBlock
20
20
  */
21
21
 
22
+ import { ubolErr } from './debug.js';
23
+
22
24
  /******************************************************************************/
23
25
 
24
26
  function fetchJSON(path) {
25
27
  return fetch(`${path}.json`).then(response =>
26
28
  response.json()
27
29
  ).catch(reason => {
28
- console.info(reason);
30
+ ubolErr(reason);
29
31
  });
30
32
  }
31
33
 
@@ -397,6 +397,8 @@ dom.on('#findInLists', 'input', searchFilterLists);
397
397
 
398
398
  const applyEnabledRulesets = (( ) => {
399
399
  const apply = async ( ) => {
400
+ dom.cl.add(dom.body, 'committing');
401
+
400
402
  const enabledRulesets = [];
401
403
  for ( const liEntry of qsa$('#lists .listEntry[data-role="leaf"][data-rulesetid]') ) {
402
404
  const checked = qs$(liEntry, 'input[type="checkbox"]:checked') !== null;
@@ -408,14 +410,17 @@ const applyEnabledRulesets = (( ) => {
408
410
 
409
411
  dom.cl.remove('#lists .listEntry.toggled', 'toggled');
410
412
 
411
- const unmodified = hashFromIterable(enabledRulesets) ===
413
+ const modified = hashFromIterable(enabledRulesets) !==
412
414
  hashFromIterable(cachedRulesetData.enabledRulesets);
413
- if ( unmodified ) { return; }
415
+ if ( modified ) {
416
+ const result = await sendMessage({
417
+ what: 'applyRulesets',
418
+ enabledRulesets,
419
+ });
420
+ dom.text('#dnrError', result?.error || '');
421
+ }
414
422
 
415
- await sendMessage({
416
- what: 'applyRulesets',
417
- enabledRulesets,
418
- });
423
+ dom.cl.remove(dom.body, 'committing');
419
424
  };
420
425
 
421
426
  let timer;
@@ -433,7 +438,11 @@ const applyEnabledRulesets = (( ) => {
433
438
  }
434
439
  timer = self.setTimeout(( ) => {
435
440
  timer = undefined;
436
- apply();
441
+ if ( dom.cl.has(dom.body, 'committing') ) {
442
+ applyEnabledRulesets();
443
+ } else {
444
+ apply();
445
+ }
437
446
  }, 997);
438
447
  }
439
448
  })();
@@ -34,6 +34,8 @@ import {
34
34
  subtractHostnameIters,
35
35
  } from './utils.js';
36
36
 
37
+ import { ubolErr } from './debug.js';
38
+
37
39
  /******************************************************************************/
38
40
 
39
41
  export async function selectorsFromCustomFilters(hostname) {
@@ -79,7 +81,7 @@ export function startCustomFilters(tabId, frameId) {
79
81
  target: { tabId, frameIds: [ frameId ] },
80
82
  injectImmediately: true,
81
83
  }).catch(reason => {
82
- console.log(reason);
84
+ ubolErr(reason);
83
85
  })
84
86
  }
85
87
 
@@ -89,7 +91,7 @@ export function terminateCustomFilters(tabId, frameId) {
89
91
  target: { tabId, frameIds: [ frameId ] },
90
92
  injectImmediately: true,
91
93
  }).catch(reason => {
92
- console.log(reason);
94
+ ubolErr(reason);
93
95
  })
94
96
  }
95
97
 
@@ -107,7 +109,7 @@ export async function injectCustomFilters(tabId, frameId, hostname) {
107
109
  origin: 'USER',
108
110
  target: { tabId, frameIds: [ frameId ] },
109
111
  }).catch(reason => {
110
- console.log(reason);
112
+ ubolErr(reason);
111
113
  })
112
114
  );
113
115
  }
@@ -119,7 +121,7 @@ export async function injectCustomFilters(tabId, frameId, hostname) {
119
121
  target: { tabId, frameIds: [ frameId ] },
120
122
  injectImmediately: true,
121
123
  }).catch(reason => {
122
- console.log(reason);
124
+ ubolErr(reason);
123
125
  })
124
126
  );
125
127
  }
@@ -178,14 +180,30 @@ export async function addCustomFilter(hostname, selector) {
178
180
  /******************************************************************************/
179
181
 
180
182
  export async function removeCustomFilter(hostname, selector) {
181
- const key = `site.${hostname}`;
183
+ const promises = [];
184
+ let hn = hostname;
185
+ while ( hn !== '' ) {
186
+ promises.push(
187
+ removeCustomFilterByKey(`site.${hn}`, selector).catch(( ) => false)
188
+ );
189
+ const pos = hn.indexOf('.');
190
+ if ( pos === -1 ) { break; }
191
+ hn = hn.slice(pos + 1);
192
+ }
193
+ const results = await Promise.all(promises);
194
+ return results.some(a => a);
195
+ }
196
+
197
+ async function removeCustomFilterByKey(key, selector) {
182
198
  const selectors = await localRead(key);
183
199
  if ( selectors === undefined ) { return false; }
184
200
  const i = selectors.indexOf(selector);
185
201
  if ( i === -1 ) { return false; }
186
202
  selectors.splice(i, 1);
187
- await selectors.length !== 0
188
- ? localWrite(key, selectors)
189
- : localRemove(key);
203
+ if ( selectors.length !== 0 ) {
204
+ await localWrite(key, selectors);
205
+ } else {
206
+ await localRemove(key);
207
+ }
190
208
  return true;
191
209
  }