@browserless.io/browserless 2.12.0-beta-3 → 2.12.0-beta-4

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 (82) hide show
  1. package/build/browsers/chromium.cdp.d.ts +1 -1
  2. package/build/browsers/chromium.cdp.js +2 -2
  3. package/build/browsers/chromium.playwright.d.ts +1 -1
  4. package/build/browsers/chromium.playwright.js +2 -2
  5. package/build/browsers/firefox.playwright.d.ts +1 -1
  6. package/build/browsers/firefox.playwright.js +2 -2
  7. package/build/browsers/index.d.ts +3 -2
  8. package/build/browsers/index.js +36 -17
  9. package/build/browsers/webkit.playwright.d.ts +1 -1
  10. package/build/browsers/webkit.playwright.js +4 -4
  11. package/build/routes/chrome/http/pdf.post.body.json +8 -8
  12. package/build/routes/chrome/http/scrape.post.body.json +8 -8
  13. package/build/routes/chrome/http/screenshot.post.body.json +8 -8
  14. package/build/routes/chromium/http/content.post.body.json +8 -8
  15. package/build/routes/chromium/http/pdf.post.body.json +8 -8
  16. package/build/routes/chromium/http/scrape.post.body.json +8 -8
  17. package/build/types.d.ts +1 -1
  18. package/extensions/ublock/_locales/eu/messages.json +4 -4
  19. package/extensions/ublock/_locales/hi/messages.json +5 -5
  20. package/extensions/ublock/_locales/kn/messages.json +11 -11
  21. package/extensions/ublock/_locales/nb/messages.json +2 -2
  22. package/extensions/ublock/_locales/no/messages.json +2 -2
  23. package/extensions/ublock/_locales/ro/messages.json +1 -1
  24. package/extensions/ublock/_locales/sv/messages.json +1 -1
  25. package/extensions/ublock/_locales/zh_CN/messages.json +2 -2
  26. package/extensions/ublock/assets/assets.json +3 -8
  27. package/extensions/ublock/assets/resources/scriptlets.js +128 -31
  28. package/extensions/ublock/assets/thirdparties/easylist/easylist.txt +4870 -3560
  29. package/extensions/ublock/assets/thirdparties/easylist/easyprivacy.txt +662 -173
  30. package/extensions/ublock/assets/thirdparties/pgl.yoyo.org/as/serverlist +10 -42
  31. package/extensions/ublock/assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat +241 -80
  32. package/extensions/ublock/assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt +2093 -1224
  33. package/extensions/ublock/assets/ublock/badlists.txt +2 -0
  34. package/extensions/ublock/assets/ublock/badware.min.txt +408 -287
  35. package/extensions/ublock/assets/ublock/filters.min.txt +947 -645
  36. package/extensions/ublock/assets/ublock/privacy.min.txt +43 -8
  37. package/extensions/ublock/assets/ublock/quick-fixes.min.txt +55 -93
  38. package/extensions/ublock/assets/ublock/unbreak.min.txt +52 -19
  39. package/extensions/ublock/css/1p-filters.css +2 -0
  40. package/extensions/ublock/css/codemirror.css +2 -2
  41. package/extensions/ublock/css/dashboard.css +2 -5
  42. package/extensions/ublock/css/epicker-ui.css +3 -3
  43. package/extensions/ublock/css/fa-icons.css +3 -0
  44. package/extensions/ublock/css/logger-ui-inspector.css +1 -0
  45. package/extensions/ublock/css/logger-ui.css +44 -32
  46. package/extensions/ublock/img/fontawesome/fontawesome-defs.svg +1 -0
  47. package/extensions/ublock/js/3p-filters.js +4 -5
  48. package/extensions/ublock/js/biditrie.js +16 -11
  49. package/extensions/ublock/js/cachestorage.js +37 -37
  50. package/extensions/ublock/js/contentscript-extra.js +0 -2
  51. package/extensions/ublock/js/contentscript.js +1 -6
  52. package/extensions/ublock/js/epicker-ui.js +28 -36
  53. package/extensions/ublock/js/fa-icons.js +1 -0
  54. package/extensions/ublock/js/hntrie.js +19 -13
  55. package/extensions/ublock/js/logger-ui-inspector.js +6 -13
  56. package/extensions/ublock/js/logger-ui.js +264 -264
  57. package/extensions/ublock/js/s14e-serializer.js +267 -264
  58. package/extensions/ublock/js/scriptlet-filtering.js +12 -18
  59. package/extensions/ublock/js/scriptlets/dom-inspector.js +1 -5
  60. package/extensions/ublock/js/scriptlets/epicker.js +53 -59
  61. package/extensions/ublock/js/start.js +0 -8
  62. package/extensions/ublock/js/storage.js +2 -9
  63. package/extensions/ublock/js/vapi-background.js +19 -20
  64. package/extensions/ublock/js/vapi-common.js +2 -7
  65. package/extensions/ublock/js/vapi.js +0 -4
  66. package/extensions/ublock/js/webext.js +23 -15
  67. package/extensions/ublock/logger-ui.html +24 -15
  68. package/extensions/ublock/manifest.json +2 -3
  69. package/package.json +2 -2
  70. package/src/browsers/chromium.cdp.ts +2 -2
  71. package/src/browsers/chromium.playwright.ts +2 -2
  72. package/src/browsers/firefox.playwright.ts +2 -3
  73. package/src/browsers/index.ts +49 -21
  74. package/src/browsers/webkit.playwright.ts +4 -4
  75. package/src/routes/chrome/tests/websocket.spec.ts +2 -2
  76. package/src/routes/chromium/tests/websocket.spec.ts +2 -2
  77. package/src/routes/firefox/tests/websocket.spec.ts +2 -4
  78. package/src/routes/webkit/tests/websocket.spec.ts +2 -3
  79. package/src/types.ts +1 -1
  80. package/src/utils.ts +1 -1
  81. package/static/docs/swagger.json +1 -1
  82. package/static/docs/swagger.min.json +1 -1
