@duckduckgo/autoconsent 16.62.0 → 17.0.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 (139) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/dist/addon-firefox/background.bundle.js +1 -0
  3. package/dist/addon-firefox/compact-rules.json +1 -1
  4. package/dist/addon-firefox/content.bundle.js +176 -36
  5. package/dist/addon-firefox/manifest.json +1 -1
  6. package/dist/addon-firefox/popup.bundle.js +1 -0
  7. package/dist/addon-firefox/rule-index.json +1 -1
  8. package/dist/addon-firefox/rules.json +1 -1
  9. package/dist/addon-mv3/background.bundle.js +1 -0
  10. package/dist/addon-mv3/compact-rules.json +1 -1
  11. package/dist/addon-mv3/content.bundle.js +176 -36
  12. package/dist/addon-mv3/manifest.json +1 -1
  13. package/dist/addon-mv3/popup.bundle.js +1 -0
  14. package/dist/addon-mv3/rule-index.json +1 -1
  15. package/dist/addon-mv3/rules.json +1 -1
  16. package/dist/autoconsent.cjs.js +176 -36
  17. package/dist/autoconsent.esm.js +176 -36
  18. package/dist/autoconsent.playwright.js +179 -36
  19. package/dist/autoconsent.standalone.js +177 -37
  20. package/dist/heuristics.cjs.js +14 -1
  21. package/dist/heuristics.mjs +14 -1
  22. package/dist/types/heuristics.d.ts +12 -3
  23. package/dist/types/types.d.ts +12 -1
  24. package/lib/cmps/base.ts +5 -1
  25. package/lib/heuristic-patterns.ts +17 -1
  26. package/lib/heuristics.ts +240 -45
  27. package/lib/types.ts +16 -1
  28. package/lib/utils.ts +1 -0
  29. package/package.json +2 -2
  30. package/readme.md +1 -1
  31. package/rules/autoconsent/appconsent-legacy.json +22 -1
  32. package/rules/autoconsent/asrock.json +44 -0
  33. package/rules/autoconsent/beetle-tracking.json +22 -0
  34. package/rules/autoconsent/casier-judiciaire-justice-gouv-fr.json +40 -0
  35. package/rules/autoconsent/civilservicejobs-service-gov-uk.json +38 -0
  36. package/rules/autoconsent/ckies.json +1 -1
  37. package/rules/autoconsent/consentmo.json +5 -2
  38. package/rules/autoconsent/cookie-script.json +34 -15
  39. package/rules/autoconsent/cookiesinfo-closecookies.json +9 -0
  40. package/rules/autoconsent/dack365.json +35 -0
  41. package/rules/autoconsent/epaas.json +18 -1
  42. package/rules/autoconsent/eu-cookie-law-popup.json +33 -0
  43. package/rules/autoconsent/fascicolosanitario-lombardia.json +14 -0
  44. package/rules/autoconsent/fnsp-cookieconsent.json +30 -0
  45. package/rules/autoconsent/fod-fujitv.json +13 -0
  46. package/rules/autoconsent/fundingchoices.json +12 -2
  47. package/rules/autoconsent/hkdir.json +33 -0
  48. package/rules/autoconsent/hyrabostad.json +21 -0
  49. package/rules/autoconsent/insided.json +15 -0
  50. package/rules/autoconsent/jokul-cookie-consent.json +28 -0
  51. package/rules/autoconsent/kartverket.json +46 -0
  52. package/rules/autoconsent/lego.json +27 -5
  53. package/rules/autoconsent/luxmed.json +33 -0
  54. package/rules/autoconsent/mars-cookies-prompt.json +20 -0
  55. package/rules/autoconsent/meta-cookie-dialog.json +37 -0
  56. package/rules/autoconsent/mittanbud.json +33 -0
  57. package/rules/autoconsent/niedziela-pl.json +35 -0
  58. package/rules/autoconsent/nikkeibp.json +10 -0
  59. package/rules/autoconsent/onecom-cookie-banner.json +25 -0
  60. package/rules/autoconsent/oslosportslager.no.json +34 -0
  61. package/rules/autoconsent/plex.tv.json +52 -0
  62. package/rules/autoconsent/poki.json +37 -0
  63. package/rules/autoconsent/polisen-se.json +26 -0
  64. package/rules/autoconsent/radio-canada.json +28 -0
  65. package/rules/autoconsent/regjeringen.no.json +13 -0
  66. package/rules/autoconsent/roll20.json +50 -0
  67. package/rules/autoconsent/romeo.json +47 -0
  68. package/rules/autoconsent/sirdata.json +8 -3
  69. package/rules/autoconsent/site-notifications-cookie-usage.json +25 -0
  70. package/rules/autoconsent/sparebank1-optin.json +10 -0
  71. package/rules/autoconsent/stockholm-stad.json +42 -0
  72. package/rules/autoconsent/stright.json +19 -1
  73. package/rules/autoconsent/stripchat.com.json +26 -5
  74. package/rules/autoconsent/tri-table.json +6 -2
  75. package/rules/autoconsent/tvp.json +27 -0
  76. package/rules/autoconsent/urvaerket.json +33 -0
  77. package/rules/autoconsent/vinnova-se.json +50 -0
  78. package/rules/autoconsent/volvocars-com.json +23 -2
  79. package/rules/autoconsent/vortex-consent.json +33 -0
  80. package/rules/autoconsent/vue-cookie-accept-decline.json +42 -0
  81. package/rules/compact-rules.json +1 -1
  82. package/rules/rule-index.json +1 -1
  83. package/rules/rules.json +1 -1
  84. package/tests/appconsent-legacy.spec.ts +1 -1
  85. package/tests/asrock.spec.ts +3 -0
  86. package/tests/beetle-tracking.spec.ts +3 -0
  87. package/tests/casier-judiciaire-justice-gouv-fr.spec.ts +3 -0
  88. package/tests/civilservicejobs-service-gov-uk.spec.ts +3 -0
  89. package/tests/consentmo.spec.ts +2 -0
  90. package/tests/cookie-script.spec.ts +5 -0
  91. package/tests/cookiesinfo-closecookies.spec.ts +8 -0
  92. package/tests/dack365.spec.ts +3 -0
  93. package/tests/epaas.spec.ts +3 -0
  94. package/tests/eu-cookie-law-popup.spec.ts +8 -0
  95. package/tests/fascicolosanitario-lombardia.spec.ts +3 -0
  96. package/tests/fnsp-cookieconsent.spec.ts +9 -0
  97. package/tests/fod-fujitv.spec.ts +3 -0
  98. package/tests/fundingchoices.spec.ts +7 -1
  99. package/tests/hkdir.spec.ts +10 -0
  100. package/tests/hyrabostad.spec.ts +3 -0
  101. package/tests/insided.spec.ts +9 -0
  102. package/tests/jokul-cookie-consent.spec.ts +3 -0
  103. package/tests/kartverket.spec.ts +3 -0
  104. package/tests/luxmed.spec.ts +3 -0
  105. package/tests/mars-cookies-prompt.spec.ts +3 -0
  106. package/tests/meta-cookie-dialog.spec.ts +14 -0
  107. package/tests/mittanbud.spec.ts +3 -0
  108. package/tests/niedziela-pl.spec.ts +3 -0
  109. package/tests/nikkeibp.spec.ts +8 -0
  110. package/tests/onecom-cookie-banner.spec.ts +5 -0
  111. package/tests/oslosportslager.no.spec.ts +3 -0
  112. package/tests/plex.tv.spec.ts +5 -0
  113. package/tests/poki.spec.ts +6 -0
  114. package/tests/polisen-se.spec.ts +3 -0
  115. package/tests/radio-canada.spec.ts +15 -0
  116. package/tests/regjeringen.no.spec.ts +3 -0
  117. package/tests/roll20.spec.ts +3 -0
  118. package/tests/romeo.spec.ts +3 -0
  119. package/tests/sirdata.spec.ts +13 -1
  120. package/tests/site-notifications-cookie-usage.spec.ts +3 -0
  121. package/tests/sparebank1-optin.spec.ts +8 -0
  122. package/tests/stockholm-stad.spec.ts +7 -0
  123. package/tests/stright.spec.ts +11 -0
  124. package/tests/stripchat.com.spec.ts +4 -1
  125. package/tests/tri-table.spec.ts +1 -1
  126. package/tests/tvp.spec.ts +3 -0
  127. package/tests/urvaerket.spec.ts +13 -0
  128. package/tests/vinnova-se.spec.ts +6 -0
  129. package/tests/volvocars-com.spec.ts +1 -1
  130. package/tests/vortex-consent.spec.ts +18 -0
  131. package/tests/vue-cookie-accept-decline.spec.ts +8 -0
  132. package/tests-wtr/heuristics/get-actionable-popups.ts +41 -7
  133. package/tests-wtr/heuristics/get-potential-popups.test.ts +235 -4
  134. package/tests-wtr/heuristics/heuristic-cmp.ts +16 -1
  135. package/tests-wtr/heuristics/heuristics-utils.test.ts +49 -0
  136. package/rules/generated/auto_CA_plex.tv_ee4.json +0 -40
  137. package/rules/generated/auto_CA_support.plex.tv_gn3.json +0 -40
  138. package/tests/generated/auto_CA_plex.tv_ee4.spec.ts +0 -2
  139. package/tests/generated/auto_CA_support.plex.tv_gn3.spec.ts +0 -6
