@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
@@ -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() {
@@ -171,12 +186,14 @@ function onMessage(request, sender, callback) {
171
186
 
172
187
  case 'insertCSS': {
173
188
  if ( frameId === false ) { return false; }
189
+ // https://bugs.webkit.org/show_bug.cgi?id=262491
190
+ if ( frameId !== 0 && webextFlavor === 'safari' ) { return false; }
174
191
  browser.scripting.insertCSS({
175
192
  css: request.css,
176
193
  origin: 'USER',
177
194
  target: { tabId, frameIds: [ frameId ] },
178
195
  }).catch(reason => {
179
- console.log(reason);
196
+ ubolErr(`insertCSS/${reason}`);
180
197
  });
181
198
  return false;
182
199
  }
@@ -188,7 +205,7 @@ function onMessage(request, sender, callback) {
188
205
  origin: 'USER',
189
206
  target: { tabId, frameIds: [ frameId ] },
190
207
  }).catch(reason => {
191
- console.log(reason);
208
+ ubolErr(`removeCSS/${reason}`);
192
209
  });
193
210
  return false;
194
211
  }
@@ -227,7 +244,7 @@ function onMessage(request, sender, callback) {
227
244
  target: { tabId, frameIds: [ frameId ] },
228
245
  injectImmediately: true,
229
246
  }).catch(reason => {
230
- console.log(reason);
247
+ ubolErr(`executeScript/${reason}`);
231
248
  }).then(( ) => {
232
249
  callback();
233
250
  });
@@ -248,15 +265,19 @@ function onMessage(request, sender, callback) {
248
265
  switch ( request.what ) {
249
266
 
250
267
  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 });
268
+ enableRulesets(request.enabledRulesets).then(result => {
269
+ if ( result === undefined || result.error ) {
270
+ callback(result);
271
+ return;
272
+ }
273
+ rulesetConfig.enabledRulesets = result.enabledRulesets;
274
+ return saveRulesetConfig().then(( ) => {
275
+ return registerInjectables();
276
+ }).then(( ) => {
277
+ callback(result);
278
+ });
279
+ }).finally(( ) => {
280
+ broadcastMessage({ enabledRulesets: rulesetConfig.enabledRulesets });
260
281
  });
261
282
  return true;
262
283
  }
@@ -490,6 +511,12 @@ function onMessage(request, sender, callback) {
490
511
  });
491
512
  return true;
492
513
 
514
+ case 'getTroubleshootingInfo':
515
+ getTroubleshootingInfo(request.siteMode).then(info => {
516
+ callback(info);
517
+ });
518
+ return true;
519
+
493
520
  default:
494
521
  break;
495
522
  }