@@ -73,8 +73,8 @@ html#ublock0-epicker,
73
73
  #ublock0-epicker section .codeMirrorContainer {
74
74
  border: none;
75
75
  box-sizing: border-box;
76
- height: 6em;
77
- max-height: min(6em, 10vh);
76
+ height: 10em;
77
+ max-height: min(10em, 10vh);
78
78
  min-height: 1em;
79
79
  padding: 2px;
80
80
  width: 100%;
@@ -177,7 +177,7 @@ html#ublock0-epicker,
177
177
  overflow: hidden;
178
178
  }
179
179
  #ublock0-epicker #candidateFilters {
180
- max-height: min(12em, 18vh);
180
+ max-height: min(18em, 18vh);
181
181
  overflow-y: auto;
182
182
  }
183
183
  #ublock0-epicker .changeFilter > li > span:nth-of-type(1) {
@@ -101,6 +101,9 @@
101
101
  .fa-icon > .fa-icon_zoom-out {
102
102
  width: calc(1em * 1664 / 1792);
103
103
  }
104
+ .fa-icon > .fa-icon_terminal {
105
+ width: calc(1em * 1651 / 1792);
106
+ }
104
107
  .fa-icon > .fa-icon_magic {
105
108
  width: calc(1em * 1637 / 1792);
106
109
  }
@@ -1,5 +1,6 @@
1
1
  #domInspector {
2
2
  display: none;
3
+ overflow: hidden;
3
4
  }
4
5
  #inspectors.dom #domInspector {
5
6
  display: flex;
@@ -3,7 +3,7 @@ body {
3
3
  flex-direction: column;
4
4
  height: 100vh;
5
5
  height: 100svh;
6
- overflow: hidden;
6
+ overflow-y: hidden;
7
7
  width: 100vw;
8
8
  }
9
9
  textarea {
@@ -63,19 +63,28 @@ textarea {
63
63
  => https://devhints.io/css-system-font-stack
64
64
  */
65
65
  #inspectors {
66
+ display: flex;
67
+ flex-direction: column;
66
68
  flex-grow: 1;
69
+ flex-wrap: nowrap;
67
70
  font-family: "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
71
+ overflow: hidden;
68
72
  position: relative;
69
73
  }
70
74
  .inspector {
71
- border-top: 1px solid #ccc;
75
+ border-top: 1px solid var(--border-4);
72
76
  display: flex;
73
77
  flex-direction: column;
78
+ height: 100%;
79
+ }
80
+ .inspector .permatoolbar {
81
+ border-bottom: 1px solid var(--border-1);
74
82
  }
75
83
  .vscrollable {
76
84
  direction: ltr;
77
85
  flex-grow: 1;
78
86
  font-size: var(--font-size-smaller);
87
+ height: 1px; /* necessary for proper space allocation by flex boxes */
79
88
  overflow-x: hidden;
80
89
  overflow-y: auto;
81
90
  }
@@ -106,7 +115,6 @@ textarea {
106
115
  }
107
116
  #netInspector #filterExprGroup {
108
117
  display: flex;
109
- margin: 0 1em;
110
118
  position: relative;
111
119
  }
112
120
  #netInspector #filterButton {
@@ -295,7 +303,7 @@ body[dir="rtl"] #netInspector #filterExprPicker {
295
303
  display: inline-block;
296
304
  height: 100%;
297
305
  overflow: hidden;
298
- padding: 0.2em;
306
+ padding: 2px;
299
307
  vertical-align: middle;
300
308
  white-space: nowrap;
301
309
  word-break: break-all;
@@ -391,7 +399,6 @@ body[dir="rtl"] #vwRenderer .logEntry > .fields > span:first-child {
391
399
  #vwRenderer .logEntry > .fields > span:nth-of-type(8) a {
392
400
  align-items: center;
393
401
  background-color: dimgray;
394
- bottom: 0;
395
402
  color: white;
396
403
  display: none;
397
404
  height: min(100%, 1.5em);
@@ -401,6 +408,7 @@ body[dir="rtl"] #vwRenderer .logEntry > .fields > span:first-child {
401
408
  position: absolute;
402
409
  right: 0;
403
410
  text-decoration: none;
411
+ top: 0;
404
412
  width: 1.5em;
405
413
  }
406
414
  #netInspector.vExpanded #vwRenderer .logEntry > .fields > span:nth-of-type(8) a {
@@ -462,21 +470,13 @@ body[dir="rtl"] #vwRenderer .logEntry > .fields > span:first-child {
462
470
  width: 100%;
463
471
  }
464
472
 
465
- #netInspector .entryTools {
473
+ #inspectors .entryTools {
466
474
  background-color: var(--surface-0);
467
- filter: drop-shadow(2px 4px 6px black);
468
- max-width: 640px;
469
- min-width: min(100%, 640px);
470
- position: absolute;
471
- z-index: 2;
475
+ flex-basis: 50%;
472
476
  }
473
- #netInspector .entryTools:empty {
477
+ #inspectors .entryTools:empty {
474
478
  display: none;
475
479
  }
476
- #netInspector .entryTools .dialogControls {
477
- display: flex;
478
- justify-content: stretch;
479
- }
480
480
 