@@ -1,6 +1,6 @@
1
1
  import generateCMPTests from '../playwright/runner';
2
2
 
3
- generateCMPTests('AppConsent legacy', ['https://www.meteociel.fr/'], {
3
+ generateCMPTests('AppConsent legacy', ['https://www.meteociel.fr/', 'https://www.maxifoot.fr/', 'https://www.voltex.fr/'], {
4
4
  testOptIn: false,
5
5
  testOptOut: true,
6
6
  onlyRegions: ['US', 'FR'],
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('asrock', ['https://www.asrock.com/', 'https://www.asrock.com/index.jp.asp']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('beetle-tracking', ['https://denkorteavis.dk/', 'https://purovitalis.com/', 'https://swimout.dk/']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('casier-judiciaire-justice-gouv-fr', ['https://casier-judiciaire.justice.gouv.fr/']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('civilservicejobs-service-gov-uk', ['https://www.civilservicejobs.service.gov.uk/csr/index.cgi']);
@@ -9,6 +9,8 @@ generateCMPTests(
9
9
  'https://eu.blackdiamondequipment.com/',
10
10
  'https://www.directdoors.com/',
11
11
  'https://goorin.com/',
12
+ 'https://nl.pit-pit.com/',
13
+ 'https://marshallsgarden.com/',
12
14
  ],
13
15
  {
14
16
  skipRegions: ['US'],
@@ -12,3 +12,8 @@ generateCMPTests('cookie-script', [
12
12
  'https://n8n.io/',
13
13
  'https://hearthis.at/',
14
14
  ]);
15
+
16
+ // category checkboxes in the banner, no manage button, hidden "Save & Close"; site is blocked outside Europe
17
+ generateCMPTests('cookie-script', ['https://alledaek365.dk/'], {
18
+ onlyRegions: ['DE', 'FR', 'NL', 'PL', 'DK'],
19
+ });
@@ -0,0 +1,8 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('cookiesinfo-closecookies', ['https://spmzoz-slupsk.pl/', 'https://aktywator.witaj-swiecie.pl/', 'https://poldan.pl/']);
4
+
5
+ // only reachable from Polish IPs
6
+ generateCMPTests('cookiesinfo-closecookies', ['https://edu.gdansk.pl/'], {
7
+ onlyRegions: ['PL'],
8
+ });
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('dack365', ['https://www.dack365.se/', 'https://www.dekk365.no/', 'https://www.rengas365.fi/']);
@@ -4,3 +4,6 @@ generateCMPTests('epaas', ['https://www.bmw.de/de/index.html', 'https://www.mini
4
4
 
5
5
  // No explicit reject button outside the EEA: opt-out goes through the "customise" layer.
6
6
  generateCMPTests('epaas', ['https://www.mini.jp/ja_JP/home.html'], { testOptIn: false });
7
+
8
+ // Opt-out-by-default variant: marketing pre-enabled in the "customise" layer, saved with "Continue".
9
+ generateCMPTests('epaas', ['https://www.bmw.com.au/en/index.html', 'https://www.mini.com.au/', 'https://www.bmw.co.nz/']);
@@ -0,0 +1,8 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('eu-cookie-law-popup', [
4
+ 'https://elearning.unimib.it/',
5
+ 'https://top-akademie.com/',
6
+ 'https://e-tesda.gov.ph/',
7
+ 'https://www.trueplookpanya.com/',
8
+ ]);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('fascicolosanitario-lombardia', ['https://www.fascicolosanitario.regione.lombardia.it/']);
@@ -0,0 +1,9 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('fnsp-cookieconsent', [
4
+ 'https://www.helse-bergen.no/',
5
+ 'https://www.helse-vest.no/',
6
+ 'https://www.oslo-universitetssykehus.no/',
7
+ 'https://www.stolav.no/',
8
+ 'https://www.ahus.no/',
9
+ ]);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('fod-fujitv', ['https://fod.fujitv.co.jp/']);
@@ -2,7 +2,13 @@ import generateCMPTests from '../playwright/runner';
2
2
 
3
3
  generateCMPTests(
4
4
  'funding-choices',
5
- ['https://www.bbc.com/', 'https://www.accuweather.com/', 'https://hbr.org/', 'https://www.dinarguru.com/'],
5
+ [
6
+ 'https://www.bbc.com/',
7
+ 'https://www.accuweather.com/',
8
+ 'https://hbr.org/',
9
+ 'https://www.dinarguru.com/',
10
+ 'http://biketrailspfannenstiel.ch/',
11
+ ],
6
12
  {
7
13
  skipRegions: ['US', 'GB'],
8
14
  },
@@ -0,0 +1,10 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ // the site reloads the page right after the click, so the self test cannot run
4
+ generateCMPTests(
5
+ 'hkdir',
6
+ ['https://hkdir.no/', 'https://studentombudfagskole.no/', 'https://fagskoleradet.no/', 'https://erihplus.hkdir.no/'],
7
+ {
8
+ testSelfTest: false,
9
+ },
10
+ );
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('hyrabostad.se', ['https://www.hyrabostad.se/']);
@@ -0,0 +1,9 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('insided', [
4
+ 'https://community.odido.nl/',
5
+ 'https://community.fluxx.io/',
6
+ 'https://visioneers.gong.io/',
7
+ 'https://forum.tele2.nl/',
8
+ 'https://community.infoland.nl/',
9
+ ]);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('jokul-cookie-consent', ['https://www.fremtind.no/', 'https://meldskade.fremtind.no/']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('kartverket', ['https://eiendomsregisteret.kartverket.no/']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('luxmed', ['https://portalpacjenta.luxmed.pl/']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('mars-cookies-prompt', ['https://www.bergenkino.no/', 'https://www.trondheimkino.no/', 'https://www.kimenkino.no/']);
@@ -0,0 +1,14 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests(
4
+ 'meta-cookie-dialog',
5
+ ['https://www.messenger.com/', 'https://developers.facebook.com/', 'https://business.facebook.com/'],
6
+ {
7
+ skipRegions: ['US'],
8
+ },
9
+ );
10
+
11
+ generateCMPTests('meta-cookie-dialog', ['https://www.messenger.com/'], {
12
+ mobile: true,
13
+ skipRegions: ['US'],
14
+ });
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('mittanbud', ['https://mittanbud.no/', 'https://servicefinder.se/']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('niedziela-pl', ['https://niezbednik.niedziela.pl/', 'https://krakow.niedziela.pl/', 'https://m.niedziela.pl/']);
@@ -0,0 +1,8 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('nikkeibp', [
4
+ 'https://natgeo.nikkeibp.co.jp/',
5
+ 'https://xtech.nikkei.com/',
6
+ 'https://business.nikkei.com/',
7
+ 'https://bio.nikkeibp.co.jp/',
8
+ ]);
@@ -0,0 +1,5 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('onecom-cookie-banner', ['http://utenfilter.no/', 'https://mtv-einheit.de/', 'https://oxarna.se/'], {
4
+ testSelfTest: false,
5
+ });
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('oslosportslager.no', ['https://oslosportslager.no/']);
@@ -0,0 +1,5 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('plex.tv', ['https://watch.plex.tv/', 'https://support.plex.tv/', 'https://www.plex.tv/en-gb/plans/'], {
4
+ skipRegions: ['US', 'CA', 'AU', 'JP'],
5
+ });
@@ -0,0 +1,6 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ // "Choose your cookies in the Privacy Center" (CA) and "Privacy & cookies" (NL) notices
4
+ generateCMPTests('poki', ['https://poki.com/'], {
5
+ onlyRegions: ['CA', 'NL'],
6
+ });
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('polisen-se', ['https://polisen.se/', 'https://polismuseet.se/', 'https://tidningensvenskpolis.se/'], {});
@@ -0,0 +1,15 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests(
4
+ 'radio-canada',
5
+ [
6
+ 'https://ici.radio-canada.ca/',
7
+ 'https://ici.radio-canada.ca/info',
8
+ 'https://ici.radio-canada.ca/ohdio',
9
+ 'https://ici.artv.ca/',
10
+ 'https://ici.exploratv.ca/',
11
+ ],
12
+ {
13
+ testSelfTest: false,
14
+ },
15
+ );
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('regjeringen.no', ['https://www.regjeringen.no/', 'https://www.regjeringen.no/en/id4/']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('roll20', ['https://roll20.net/', 'https://marketplace.roll20.net/', 'https://roll20.net/compendium/dnd5e']);
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('romeo', ['https://www.romeo.com/']);
@@ -1,3 +1,15 @@
1
1
  import generateCMPTests from '../playwright/runner';
2
2
 
3
- generateCMPTests('Sirdata', ['https://www.comment-economiser.fr/', 'https://gizmodo.com/']);
3
+ // GDPR flavor: "Do not accept" button, or only a close (X) button
4
+ generateCMPTests(
5
+ 'Sirdata',
6
+ ['https://www.comment-economiser.fr/', 'https://www.futbolfantasy.com/', 'https://kotaku.com/', 'https://upway.de/'],
7
+ {
8
+ skipRegions: ['US'],
9
+ },
10
+ );
11
+
12
+ // US flavor: reject via "Set your choices"
13
+ generateCMPTests('Sirdata', ['https://www.medicaldaily.com/', 'https://www.ibtimes.co.uk/'], {
14
+ onlyRegions: ['US'],
15
+ });
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('site-notifications-cookie-usage', ['https://www.mrskin.com/', 'https://www.mrman.com/']);
@@ -0,0 +1,8 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('sparebank1-optin', ['https://www.sparebank1.no/', 'https://www.sparebank1.no/nb/ostlandet/privat.html']);
4
+
5
+ // the page reloads right after opt-out, which interrupts the self-test
6
+ generateCMPTests('sparebank1-optin', ['https://www.eiendomsmegler1.no/'], {
7
+ testSelfTest: false,
8
+ });
@@ -0,0 +1,7 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('stockholm-stad', [
4
+ 'https://stockholmskallan.stockholm.se/',
5
+ 'https://start.stockholm/',
6
+ 'https://stadsarkivet.stockholm/',
7
+ ]);
@@ -6,3 +6,14 @@ generateCMPTests('stright', [
6
6
  'https://www.makita.co.jp/',
7
7
  'https://www.yamada-denki.jp/',
8
8
  ]);
9
+
10
+ // settings dialog with category toggles and no reject-all button; mapfan.com is only reachable from Japan
11
+ generateCMPTests('stright', ['https://mapfan.com/'], {
12
+ onlyRegions: ['JP'],
13
+ });
14
+
15
+ // no accept-all button in the first layer
16
+ generateCMPTests('stright', ['https://www.subaru.jp/'], {
17
+ onlyRegions: ['JP'],
18
+ testOptIn: false,
19
+ });
@@ -1,3 +1,6 @@
1
1
  import generateCMPTests from '../playwright/runner';
2
2
 
3
- generateCMPTests('stripchat.com', ['https://xhamsterlive.com/', 'https://stripchat.com/']);
3
+ // Other regions put an 18+ gate in front of the banner, which the test runner cannot pass
4
+ generateCMPTests('stripchat.com', ['https://xhamsterlive.com/', 'https://stripchat.com/', 'https://superchat.live/'], {
5
+ onlyRegions: ['GB'],
6
+ });
@@ -1,5 +1,5 @@
1
1
  import generateCMPTests from '../playwright/runner';
2
2
 
3
- generateCMPTests('tri-table', ['https://ckm.pl/', 'https://tri-table.com/'], {
3
+ generateCMPTests('tri-table', ['https://ckm.pl/', 'https://tri-table.com/', 'https://wiadomosci.dziennik.pl/', 'https://forsal.pl/'], {
4
4
  skipRegions: ['US'],
5
5
  });
@@ -0,0 +1,3 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('tvp', ['https://vod.tvp.pl/']);
@@ -0,0 +1,13 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests(
4
+ 'urvaerket',
5
+ [
6
+ 'https://www.urvaerket.dk/',
7
+ 'https://www.uret.se/',
8
+ 'https://www.urverket.no/',
9
+ 'https://www.laatukellot.fi/',
10
+ 'https://www.thewatchagency.com/',
11
+ ],
12
+ {},
13
+ );
@@ -0,0 +1,6 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ // saving the choice reloads the page before the self-test can run
4
+ generateCMPTests('vinnova-se', ['https://www.vinnova.se/', 'https://www.vinnova.se/en/'], {
5
+ testSelfTest: false,
6
+ });
@@ -1,3 +1,3 @@
1
1
  import generateCMPTests from '../playwright/runner';
2
2
 
3
- generateCMPTests('volvocars-com', ['https://www.volvocars.com/uk/cars/ex60-electric/']);
3
+ generateCMPTests('volvocars-com', ['https://www.volvocars.com/uk/cars/ex60-electric/', 'https://www.volvocars.com/ch/']);
@@ -0,0 +1,18 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ // The page reloads after the reject click, so the self-test never runs
4
+ generateCMPTests(
5
+ 'vortex-consent',
6
+ [
7
+ 'https://www.inn.no/',
8
+ 'https://www.uio.no/',
9
+ 'https://www.hiof.no/',
10
+ 'https://www.nih.no/',
11
+ 'https://www.himolde.no/',
12
+ 'https://www.samordnaopptak.no/',
13
+ 'https://www.aho.no/',
14
+ ],
15
+ {
16
+ testSelfTest: false,
17
+ },
18
+ );
@@ -0,0 +1,8 @@
1
+ import generateCMPTests from '../playwright/runner';
2
+
3
+ generateCMPTests('vue-cookie-accept-decline', [
4
+ 'https://loopcv.pro/',
5
+ 'https://www.mennekes.com/',
6
+ 'https://magnaplate.com/',
7
+ 'https://mojo.vision/',
8
+ ]);
@@ -1,5 +1,5 @@
1
1
  import { expect } from '@esm-bundle/chai';
2
- import { getActionablePopups } from '../../lib/heuristics';
2
+ import { getActionablePopups, getPotentialPopups } from '../../lib/heuristics';
3
3
  import { ButtonData } from '../../lib/types';
4
4
 
5
5
  function rejectButtons(buttons: ButtonData[]) {
@@ -81,14 +81,30 @@ describe('getActionablePopups', () => {
81
81
  expect(popups[0].regexClassification).to.equal('tier2');
82
82
  });
83
83
 
84
- it('prefers a contentful fixed child over its contentful container', () => {
84
+ it('prefers a contentful fixed child over its contentful container in the DOM walk', () => {
85
+ showPopup('popup-with-contentful-fixed-child');
86
+
87
+ const popups = getPotentialPopups();
88
+
89
+ expect(popups.map((p) => p.element.id)).to.deep.equal(['contentful-fixed-child']);
90
+ });
91
+
92
+ it('acts on a contentful fixed child found by the DOM walk', () => {
85
93
  showPopup('popup-with-contentful-fixed-child');
86
94
 
87
95
  const popups = getActionablePopups('tier2');
88
96
 
89
- expect(popups).to.have.length(1);
90
- expect(popups[0].element.id).to.equal('contentful-fixed-child');
91
- expect(popups[0].regexClassification).to.equal('tier2');
97
+ expect(popups.map((p) => [p.element.id, p.regexClassification])).to.deep.equal([['contentful-fixed-child', 'tier2']]);
98
+ });
99
+
100
+ it('prefers a container with reject found by hit-testing over its fixed child', () => {
101
+ showPopup('popup-with-contentful-fixed-child');
102
+
103
+ const popups = getActionablePopups('tier2', undefined, true);
104
+
105
+ expect(popups.map((p) => [p.element.id, p.regexClassification])).to.deep.equal([
106
+ ['popup-with-contentful-fixed-child', 'reject'],
107
+ ]);
92
108
  });
93
109
 
94
110
  it('finds acknowledge-only popup with no reject buttons', () => {
@@ -167,7 +183,7 @@ describe('getActionablePopups', () => {
167
183
  expect(popups.length).to.equal(1);
168
184
  });
169
185
 
170
- it('ignores static positioned elements', () => {
186
+ it('ignores static positioned elements without hit-testing', () => {
171
187
  showPopup('popup-static');
172
188
 
173
189
  const popups = getActionablePopups();
@@ -175,6 +191,14 @@ describe('getActionablePopups', () => {
175
191
  expect(popups.length).to.equal(0);
176
192
  });
177
193
 
194
+ it('finds a static positioned popup on screen by hit-testing', () => {
195
+ showPopup('popup-static');
196
+
197
+ const popups = getActionablePopups('reject', undefined, true);
198
+
199
+ expect(popups.map((p) => p.element.id)).to.deep.equal(['popup-static']);
200
+ });
201
+
178
202
  it('finds popup with role="dialog"', () => {
179
203
  showPopup('popup-role-dialog');
180
204
 
@@ -202,7 +226,7 @@ describe('getActionablePopups', () => {
202
226
  dialog.close();
203
227
  });
204
228
 
205
- it('ignores closed <dialog> element', () => {
229
+ it('ignores closed <dialog> element without hit-testing', () => {
206
230
  const dialog = document.getElementById('popup-dialog-element') as HTMLDialogElement;
207
231
  dialog.classList.add('visible');
208
232
 
@@ -210,6 +234,16 @@ describe('getActionablePopups', () => {
210
234
 
211
235
  expect(popups.length).to.equal(0);
212
236
  });
237
+
238
+ it('finds a closed <dialog> that the page shows anyway only by hit-testing', () => {
239
+ const dialog = document.getElementById('popup-dialog-element') as HTMLDialogElement;
240
+ dialog.classList.add('visible');
241
+
242
+ const popups = getActionablePopups('reject', undefined, true);
243
+
244
+ // not dialog-like while closed, but it is painted on screen
245
+ expect(popups.map((p) => p.element.id)).to.deep.equal(['popup-dialog-element']);
246
+ });
213
247
  });
214
248
 
215
249
  describe('button classification', () => {