@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.
- package/CHANGELOG.md +84 -0
- package/dist/addon-firefox/background.bundle.js +1 -0
- package/dist/addon-firefox/compact-rules.json +1 -1
- package/dist/addon-firefox/content.bundle.js +176 -36
- package/dist/addon-firefox/manifest.json +1 -1
- package/dist/addon-firefox/popup.bundle.js +1 -0
- package/dist/addon-firefox/rule-index.json +1 -1
- package/dist/addon-firefox/rules.json +1 -1
- package/dist/addon-mv3/background.bundle.js +1 -0
- package/dist/addon-mv3/compact-rules.json +1 -1
- package/dist/addon-mv3/content.bundle.js +176 -36
- package/dist/addon-mv3/manifest.json +1 -1
- package/dist/addon-mv3/popup.bundle.js +1 -0
- package/dist/addon-mv3/rule-index.json +1 -1
- package/dist/addon-mv3/rules.json +1 -1
- package/dist/autoconsent.cjs.js +176 -36
- package/dist/autoconsent.esm.js +176 -36
- package/dist/autoconsent.playwright.js +179 -36
- package/dist/autoconsent.standalone.js +177 -37
- package/dist/heuristics.cjs.js +14 -1
- package/dist/heuristics.mjs +14 -1
- package/dist/types/heuristics.d.ts +12 -3
- package/dist/types/types.d.ts +12 -1
- package/lib/cmps/base.ts +5 -1
- package/lib/heuristic-patterns.ts +17 -1
- package/lib/heuristics.ts +240 -45
- package/lib/types.ts +16 -1
- package/lib/utils.ts +1 -0
- package/package.json +2 -2
- package/readme.md +1 -1
- package/rules/autoconsent/appconsent-legacy.json +22 -1
- package/rules/autoconsent/asrock.json +44 -0
- package/rules/autoconsent/beetle-tracking.json +22 -0
- package/rules/autoconsent/casier-judiciaire-justice-gouv-fr.json +40 -0
- package/rules/autoconsent/civilservicejobs-service-gov-uk.json +38 -0
- package/rules/autoconsent/ckies.json +1 -1
- package/rules/autoconsent/consentmo.json +5 -2
- package/rules/autoconsent/cookie-script.json +34 -15
- package/rules/autoconsent/cookiesinfo-closecookies.json +9 -0
- package/rules/autoconsent/dack365.json +35 -0
- package/rules/autoconsent/epaas.json +18 -1
- package/rules/autoconsent/eu-cookie-law-popup.json +33 -0
- package/rules/autoconsent/fascicolosanitario-lombardia.json +14 -0
- package/rules/autoconsent/fnsp-cookieconsent.json +30 -0
- package/rules/autoconsent/fod-fujitv.json +13 -0
- package/rules/autoconsent/fundingchoices.json +12 -2
- package/rules/autoconsent/hkdir.json +33 -0
- package/rules/autoconsent/hyrabostad.json +21 -0
- package/rules/autoconsent/insided.json +15 -0
- package/rules/autoconsent/jokul-cookie-consent.json +28 -0
- package/rules/autoconsent/kartverket.json +46 -0
- package/rules/autoconsent/lego.json +27 -5
- package/rules/autoconsent/luxmed.json +33 -0
- package/rules/autoconsent/mars-cookies-prompt.json +20 -0
- package/rules/autoconsent/meta-cookie-dialog.json +37 -0
- package/rules/autoconsent/mittanbud.json +33 -0
- package/rules/autoconsent/niedziela-pl.json +35 -0
- package/rules/autoconsent/nikkeibp.json +10 -0
- package/rules/autoconsent/onecom-cookie-banner.json +25 -0
- package/rules/autoconsent/oslosportslager.no.json +34 -0
- package/rules/autoconsent/plex.tv.json +52 -0
- package/rules/autoconsent/poki.json +37 -0
- package/rules/autoconsent/polisen-se.json +26 -0
- package/rules/autoconsent/radio-canada.json +28 -0
- package/rules/autoconsent/regjeringen.no.json +13 -0
- package/rules/autoconsent/roll20.json +50 -0
- package/rules/autoconsent/romeo.json +47 -0
- package/rules/autoconsent/sirdata.json +8 -3
- package/rules/autoconsent/site-notifications-cookie-usage.json +25 -0
- package/rules/autoconsent/sparebank1-optin.json +10 -0
- package/rules/autoconsent/stockholm-stad.json +42 -0
- package/rules/autoconsent/stright.json +19 -1
- package/rules/autoconsent/stripchat.com.json +26 -5
- package/rules/autoconsent/tri-table.json +6 -2
- package/rules/autoconsent/tvp.json +27 -0
- package/rules/autoconsent/urvaerket.json +33 -0
- package/rules/autoconsent/vinnova-se.json +50 -0
- package/rules/autoconsent/volvocars-com.json +23 -2
- package/rules/autoconsent/vortex-consent.json +33 -0
- package/rules/autoconsent/vue-cookie-accept-decline.json +42 -0
- package/rules/compact-rules.json +1 -1
- package/rules/rule-index.json +1 -1
- package/rules/rules.json +1 -1
- package/tests/appconsent-legacy.spec.ts +1 -1
- package/tests/asrock.spec.ts +3 -0
- package/tests/beetle-tracking.spec.ts +3 -0
- package/tests/casier-judiciaire-justice-gouv-fr.spec.ts +3 -0
- package/tests/civilservicejobs-service-gov-uk.spec.ts +3 -0
- package/tests/consentmo.spec.ts +2 -0
- package/tests/cookie-script.spec.ts +5 -0
- package/tests/cookiesinfo-closecookies.spec.ts +8 -0
- package/tests/dack365.spec.ts +3 -0
- package/tests/epaas.spec.ts +3 -0
- package/tests/eu-cookie-law-popup.spec.ts +8 -0
- package/tests/fascicolosanitario-lombardia.spec.ts +3 -0
- package/tests/fnsp-cookieconsent.spec.ts +9 -0
- package/tests/fod-fujitv.spec.ts +3 -0
- package/tests/fundingchoices.spec.ts +7 -1
- package/tests/hkdir.spec.ts +10 -0
- package/tests/hyrabostad.spec.ts +3 -0
- package/tests/insided.spec.ts +9 -0
- package/tests/jokul-cookie-consent.spec.ts +3 -0
- package/tests/kartverket.spec.ts +3 -0
- package/tests/luxmed.spec.ts +3 -0
- package/tests/mars-cookies-prompt.spec.ts +3 -0
- package/tests/meta-cookie-dialog.spec.ts +14 -0
- package/tests/mittanbud.spec.ts +3 -0
- package/tests/niedziela-pl.spec.ts +3 -0
- package/tests/nikkeibp.spec.ts +8 -0
- package/tests/onecom-cookie-banner.spec.ts +5 -0
- package/tests/oslosportslager.no.spec.ts +3 -0
- package/tests/plex.tv.spec.ts +5 -0
- package/tests/poki.spec.ts +6 -0
- package/tests/polisen-se.spec.ts +3 -0
- package/tests/radio-canada.spec.ts +15 -0
- package/tests/regjeringen.no.spec.ts +3 -0
- package/tests/roll20.spec.ts +3 -0
- package/tests/romeo.spec.ts +3 -0
- package/tests/sirdata.spec.ts +13 -1
- package/tests/site-notifications-cookie-usage.spec.ts +3 -0
- package/tests/sparebank1-optin.spec.ts +8 -0
- package/tests/stockholm-stad.spec.ts +7 -0
- package/tests/stright.spec.ts +11 -0
- package/tests/stripchat.com.spec.ts +4 -1
- package/tests/tri-table.spec.ts +1 -1
- package/tests/tvp.spec.ts +3 -0
- package/tests/urvaerket.spec.ts +13 -0
- package/tests/vinnova-se.spec.ts +6 -0
- package/tests/volvocars-com.spec.ts +1 -1
- package/tests/vortex-consent.spec.ts +18 -0
- package/tests/vue-cookie-accept-decline.spec.ts +8 -0
- package/tests-wtr/heuristics/get-actionable-popups.ts +41 -7
- package/tests-wtr/heuristics/get-potential-popups.test.ts +235 -4
- package/tests-wtr/heuristics/heuristic-cmp.ts +16 -1
- package/tests-wtr/heuristics/heuristics-utils.test.ts +49 -0
- package/rules/generated/auto_CA_plex.tv_ee4.json +0 -40
- package/rules/generated/auto_CA_support.plex.tv_gn3.json +0 -40
- package/tests/generated/auto_CA_plex.tv_ee4.spec.ts +0 -2
- 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'],
|
package/tests/consentmo.spec.ts
CHANGED
|
@@ -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
|
+
});
|
package/tests/epaas.spec.ts
CHANGED
|
@@ -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,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
|
+
]);
|
|
@@ -2,7 +2,13 @@ import generateCMPTests from '../playwright/runner';
|
|
|
2
2
|
|
|
3
3
|
generateCMPTests(
|
|
4
4
|
'funding-choices',
|
|
5
|
-
[
|
|
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,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,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
|
+
);
|
package/tests/sirdata.spec.ts
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
1
|
import generateCMPTests from '../playwright/runner';
|
|
2
2
|
|
|
3
|
-
|
|
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,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
|
+
});
|
package/tests/stright.spec.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
+
});
|
package/tests/tri-table.spec.ts
CHANGED
|
@@ -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,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,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
|
+
);
|
|
@@ -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.
|
|
90
|
-
|
|
91
|
-
|
|
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', () => {
|