481
481
  .closeButton {
482
482
  stroke: var(--ink-1);
@@ -497,15 +497,28 @@ body[dir="rtl"] .closeButton {
497
497
  .closeButton > * {
498
498
  pointer-events: none;
499
499
  }
500
- .moveBand {
501
- background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAFElEQVQI12NgwAfKy8v/M5ANYLoBshgEyQo6H9UAAAAASUVORK5CYII=');
502
- cursor: grab;
503
- flex-grow: 1;
504
- opacity: 0.5;
500
+
501
+ #inspectors #infoInspector {
502
+ flex-basis: 200%;
503
+ }
504
+ #inspectors:not(.console) #infoInspector {
505
+ display: none;
506
+ }
507
+ #inspectors #infoInspector .vscrollable {
508
+ font-family: monospace;
509
+ font-size: small;
510
+ }
511
+ #inspectors #infoInspector .vscrollable > div {
512
+ border-bottom: 1px dotted gray;
513
+ padding: 0.2em;
514
+ white-space: pre-wrap;
515
+ word-break: break-all;
516
+ }
517
+ #inspectors #infoInspector .vscrollable > div:first-of-type {
518
+ }
519
+ #inspectors #infoInspector .vscrollable > div[data-type="error"] {
520
+ color: var(--cm-negative);
505
521
  }
506
- .moving .moveBand {
507
- cursor: grabbing;
508
- }
509
522
 
510
523
  #popupContainer {
511
524
  background-color: var(--surface-1);
@@ -613,9 +626,10 @@ body[dir="rtl"] .closeButton {
613
626
  align-items: center;
614
627
  border-bottom: 1px solid var(--border-4);
615
628
  display: flex;
629
+ justify-content: space-between;
616
630
  line-height: 2;
617
631
  }