@@ -539,6 +566,13 @@ async function startSession() {
539
566
  // obsolete ruleset to remove.
540
567
  if ( isNewVersion ) {
541
568
  ubolLog(`Version change: ${rulesetConfig.version} => ${currentVersion}`);
569
+ // https://github.com/uBlockOrigin/uBOL-home/issues/428#issuecomment-3172663563
570
+ if ( webextFlavor === 'safari' && rulesetConfig.strictBlockMode ) {
571
+ const before = intFromVersion(rulesetConfig.version);
572
+ if ( before <= intFromVersion('2025.804.2359') ) {
573
+ rulesetConfig.strictBlockMode = false;
574
+ }
575
+ }
542
576
  rulesetConfig.version = currentVersion;
543
577
  await patchDefaultRulesets();
544
578
  saveRulesetConfig();
@@ -547,7 +581,7 @@ async function startSession() {
547
581
  const rulesetsUpdated = await enableRulesets(rulesetConfig.enabledRulesets);
548
582
 
549
583
  // We need to update the regex rules only when ruleset version changes.
550
- if ( rulesetsUpdated === false ) {
584
+ if ( rulesetsUpdated === undefined ) {
551
585
  if ( isNewVersion ) {
552
586
  updateDynamicRules();
553
587
  } else {
@@ -616,7 +650,7 @@ const isFullyInitialized = start().then(( ) => {
616
650
  localRemove('goodStart');
617
651
  return false;
618
652
  }).catch(reason => {
619
- console.trace(reason);
653
+ ubolErr(reason);
620
654
  if ( process.wakeupRun ) { return; }
621
655
  return localRead('goodStart').then(goodStart => {
622
656
  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(`fetchJSON/${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,12 @@ import {
34
34
  subtractHostnameIters,
35
35
  } from './utils.js';
36
36
 
37
+ import { ubolErr } from './debug.js';
38
+
39
+ /******************************************************************************/
40
+
41
+ const perSitePendingIO = new Map();
42
+
37
43
  /******************************************************************************/
38
44
 
39
45
  export async function selectorsFromCustomFilters(hostname) {
@@ -79,7 +85,7 @@ export function startCustomFilters(tabId, frameId) {
79
85
  target: { tabId, frameIds: [ frameId ] },
80
86
  injectImmediately: true,
81
87
  }).catch(reason => {
82
- console.log(reason);
88
+ ubolErr(`startCustomFilters/${reason}`);
83
89
  })
84
90
  }
85
91
 
@@ -89,7 +95,7 @@ export function terminateCustomFilters(tabId, frameId) {
89
95
  target: { tabId, frameIds: [ frameId ] },
90
96
  injectImmediately: true,
91
97
  }).catch(reason => {
92
- console.log(reason);
98
+ ubolErr(`terminateCustomFilters/${reason}`);
93
99
  })
94
100
  }
95
101
 
@@ -107,7 +113,7 @@ export async function injectCustomFilters(tabId, frameId, hostname) {
107
113
  origin: 'USER',
108
114
  target: { tabId, frameIds: [ frameId ] },
109
115
  }).catch(reason => {
110
- console.log(reason);
116
+ ubolErr(`injectCustomFilters/insertCSS/${reason}`);
111
117
  })
112
118
  );
113
119
  }
@@ -119,7 +125,7 @@ export async function injectCustomFilters(tabId, frameId, hostname) {
119
125
  target: { tabId, frameIds: [ frameId ] },
120
126
  injectImmediately: true,
121
127
  }).catch(reason => {
122
- console.log(reason);
128
+ ubolErr(`injectCustomFilters/executeScript/${reason}`);
123
129
  })
124
130
  );
125
131
  }
@@ -130,6 +136,9 @@ export async function injectCustomFilters(tabId, frameId, hostname) {
130
136
  /******************************************************************************/
131
137
 
132
138
  export async function registerCustomFilters(context) {
139
+ if ( perSitePendingIO.size !== 0 ) {
140
+ await Promise.all(Array.from(perSitePendingIO.values()));
141
+ }
133
142
  const siteKeys = await getAllCustomFilterKeys();
134
143
  if ( siteKeys.length === 0 ) { return; }
135
144
 
@@ -166,6 +175,20 @@ export async function registerCustomFilters(context) {
166
175
  /******************************************************************************/
167
176
 
168
177
  export async function addCustomFilter(hostname, selector) {
178
+ const pending = perSitePendingIO.get(hostname);
179
+ const promise = pending
180
+ ? pending.then(( ) => addCustomFilterByHostname(hostname, selector))
181
+ : addCustomFilterByHostname(hostname, selector);
182
+ perSitePendingIO.set(hostname, promise);
183
+ promise.then(( ) => {
184
+ if ( promise !== perSitePendingIO.get(hostname) ) { return; }
185
+ perSitePendingIO.delete(hostname);
186
+ });
187
+ return promise;
188
+ }
189
+
190
+ async function addCustomFilterByHostname(hostname, selector) {
191
+ if ( hostname === '' ) { return false; }
169
192
  const key = `site.${hostname}`;
170
193
  const selectors = await localRead(key) || [];
171
194
  if ( selectors.includes(selector) ) { return false; }
@@ -178,14 +201,45 @@ export async function addCustomFilter(hostname, selector) {
178
201
  /******************************************************************************/
179
202
 
180
203
  export async function removeCustomFilter(hostname, selector) {
204
+ const promises = [];
205
+ let hn = hostname;
206
+ while ( hn !== '' ) {
207
+ promises.push(removeCustomFilterByHostname(hn, selector));
208
+ const pos = hn.indexOf('.');
209
+ if ( pos === -1 ) { break; }
210
+ hn = hn.slice(pos + 1);
211
+ }
212
+ const results = await Promise.all(promises);
213
+ return results.some(a => a);
214
+ }
215
+
216
+ async function removeCustomFilterByHostname(hostname, selector) {
217
+ const pending = perSitePendingIO.get(hostname);
181
218
  const key = `site.${hostname}`;
219
+ const promise = pending
220
+ ? pending.then(( ) => removeCustomFilterByKey(key, selector))
221
+ : removeCustomFilterByKey(key, selector);
222
+ perSitePendingIO.set(hostname, promise);
223
+ promise.then(( ) => {
224
+ if ( promise !== perSitePendingIO.get(hostname) ) { return; }
225
+ perSitePendingIO.delete(hostname);
226
+ });
227
+ return promise;
228
+ }
229
+
230
+ async function removeCustomFilterByKey(key, selector) {
182
231
  const selectors = await localRead(key);
183
232
  if ( selectors === undefined ) { return false; }
184
- const i = selectors.indexOf(selector);
185
- if ( i === -1 ) { return false; }
233
+ let i = selectors.indexOf(selector);
234
+ if ( i === -1 ) {
235
+ i = selectors.indexOf(`0${selector}`);
236
+ if ( i === -1 ) { return false; }
237
+ }
186
238
  selectors.splice(i, 1);
187
- await selectors.length !== 0
188
- ? localWrite(key, selectors)
189
- : localRemove(key);
239
+ if ( selectors.length !== 0 ) {
240
+ await localWrite(key, selectors);
241
+ } else {
242
+ await localRemove(key);
243
+ }
190
244
  return true;
191
245
  }