618
- .netFilteringDialog > .headers > .header {
632
+ .netFilteringDialog > .headers .header {
619
633
  border: 1px solid var(--border-2);
620
634
  border-bottom: 1px solid var(--border-4);
621
635
  border-top-left-radius: 4px;
@@ -628,9 +642,9 @@ body[dir="rtl"] .closeButton {
628
642
  position: relative;
629
643
  top: 1px;
630
644
  }
631
- .netFilteringDialog[data-pane="details"] > .headers > [data-pane="details"],
632
- .netFilteringDialog[data-pane="dynamic"] > .headers > [data-pane="dynamic"],
633
- .netFilteringDialog[data-pane="static"] > .headers > [data-pane="static"] {
645
+ .netFilteringDialog[data-pane="details"] > .headers [data-pane="details"],
646
+ .netFilteringDialog[data-pane="dynamic"] > .headers [data-pane="dynamic"],
647
+ .netFilteringDialog[data-pane="static"] > .headers [data-pane="static"] {
634
648
  background-color: var(--surface-0);
635
649
  border-color: var(--border-4);
636
650
  border-bottom: 1px solid transparent;
@@ -654,11 +668,11 @@ body[dir="rtl"] .closeButton {
654
668
  color: var(--ink-1);
655
669
  fill: var(--ink-1);
656
670
  }
657
- .netFilteringDialog.extendedRealm > .headers > .dynamic,
671
+ .netFilteringDialog.extendedRealm > .headers .dynamic,
658
672
  .netFilteringDialog.extendedRealm > .panes > .dynamic {
659
673
  display: none;
660
674
  }
661
- .netFilteringDialog.extendedRealm > .headers > .static,
675
+ .netFilteringDialog.extendedRealm > .headers .static,
662
676
  .netFilteringDialog.extendedRealm > .panes > .static {
663
677
  display: none;
664
678
  }
@@ -875,8 +889,6 @@ body.dirty .netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules {
875
889
  }
876
890
  .netFilteringDialog > div.panes > div.static textarea {
877
891
  height: 6em;
878
- max-height: 20vh;
879
- min-height: 10vh;
880
892
  word-break: break-all;
881
893
  }
882
894
  .netFilteringDialog > div.panes > div.static > div:nth-of-type(2) {
@@ -68,6 +68,7 @@ License - https://github.com/FortAwesome/Font-Awesome/tree/a8386aae19e200ddb0f68
68
68
  <symbol id="search" viewBox="0 0 1664 1664"><path d="M 1152,704 Q 1152,519 1020.5,387.5 889,256 704,256 519,256 387.5,387.5 256,519 256,704 256,889 387.5,1020.5 519,1152 704,1152 889,1152 1020.5,1020.5 1152,889 1152,704 Z m 512,832 q 0,52 -38,90 -38,38 -90,38 -54,0 -90,-38 L 1103,1284 Q 924,1408 704,1408 561,1408 430.5,1352.5 300,1297 205.5,1202.5 111,1108 55.5,977.5 0,847 0,704 0,561 55.5,430.5 111,300 205.5,205.5 300,111 430.5,55.5 561,0 704,0 q 143,0 273.5,55.5 130.5,55.5 225,150 94.5,94.5 150,225 55.5,130.5 55.5,273.5 0,220 -124,399 l 343,343 q 37,37 37,90 z"/></symbol>
69
69
  <symbol id="sliders" viewBox="0 0 1536 1408"><path d="m 352,1152 0,128 -352,0 0,-128 352,0 z m 352,-128 q 26,0 45,19 19,19 19,45 l 0,256 q 0,26 -19,45 -19,19 -45,19 l -256,0 q -26,0 -45,-19 -19,-19 -19,-45 l 0,-256 q 0,-26 19,-45 19,-19 45,-19 l 256,0 z m 160,-384 0,128 -864,0 0,-128 864,0 z m -640,-512 0,128 -224,0 0,-128 224,0 z m 1312,1024 0,128 -736,0 0,-128 736,0 z M 576,0 q 26,0 45,19 19,19 19,45 l 0,256 q 0,26 -19,45 -19,19 -45,19 l -256,0 q -26,0 -45,-19 -19,-19 -19,-45 L 256,64 Q 256,38 275,19 294,0 320,0 l 256,0 z m 640,512 q 26,0 45,19 19,19 19,45 l 0,256 q 0,26 -19,45 -19,19 -45,19 l -256,0 q -26,0 -45,-19 -19,-19 -19,-45 l 0,-256 q 0,-26 19,-45 19,-19 45,-19 l 256,0 z m 320,128 0,128 -224,0 0,-128 224,0 z m 0,-512 0,128 -864,0 0,-128 864,0 z"/></symbol>
70
70
  <symbol id="spinner" viewBox="0 0 1664 1728"><path d="m 462,1394 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -52,0 -90,-38 -38,-38 -38,-90 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 37.5,37.5 37.5,90.5 z m 498,206 q 0,53 -37.5,90.5 Q 885,1728 832,1728 779,1728 741.5,1690.5 704,1653 704,1600 q 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 Q 960,1547 960,1600 Z M 256,896 q 0,53 -37.5,90.5 Q 181,1024 128,1024 75,1024 37.5,986.5 0,949 0,896 0,843 37.5,805.5 75,768 128,768 q 53,0 90.5,37.5 Q 256,843 256,896 Z m 1202,498 q 0,52 -38,90 -38,38 -90,38 -53,0 -90.5,-37.5 -37.5,-37.5 -37.5,-90.5 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 37.5,37.5 37.5,90.5 z M 494,398 q 0,66 -47,113 -47,47 -113,47 -66,0 -113,-47 -47,-47 -47,-113 0,-66 47,-113 47,-47 113,-47 66,0 113,47 47,47 47,113 z m 1170,498 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -53,0 -90.5,-37.5 Q 1408,949 1408,896 q 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 Q 1664,843 1664,896 Z M 1024,192 q 0,80 -56,136 -56,56 -136,56 -80,0 -136,-56 -56,-56 -56,-136 0,-80 56,-136 56,-56 136,-56 80,0 136,56 56,56 56,136 z m 530,206 q 0,93 -66,158.5 -66,65.5 -158,65.5 -93,0 -158.5,-65.5 Q 1106,491 1106,398 q 0,-92 65.5,-158 65.5,-66 158.5,-66 92,0 158,66 66,66 66,158 z"/></symbol>
71
+ <symbol id="terminal" viewBox="0 0 1651 1075"><path d="m572 522-466 466q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l393-393-393-393q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l466 466q10 10 10 23t-10 23zm1079 457v64q0 14-9 23t-23 9h-960q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h960q14 0 23 9t9 23z"/></symbol>
71
72
  <symbol id="times" viewBox="0 0 1188 1188"><path d="m 1188,956 q 0,40 -28,68 l -136,136 q -28,28 -68,28 -40,0 -68,-28 L 594,866 300,1160 q -28,28 -68,28 -40,0 -68,-28 L 28,1024 Q 0,996 0,956 0,916 28,888 L 322,594 28,300 Q 0,272 0,232 0,192 28,164 L 164,28 Q 192,0 232,0 272,0 300,28 L 594,322 888,28 q 28,-28 68,-28 40,0 68,28 l 136,136 q 28,28 28,68 0,40 -28,68 l -294,294 294,294 q 28,28 28,68 z"/></symbol>
72
73
  <symbol id="trash-o" viewBox="0 0 1408 1536"><path d="m 512,608 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 256,0 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 256,0 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 128,724 V 384 H 256 v 948 q 0,22 7,40.5 7,18.5 14.5,27 7.5,8.5 10.5,8.5 h 832 q 3,0 10.5,-8.5 7.5,-8.5 14.5,-27 7,-18.5 7,-40.5 z M 480,256 H 928 L 880,139 q -7,-9 -17,-11 H 546 q -10,2 -17,11 z m 928,32 v 64 q 0,14 -9,23 -9,9 -23,9 h -96 v 948 q 0,83 -47,143.5 -47,60.5 -113,60.5 H 288 q -66,0 -113,-58.5 Q 128,1419 128,1336 V 384 H 32 Q 18,384 9,375 0,366 0,352 v -64 q 0,-14 9,-23 9,-9 23,-9 H 341 L 411,89 Q 426,52 465,26 504,0 544,0 h 320 q 40,0 79,26 39,26 54,63 l 70,167 h 309 q 14,0 23,9 9,9 9,23 z"/></symbol>
73
74
  <symbol id="undo" viewBox="0 0 1536 1536"><path d="m 1536,768 q 0,156 -61,298 -61,142 -164,245 -103,103 -245,164 -142,61 -298,61 -172,0 -327,-72.5 Q 286,1391 177,1259 q -7,-10 -6.5,-22.5 0.5,-12.5 8.5,-20.5 l 137,-138 q 10,-9 25,-9 16,2 23,12 73,95 179,147 106,52 225,52 104,0 198.5,-40.5 Q 1061,1199 1130,1130 1199,1061 1239.5,966.5 1280,872 1280,768 1280,664 1239.5,569.5 1199,475 1130,406 1061,337 966.5,296.5 872,256 768,256 670,256 580,291.5 490,327 420,393 l 137,138 q 31,30 14,69 -17,40 -59,40 H 64 Q 38,640 19,621 0,602 0,576 V 128 Q 0,86 40,69 79,52 109,83 L 239,212 Q 346,111 483.5,55.5 621,0 768,0 q 156,0 298,61 142,61 245,164 103,103 164,245 61,142 61,298 z"/></symbol>
@@ -559,21 +559,20 @@ const selectFilterLists = async ( ) => {
559
559
  const textarea = qs$('#lists .listEntry[data-role="import"].expanded textarea');
560
560
  if ( textarea === null ) { return ''; }
561
561
  const lists = listsetDetails.available;
562
- const lines = textarea.value.split(/\s+\n|\s+/);
562
+ const lines = textarea.value.split(/\s+/);
563
563
  const after = [];
564
564
  for ( const line of lines ) {
565
+ after.push(line);
565
566
  if ( /^https?:\/\//.test(line) === false ) { continue; }
566
567
  for ( const [ listkey, list ] of Object.entries(lists) ) {
567
568
  if ( list.content !== 'filters' ) { continue; }
568
569
  if ( list.contentURL === undefined ) { continue; }
569
- if ( list.contentURL.includes(line) === false ) {
570
- after.push(line);
571
- continue;
572
- }
570
+ if ( list.contentURL.includes(line) === false ) { continue; }
573
571
  const groupkey = list.group2 || list.group;
574
572
  const listEntry = qs$(`[data-key="${groupkey}"] [data-key="${listkey}"]`);
575
573
  if ( listEntry === null ) { break; }
576
574
  toggleFilterList(listEntry, true);
575
+ after.pop();
577
576
  break;
578
577
  }
579
578
  }
@@ -19,10 +19,6 @@
19
19
  Home: https://github.com/gorhill/uBlock
20
20
  */
21
21
 
22
- /* globals WebAssembly, vAPI */
23
-
24
- 'use strict';
25
-
26
22
  /*******************************************************************************
27
23
 
28
24
  A BidiTrieContainer is mostly a large buffer in which distinct but related
@@ -124,6 +120,15 @@ const BCELL_EXTRA_MAX = 0x00FFFFFF;
124
120
  const toSegmentInfo = (aL, l, r) => ((r - l) << 24) | (aL + l);
125
121
  const roundToPageSize = v => (v + PAGE_SIZE-1) & ~(PAGE_SIZE-1);
126
122
 
123
+ // http://www.cse.yorku.ca/~oz/hash.html#djb2
124
+ const i32Checksum = (buf32) => {
125
+ const n = buf32.length;
126
+ let hash = 177573 ^ n;
127
+ for ( let i = 0; i < n; i++ ) {
128
+ hash = (hash << 5) + hash ^ buf32[i];
129
+ }
130
+ return hash;
131
+ };
127
132
 
128
133
  class BidiTrieContainer {
129
134
 
@@ -577,18 +582,18 @@ class BidiTrieContainer {
577
582
  }
578
583
 
579
584
  toSelfie() {
580
- return this.buf32.subarray(
581
- 0,
582
- this.buf32[CHAR1_SLOT] + 3 >>> 2
583
- );
585
+ const buf32 = this.buf32.subarray(0, this.buf32[CHAR1_SLOT] + 3 >>> 2);
586
+ return { buf32, checksum: i32Checksum(buf32) };
584
587
  }
585
588
 
586
589
  fromSelfie(selfie) {
587
- if ( selfie instanceof Uint32Array === false ) { return false; }
588
- let byteLength = selfie.length << 2;
590
+ if ( selfie instanceof Object === false ) { return false; }
591
+ if ( selfie.buf32 instanceof Uint32Array === false ) { return false; }
592
+ if ( selfie.checksum !== i32Checksum(selfie.buf32) ) { return false; }
593
+ const byteLength = selfie.buf32.length << 2;
589
594
  if ( byteLength === 0 ) { return false; }
590
595
  this.reallocateBuf(byteLength);
591
- this.buf32.set(selfie);
596
+ this.buf32.set(selfie.buf32);
592
597
  return true;
593
598
  }
594
599
 
@@ -23,7 +23,6 @@
23
23
 
24
24
  import * as s14e from './s14e-serializer.js';
25
25
 
26
- import lz4Codec from './lz4.js';
27
26
  import { ubolog } from './console.js';
28
27
  import webext from './webext.js';
29
28
  import µb from './background.js';
@@ -32,6 +31,7 @@ import µb from './background.js';
32
31
 
33
32
  const STORAGE_NAME = 'uBlock0CacheStorage';
34
33
  const extensionStorage = webext.storage.local;
34
+ const pendingWrite = new Map();
35
35
 
36
36
  const keysFromGetArg = arg => {
37
37
  if ( arg === null || arg === undefined ) { return []; }
@@ -58,8 +58,18 @@ const hasOwnProperty = (o, p) =>
58
58
 
59
59
  const cacheStorage = (( ) => {
60
60
 
61
- const exGet = (api, wanted, outbin) => {
62
- return api.get(wanted).then(inbin => {
61
+ const exGet = async (api, wanted, outbin) => {
62
+ ubolog('cacheStorage.get:', api.name || 'storage.local', wanted.join());
63
+ const missing = [];
64
+ for ( const key of wanted ) {
65
+ if ( pendingWrite.has(key) ) {
66
+ outbin[key] = pendingWrite.get(key);
67
+ } else {
68
+ missing.push(key);
69
+ }
70
+ }
71
+ if ( missing.length === 0 ) { return; }
72
+ return api.get(missing).then(inbin => {
63
73
  inbin = inbin || {};
64
74
  const found = Object.keys(inbin);
65
75
  Object.assign(outbin, inbin);
@@ -139,16 +149,27 @@ const cacheStorage = (( ) => {
139
149
  async set(rawbin) {
140
150
  const keys = Object.keys(rawbin);
141
151
  if ( keys.length === 0 ) { return; }
142
- const serializedbin = {};
143
- const promises = [];
152
+ ubolog('cacheStorage.set:', keys.join());
144
153
  for ( const key of keys ) {
145
- promises.push(compress(serializedbin, key, rawbin[key]));
154
+ pendingWrite.set(key, rawbin[key]);
146
155
  }
147
- await Promise.all(promises);
148
- cacheAPIs[fastCache].set(rawbin, serializedbin);
149
- return extensionStorage.set(serializedbin).catch(reason => {
156
+ try {
157
+ const serializedbin = {};
158
+ const promises = [];
159
+ for ( const key of keys ) {
160
+ promises.push(compress(serializedbin, key, rawbin[key]));
161
+ }
162
+ await Promise.all(promises);
163
+ await Promise.all([
164
+ cacheAPIs[fastCache].set(rawbin, serializedbin),
165
+ extensionStorage.set(serializedbin),
166
+ ]);
167
+ } catch(reason) {
150
168
  ubolog(reason);
151
- });
169
+ }
170
+ for ( const key of keys ) {
171
+ pendingWrite.delete(key);
172
+ }
152
173
  },
153
174
 
154
175
  remove(...args) {
@@ -295,6 +316,7 @@ const cacheAPI = (( ) => {
295
316
  };
296
317
 
297
318
  return {
319
+ name: 'cacheAPI',
298
320
  async get(arg) {
299
321
  const keys = keysFromGetArg(arg);
300
322
  if ( keys === undefined ) { return; }
@@ -393,6 +415,7 @@ const memoryStorage = (( ) => {
393
415
  };
394
416
 
395
417
  return {
418
+ name: 'memoryStorage',
396
419
  get(...args) {
397
420
  return sessionStorage.get(...args).then(bin => {
398
421
  return bin;
@@ -491,25 +514,6 @@ const idbStorage = (( ) => {
491
514
  return /^cache\/(compiled|selfie)\//.test(key);
492
515
  };
493
516
 
494
- const fromBlob = data => {
495
- if ( data instanceof Blob === false ) {
496
- return Promise.resolve(data);
497
- }
498
- return new Promise(resolve => {
499
- const blobReader = new FileReader();
500
- blobReader.onloadend = ev => {
501
- resolve(new Uint8Array(ev.target.result));
502
- };
503
- blobReader.readAsArrayBuffer(data);
504
- });
505
- };
506
-
507
- const decompress = (key, value) => {
508
- return lz4Codec.decode(value, fromBlob).then(value => {
509
- return { key, value };
510
- });
511
- };
512
-
513
517
  const getAllEntries = async function() {
514
518
  const db = await getDb();
515
519
  if ( db === null ) { return []; }
@@ -527,9 +531,7 @@ const idbStorage = (( ) => {
527
531
  const cursor = ev.target && ev.target.result;
528
532
  if ( !cursor ) { return; }
529
533
  const { key, value } = cursor.value;
530
- if ( value instanceof Blob ) {
531
- entries.push(decompress(key, value));
532
- } else {
534
+ if ( value instanceof Blob === false ) {
533
535
  entries.push({ key, value });
534
536
  }
535
537
  cursor.continue();
@@ -576,11 +578,8 @@ const idbStorage = (( ) => {
576
578
  if ( typeof result !== 'object' ) { return; }
577
579
  if ( result === null ) { return; }
578
580
  const { key, value } = result;
579
- if ( value instanceof Blob ) {
580
- entries.push(decompress(key, value));
581
- } else {
582
- entries.push({ key, value });
583
- }
581
+ if ( value instanceof Blob ) { return; }
582
+ entries.push({ key, value });
584
583
  };
585
584
  const transaction = db.transaction(STORAGE_NAME, 'readonly');
586
585
  transaction.oncomplete =
@@ -656,6 +655,7 @@ const idbStorage = (( ) => {
656
655
  };
657
656
 
658
657
  return {
658
+ name: 'idbStorage',
659
659
  async get(argbin) {
660
660
  const keys = keysFromGetArg(argbin);
661
661
  if ( keys === undefined ) { return; }
@@ -19,8 +19,6 @@
19
19
  Home: https://github.com/gorhill/uBlock
20
20
  */
21
21
 
22
- 'use strict';
23
-
24
22
  if (
25
23
  typeof vAPI === 'object' &&
26
24
  typeof vAPI.DOMProceduralFilterer !== 'object'
@@ -19,8 +19,6 @@
19
19
  Home: https://github.com/gorhill/uBlock
20
20
  */
21
21
 
22
- 'use strict';
23
-
24
22
  /*******************************************************************************
25
23
 
26
24
  +--> domCollapser
@@ -103,7 +101,7 @@
103
101
  // https://github.com/chrisaljoudi/uBlock/issues/456
104
102
  // https://github.com/gorhill/uBlock/issues/2029
105
103
 
106
- // >>>>>>>> start of HUGE-IF-BLOCK
104
+ // >>>>>>>> start of HUGE-IF-BLOCK
107
105
  if ( typeof vAPI === 'object' && !vAPI.contentScript ) {
108
106
 
109
107
  /******************************************************************************/
@@ -1050,7 +1048,6 @@ vAPI.DOMFilterer = class {
1050
1048
  const hashes = [];
1051
1049
  const nodes = pendingNodes;
1052
1050
  const deadline = t0 + 4;
1053
- let processed = 0;
1054
1051
  let scanned = 0;
1055
1052
  for (;;) {
1056
1053
  const n = nextPendingNodes();
@@ -1065,10 +1062,8 @@ vAPI.DOMFilterer = class {
1065
1062
  classesFromNode(node, hashes);
1066
1063
  scanned += 1;
1067
1064
  }
1068
- processed += n;
1069
1065
  if ( performance.now() >= deadline ) { break; }
1070
1066
  }
1071
- //console.info(`[domSurveyor][${hostname}] Surveyed ${scanned}/${processed} nodes in ${(performance.now()-t0).toFixed(2)} ms: ${hashes.length} hashes`);
1072
1067
  scannedCount += scanned;
1073
1068
  if ( scannedCount >= maxSurveyNodes ) {
1074
1069
  stop();
@@ -21,14 +21,13 @@
21
21
 
22
22
  /* global CodeMirror */
23
23
 
24
- 'use strict';
25
-
26
24
  import './codemirror/ubo-static-filtering.js';
27
25
 
28
- import { hostnameFromURI } from './uri-utils.js';
29
- import punycode from '../lib/punycode.js';
30
26
  import * as sfp from './static-filtering-parser.js';
27
+
31
28
  import { dom } from './dom.js';
29
+ import { hostnameFromURI } from './uri-utils.js';
30
+ import punycode from '../lib/punycode.js';
32
31
 
33
32
  /******************************************************************************/
34
33
  /******************************************************************************/
@@ -63,13 +62,10 @@ const reCosmeticAnchor = /^#(\$|\?|\$\?)?#/;
63
62
 
64
63
  const docURL = new URL(vAPI.getURL(''));
65
64
 
65
+ const computedSpecificityCandidates = new Map();
66
66
  let resultsetOpt;
67
-
68
- let netFilterCandidates = [];
69
67
  let cosmeticFilterCandidates = [];
70
- let computedCandidateSlot = 0;
71
68
  let computedCandidate = '';
72
- const computedSpecificityCandidates = new Map();
73
69
  let needBody = false;
74
70
 
75
71
  /******************************************************************************/
@@ -183,7 +179,6 @@ const candidateFromFilterChoice = function(filterChoice) {
183
179
  elem.classList.remove('active');
184
180
  }
185
181
 
186
- computedCandidateSlot = slot;
187
182
  computedCandidate = '';
188
183
 
189
184
  if ( filter === undefined ) { return ''; }
@@ -726,7 +721,6 @@ const svgListening = (( ) => {
726
721
  // current mode is narrow or broad.
727
722
 
728
723
  const populateCandidates = function(candidates, selector) {
729
-
730
724
  const root = dialog.querySelector(selector);
731
725
  const ul = root.querySelector('ul');
732
726
  while ( ul.firstChild !== null ) {
@@ -751,8 +745,6 @@ const showDialog = function(details) {
751
745
 
752
746
  const { netFilters, cosmeticFilters, filter } = details;
753
747
 
754
- netFilterCandidates = netFilters;
755
-
756
748
  needBody =
757
749
  cosmeticFilters.length !== 0 &&
758
750
  cosmeticFilters[cosmeticFilters.length - 1] === '##body';
@@ -869,31 +861,31 @@ const quitPicker = function() {
869
861
 
870
862
  const onPickerMessage = function(msg) {
871
863
  switch ( msg.what ) {
872
- case 'candidatesOptimized':
873
- onCandidatesOptimized(msg);
874
- break;
875
- case 'showDialog':
876
- showDialog(msg);
877
- break;
878
- case 'resultsetDetails': {
879
- resultsetOpt = msg.opt;
880
- $id('resultsetCount').textContent = msg.count;
881
- if ( msg.count !== 0 ) {
882
- $id('create').removeAttribute('disabled');
883
- } else {
884
- $id('create').setAttribute('disabled', '');
885
- }
886
- break;
887
- }
888
- case 'svgPaths': {
889
- let { ocean, islands } = msg;
890
- ocean += islands;
891
- svgOcean.setAttribute('d', ocean);
892
- svgIslands.setAttribute('d', islands || NoPaths);
893
- break;
864
+ case 'candidatesOptimized':
865
+ onCandidatesOptimized(msg);
866
+ break;
867
+ case 'showDialog':
868
+ showDialog(msg);
869
+ break;
870
+ case 'resultsetDetails': {
871
+ resultsetOpt = msg.opt;
872
+ $id('resultsetCount').textContent = msg.count;
873
+ if ( msg.count !== 0 ) {
874
+ $id('create').removeAttribute('disabled');
875
+ } else {
876
+ $id('create').setAttribute('disabled', '');
894
877
  }
895
- default:
896
- break;
878
+ break;
879
+ }
880
+ case 'svgPaths': {
881
+ let { ocean, islands } = msg;
882
+ ocean += islands;
883
+ svgOcean.setAttribute('d', ocean);
884
+ svgIslands.setAttribute('d', islands || NoPaths);
885
+ break;
886
+ }
887
+ default:
888
+ break;
897
889
  }
898
890
  };
899
891
 
@@ -73,6 +73,7 @@ export const faIconsInit = (( ) => {
73
73
  [ 'spinner', { viewBox: '0 0 1664 1728', path: 'm 462,1394 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -52,0 -90,-38 -38,-38 -38,-90 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 37.5,37.5 37.5,90.5 z m 498,206 q 0,53 -37.5,90.5 Q 885,1728 832,1728 779,1728 741.5,1690.5 704,1653 704,1600 q 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 Q 960,1547 960,1600 Z M 256,896 q 0,53 -37.5,90.5 Q 181,1024 128,1024 75,1024 37.5,986.5 0,949 0,896 0,843 37.5,805.5 75,768 128,768 q 53,0 90.5,37.5 Q 256,843 256,896 Z m 1202,498 q 0,52 -38,90 -38,38 -90,38 -53,0 -90.5,-37.5 -37.5,-37.5 -37.5,-90.5 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 37.5,37.5 37.5,90.5 z M 494,398 q 0,66 -47,113 -47,47 -113,47 -66,0 -113,-47 -47,-47 -47,-113 0,-66 47,-113 47,-47 113,-47 66,0 113,47 47,47 47,113 z m 1170,498 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -53,0 -90.5,-37.5 Q 1408,949 1408,896 q 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 Q 1664,843 1664,896 Z M 1024,192 q 0,80 -56,136 -56,56 -136,56 -80,0 -136,-56 -56,-56 -56,-136 0,-80 56,-136 56,-56 136,-56 80,0 136,56 56,56 56,136 z m 530,206 q 0,93 -66,158.5 -66,65.5 -158,65.5 -93,0 -158.5,-65.5 Q 1106,491 1106,398 q 0,-92 65.5,-158 65.5,-66 158.5,-66 92,0 158,66 66,66 66,158 z' } ],
74
74
  [ 'sun', { viewBox: '0 0 1708 1792', path: 'm 1706,1172.5 c -3,10 -11,17 -20,20 l -292,96 v 306 c 0,10 -5,20 -13,26 -9,6 -19,8 -29,4 l -292,-94 -180,248 c -6,8 -16,13 -26,13 -10,0 -20,-5 -26,-13 l -180,-248 -292,94 c -10,4 -20,2 -29,-4 -8,-6 -13,-16 -13,-26 v -306 l -292,-96 c -9,-3 -17,-10 -20,-20 -3,-10 -2,-21 4,-29 l 180,-248 -180,-248 c -6,-9 -7,-19 -4,-29 3,-10 11,-17 20,-20 l 292,-96 v -306 c 0,-10 5,-20 13,-26 9,-6 19,-8 29,-4 l 292,94 180,-248 c 12,-16 40,-16 52,0 L 1060,260.5 l 292,-94 c 10,-4 20,-2 29,4 8,6 13,16 13,26 v 306 l 292,96 c 9,3 17,10 20,20 3,10 2,20 -4,29 l -180,248 180,248 c 6,8 7,19 4,29 z' } ],
75
75
  [ 'sun-o', { viewBox: '0 0 1708 1792', path: 'm 1430,895.5 c 0,-318 -258,-576 -576,-576 -318,0 -576,258 -576,576 0,318 258,576 576,576 C 1172,1471.5 1430,1213.5 1430,895.5 Z m 276,277 c -3,10 -11,17 -20,20 l -292,96 v 306 c 0,10 -5,20 -13,26 -9,6 -19,8 -29,4 l -292,-94 -180,248 c -6,8 -16,13 -26,13 -10,0 -20,-5 -26,-13 l -180,-248 -292,94 c -10,4 -20,2 -29,-4 -8,-6 -13,-16 -13,-26 v -306 l -292,-96 c -9,-3 -17,-10 -20,-20 -3,-10 -2,-21 4,-29 l 180,-248 -180,-248 c -6,-9 -7,-19 -4,-29 3,-10 11,-17 20,-20 l 292,-96 v -306 c 0,-10 5,-20 13,-26 9,-6 19,-8 29,-4 l 292,94 180,-248 c 12,-16 40,-16 52,0 L 1060,260.5 l 292,-94 c 10,-4 20,-2 29,4 8,6 13,16 13,26 v 306 l 292,96 c 9,3 17,10 20,20 3,10 2,20 -4,29 l -180,248 180,248 c 6,8 7,19 4,29 z' } ],
76
+ [ 'terminal', { viewBox: '0 0 1651 1075', path: 'm572 522-466 466q-10 10-23 10t-23-10l-50-50q-10-10-10-23t10-23l393-393-393-393q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l466 466q10 10 10 23t-10 23zm1079 457v64q0 14-9 23t-23 9h-960q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h960q14 0 23 9t9 23z' } ],
76
77
  [ 'times', { viewBox: '0 0 1188 1188', path: 'm 1188,956 q 0,40 -28,68 l -136,136 q -28,28 -68,28 -40,0 -68,-28 L 594,866 300,1160 q -28,28 -68,28 -40,0 -68,-28 L 28,1024 Q 0,996 0,956 0,916 28,888 L 322,594 28,300 Q 0,272 0,232 0,192 28,164 L 164,28 Q 192,0 232,0 272,0 300,28 L 594,322 888,28 q 28,-28 68,-28 40,0 68,28 l 136,136 q 28,28 28,68 0,40 -28,68 l -294,294 294,294 q 28,28 28,68 z' } ],
77
78
  [ 'trash-o', { viewBox: '0 0 1408 1536', path: 'm 512,608 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 256,0 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 256,0 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 128,724 V 384 H 256 v 948 q 0,22 7,40.5 7,18.5 14.5,27 7.5,8.5 10.5,8.5 h 832 q 3,0 10.5,-8.5 7.5,-8.5 14.5,-27 7,-18.5 7,-40.5 z M 480,256 H 928 L 880,139 q -7,-9 -17,-11 H 546 q -10,2 -17,11 z m 928,32 v 64 q 0,14 -9,23 -9,9 -23,9 h -96 v 948 q 0,83 -47,143.5 -47,60.5 -113,60.5 H 288 q -66,0 -113,-58.5 Q 128,1419 128,1336 V 384 H 32 Q 18,384 9,375 0,366 0,352 v -64 q 0,-14 9,-23 9,-9 23,-9 H 341 L 411,89 Q 426,52 465,26 504,0 544,0 h 320 q 40,0 79,26 39,26 54,63 l 70,167 h 309 q 14,0 23,9 9,9 9,23 z' } ],
78
79
  [ 'undo', { viewBox: '0 0 1536 1536', path: 'm 1536,768 q 0,156 -61,298 -61,142 -164,245 -103,103 -245,164 -142,61 -298,61 -172,0 -327,-72.5 Q 286,1391 177,1259 q -7,-10 -6.5,-22.5 0.5,-12.5 8.5,-20.5 l 137,-138 q 10,-9 25,-9 16,2 23,12 73,95 179,147 106,52 225,52 104,0 198.5,-40.5 Q 1061,1199 1130,1130 1199,1061 1239.5,966.5 1280,872 1280,768 1280,664 1239.5,569.5 1199,475 1130,406 1061,337 966.5,296.5 872,256 768,256 670,256 580,291.5 490,327 420,393 l 137,138 q 31,30 14,69 -17,40 -59,40 H 64 Q 38,640 19,621 0,602 0,576 V 128 Q 0,86 40,69 79,52 109,83 L 239,212 Q 346,111 483.5,55.5 621,0 768,0 q 156,0 298,61 142,61 245,164 103,103 164,245 61,142 61,298 z' } ],