@duckduckgo/autoconsent 16.51.0 → 16.53.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 (124) hide show
  1. package/.github/workflows/ddg-release.yml +2 -2
  2. package/AGENTS.md +1 -0
  3. package/CHANGELOG.md +94 -0
  4. package/dist/addon-firefox/compact-rules.json +1 -1
  5. package/dist/addon-firefox/content.bundle.js +4 -1
  6. package/dist/addon-firefox/manifest.json +1 -1
  7. package/dist/addon-firefox/rule-index.json +1 -1
  8. package/dist/addon-firefox/rules.json +1 -1
  9. package/dist/addon-mv3/compact-rules.json +1 -1
  10. package/dist/addon-mv3/content.bundle.js +4 -1
  11. package/dist/addon-mv3/manifest.json +1 -1
  12. package/dist/addon-mv3/rule-index.json +1 -1
  13. package/dist/addon-mv3/rules.json +1 -1
  14. package/dist/autoconsent.cjs.js +4 -1
  15. package/dist/autoconsent.esm.js +4 -1
  16. package/dist/autoconsent.playwright.js +4 -1
  17. package/dist/autoconsent.standalone.js +5 -2
  18. package/docs/rule-syntax.md +1 -1
  19. package/lib/dom-actions.ts +5 -1
  20. package/package.json +2 -2
  21. package/rules/autoconsent/accurx.json +26 -0
  22. package/rules/autoconsent/aliexpress.json +37 -13
  23. package/rules/autoconsent/burpee-com.json +22 -10
  24. package/rules/autoconsent/ccm19.json +31 -0
  25. package/rules/autoconsent/channel4.json +5 -5
  26. package/rules/autoconsent/citizensadvice.json +43 -0
  27. package/rules/autoconsent/civic-cookie-control.json +9 -9
  28. package/rules/autoconsent/clasohlson.com.json +13 -0
  29. package/rules/autoconsent/cm-cookie-manager.json +20 -0
  30. package/rules/autoconsent/community.screwfix.com.json +23 -0
  31. package/rules/autoconsent/complianz-optin.json +11 -1
  32. package/rules/autoconsent/concept3d.json +19 -0
  33. package/rules/autoconsent/conextra.json +18 -0
  34. package/rules/autoconsent/cookie-script.json +23 -2
  35. package/rules/autoconsent/cookiecuttr.json +3 -2
  36. package/rules/autoconsent/craft-cookie-consent.json +65 -0
  37. package/rules/autoconsent/cz-eshop-cookies-consent.json +9 -0
  38. package/rules/autoconsent/depop.json +16 -14
  39. package/rules/autoconsent/dsgvo.json +8 -2
  40. package/rules/autoconsent/dwaalzin-nu.json +13 -0
  41. package/rules/autoconsent/elsevier.json +3 -3
  42. package/rules/autoconsent/eneba.json +66 -0
  43. package/rules/autoconsent/ensighten.json +2 -2
  44. package/rules/autoconsent/europa-eu.json +11 -7
  45. package/rules/autoconsent/finna.json +29 -0
  46. package/rules/autoconsent/head-fi.json +35 -0
  47. package/rules/autoconsent/istore-co-za.json +18 -0
  48. package/rules/autoconsent/kiwico.json +48 -0
  49. package/rules/autoconsent/la-becanerie.json +13 -0
  50. package/rules/autoconsent/lta.json +22 -0
  51. package/rules/autoconsent/meteored.json +40 -0
  52. package/rules/autoconsent/mizuno-com.json +13 -0
  53. package/rules/autoconsent/mobirise-cookies-alert-cosmetic.json +30 -0
  54. package/rules/autoconsent/mobirise-cookies-alert.json +34 -0
  55. package/rules/autoconsent/msg-cookie.json +9 -0
  56. package/rules/autoconsent/pigu.json +35 -0
  57. package/rules/autoconsent/plentyshop.json +27 -0
  58. package/rules/autoconsent/posthog.json +35 -0
  59. package/rules/autoconsent/quantcast.json +96 -34
  60. package/rules/autoconsent/quick-cookie-consent.json +70 -0
  61. package/rules/autoconsent/schadefonds.json +15 -0
  62. package/rules/autoconsent/service2school.json +45 -0
  63. package/rules/autoconsent/sportmedizin-rheuma.json +17 -0
  64. package/rules/autoconsent/tealium.json +10 -4
  65. package/rules/autoconsent/tracsis-delay-repay.json +13 -0
  66. package/rules/autoconsent/truendo.json +28 -0
  67. package/rules/autoconsent/truevault-polaris.json +8 -0
  68. package/rules/autoconsent/ubisoft-com.json +64 -0
  69. package/rules/autoconsent/volvocars-com.json +1 -1
  70. package/rules/autoconsent/wbd-legal-terms.json +28 -10
  71. package/rules/compact-rules.json +1 -1
  72. package/rules/rule-index.json +1 -1
  73. package/rules/rules.json +1 -1
  74. package/tests/accurx.spec.ts +3 -0
  75. package/tests/aliexpress.spec.ts +5 -1
  76. package/tests/burpee-com.spec.ts +3 -0
  77. package/tests/ccm19.spec.ts +11 -0
  78. package/tests/channel4.spec.ts +7 -3
  79. package/tests/citizensadvice.spec.ts +3 -0
  80. package/tests/civic-cookie-control.spec.ts +9 -1
  81. package/tests/clasohlson.com.spec.ts +3 -0
  82. package/tests/cm-cookie-manager.spec.ts +11 -0
  83. package/tests/community.screwfix.com.spec.ts +5 -0
  84. package/tests/complianz-optin.spec.ts +5 -1
  85. package/tests/concept3d.spec.ts +8 -0
  86. package/tests/conextra.spec.ts +8 -0
  87. package/tests/cookie-script.spec.ts +8 -3
  88. package/tests/cookiecuttr.spec.ts +8 -1
  89. package/tests/craft-cookie-consent.spec.ts +9 -0
  90. package/tests/cz-eshop-cookies-consent.spec.ts +10 -0
  91. package/tests/depop.spec.ts +3 -1
  92. package/tests/dsgvo.spec.ts +8 -10
  93. package/tests/dwaalzin-nu.spec.ts +6 -0
  94. package/tests/elsevier.spec.ts +5 -1
  95. package/tests/eneba.spec.ts +3 -0
  96. package/tests/europa-eu.spec.ts +6 -1
  97. package/tests/finna.spec.ts +3 -0
  98. package/tests/head-fi.spec.ts +3 -0
  99. package/tests/istore-co-za.spec.ts +3 -0
  100. package/tests/kiwico.spec.ts +5 -0
  101. package/tests/la-becanerie.spec.ts +3 -0
  102. package/tests/lta.spec.ts +7 -0
  103. package/tests/meteored.spec.ts +9 -0
  104. package/tests/mizuno-com.spec.ts +7 -0
  105. package/tests/mobirise-cookies-alert-cosmetic.spec.ts +8 -0
  106. package/tests/mobirise-cookies-alert.spec.ts +3 -0
  107. package/tests/msg-cookie.spec.ts +10 -0
  108. package/tests/pigu.spec.ts +3 -0
  109. package/tests/plentyshop.spec.ts +7 -0
  110. package/tests/posthog.spec.ts +3 -0
  111. package/tests/quantcast.spec.ts +15 -7
  112. package/tests/quick-cookie-consent.spec.ts +8 -0
  113. package/tests/schadefonds.spec.ts +3 -0
  114. package/tests/service2school.spec.ts +3 -0
  115. package/tests/sportmedizin-rheuma.spec.ts +3 -0
  116. package/tests/tealium.spec.ts +3 -0
  117. package/tests/tracsis-delay-repay.spec.ts +6 -0
  118. package/tests/truendo.spec.ts +9 -0
  119. package/tests/ubisoft-com.spec.ts +12 -0
  120. package/tests/wbd-legal-terms.spec.ts +2 -0
  121. package/tests-wtr/dom-actions/dom-actions.click.ts +18 -0
  122. package/Dockerfile +0 -9
  123. package/rules/autoconsent/sandhills.json +0 -26
  124. package/tests/sandhills.spec.ts +0 -8
@@ -8,71 +8,133 @@
8
8
  ],
9
9
  "detectPopup": [
10
10
  {
11
- "visible": "#qc-cmp2-ui"
11
+ "comment": "#qc-cmp2-ui is the GDPR dialog, #qc-cmp2-usp the US 'Do Not Process My Personal Information' (USP/MSPA) dialog",
12
+ "visible": "#qc-cmp2-ui,#qc-cmp2-usp"
12
13
  }
13
14
  ],
14
15
  "optOut": [
15
16
  {
17
+ "comment": "US dialog: opt out with the toggles, then confirm",
16
18
  "if": {
17
- "exists": "#disagree-btn"
19
+ "exists": "#qc-cmp2-usp"
18
20
  },
19
21
  "then": [
20
22
  {
21
- "click": "#disagree-btn"
22
- }
23
- ],
24
- "else": [
23
+ "waitFor": "#qc-cmp2-usp .qc-cmp2-list-item-header,#qc-cmp2-usp .qc-cmp2-toggle-switch",
24
+ "timeout": 2000,
25
+ "optional": true
26
+ },
27
+ {
28
+ "comment": "some sites render the opt-out list collapsed, without toggles until it's expanded",
29
+ "click": "#qc-cmp2-usp .qc-cmp2-list-item:not(:has(.qc-cmp2-toggle-switch)) > .qc-cmp2-list-item-header",
30
+ "all": true,
31
+ "optional": true
32
+ },
33
+ {
34
+ "waitFor": "#qc-cmp2-usp .qc-cmp2-toggle-switch",
35
+ "timeout": 2000,
36
+ "optional": true
37
+ },
38
+ {
39
+ "comment": "each toggle reads 'I want to opt-out of ...', so switching them on is the opt-out",
40
+ "click": "#qc-cmp2-usp .qc-cmp2-toggle-switch > button[aria-checked=\"false\"]",
41
+ "all": true,
42
+ "optional": true
43
+ },
25
44
  {
26
- "waitFor": ".qc-cmp2-summary-buttons > button[mode=\"secondary\"]",
45
+ "waitForThenClick": "#qc-cmp2-usp .qc-usp-ui-form-content button[mode=\"primary\"]",
27
46
  "timeout": 2000
28
47
  },
29
48
  {
49
+ "comment": "confirming opens a success modal that stays until it's closed",
50
+ "waitForThenClick": "#qc-cmp2-mspa-success-modal button",
51
+ "timeout": 2000,
52
+ "optional": true
53
+ }
54
+ ],
55
+ "else": [
56
+ {
57
+ "comment": "match the reject button even while it's disabled: falling through to the branch below would click it too early",
30
58
  "if": {
31
- "exists": ".qc-cmp2-summary-buttons > button[mode=\"secondary\"]:nth-of-type(2)"
59
+ "exists": "#disagree-btn"
32
60
  },
33
61
  "then": [
34
62
  {
35
- "click": ".qc-cmp2-summary-buttons > button[mode=\"secondary\"]:nth-of-type(2)"
63
+ "comment": "the reject button renders disabled with a loader, and clicks on it are dropped until it's enabled",
64
+ "waitForThenClick": "#disagree-btn:not([disabled])",
65
+ "timeout": 5000
36
66
  }
37
67
  ],
38
68
  "else": [
39
69
  {
40
- "click": ".qc-cmp2-summary-buttons > button[mode=\"secondary\"]:nth-of-type(1)"
41
- },
42
- {
43
- "waitForVisible": "#qc-cmp2-ui .qc-cmp2-consent-info"
44
- },
45
- {
46
- "click": ".qc-cmp2-toggle-switch > button[aria-checked=\"true\"]",
47
- "all": true,
48
- "optional": true
49
- },
50
- {
51
- "click": [
52
- ".qc-cmp2-main",
53
- "xpath///button[contains(., 'REJECT ALL') or contains(., 'ALLE VERWERPEN') or contains(., 'ΑΠΟΡΡΙΠΤΩ ΤΑ ΠΑΝΤΑ') or contains(., 'RESPINGERE TOTALĂ') or contains(., 'ALLE ABLEHNEN') or contains(., 'ODRZUCENIE') or contains(., 'BLOQUEAR TODO') or contains(., 'REJEITAR TODOS') or contains(., 'RIFIUTA TUTTO') or contains(., 'TOUT REFUSER') or contains(., 'ОТКЛОНИТЬ ВСЕХ')]"
54
- ],
55
- "optional": true
56
- },
57
- {
58
- "wait": 500
70
+ "waitFor": ".qc-cmp2-summary-buttons button[mode=\"secondary\"]",
71
+ "timeout": 2000
59
72
  },
60
73
  {
74
+ "comment": "without #disagree-btn, a secondary button in second place rejects; otherwise reject from the 'more options' screen",
61
75
  "if": {
62
- "exists": ".qc-cmp2-buttons-desktop > button[mode=primary]"
76
+ "exists": ".qc-cmp2-summary-buttons button[mode=\"secondary\"]:nth-of-type(2)"
63
77
  },
64
78
  "then": [
65
79
  {
66
- "click": ".qc-cmp2-buttons-desktop > button[mode=primary]"
80
+ "click": ".qc-cmp2-summary-buttons button[mode=\"secondary\"]:nth-of-type(2)"
67
81
  }
68
82
  ],
69
83
  "else": [
70
84
  {
71
- "waitForThenClick": [
85
+ "click": ".qc-cmp2-summary-buttons button[mode=\"secondary\"]:nth-of-type(1)"
86
+ },
87
+ {
88
+ "waitForVisible": "#qc-cmp2-ui .qc-cmp2-consent-info"
89
+ },
90
+ {
91
+ "comment": "turn off the purposes that are switched on by default",
92
+ "click": ".qc-cmp2-toggle-switch > button[aria-checked=\"true\"]",
93
+ "all": true,
94
+ "optional": true
95
+ },
96
+ {
97
+ "comment": "'Reject all' has a localized label",
98
+ "click": [
72
99
  ".qc-cmp2-main",
73
- "xpath///button[contains(.,'SAVE & EXIT') or contains(.,'SALVA ED ESCI') or contains(.,'GUARDAR Y SALIR') or contains(.,'SPEICHERN & VERLASSEN')"
100
+ "xpath///button[contains(., 'REJECT ALL') or contains(., 'ALLE VERWERPEN') or contains(., 'ΑΠΟΡΡΙΠΤΩ ΤΑ ΠΑΝΤΑ') or contains(., 'RESPINGERE TOTALĂ') or contains(., 'ALLE ABLEHNEN') or contains(., 'ODRZUCENIE') or contains(., 'BLOQUEAR TODO') or contains(., 'REJEITAR TODOS') or contains(., 'RIFIUTA TUTTO') or contains(., 'TOUT REFUSER') or contains(., 'ОТКЛОНИТЬ ВСЕХ')]"
74
101
  ],
75
- "timeout": 5000
102
+ "optional": true
103
+ },
104
+ {
105
+ "comment": "'Reject all' can save and close the dialog on its own; give it up to 1s to close before the visibility check",
106
+ "waitForVisible": "#qc-cmp2-ui",
107
+ "check": "none",
108
+ "timeout": 1000,
109
+ "optional": true
110
+ },
111
+ {
112
+ "comment": "only save if 'Reject all' left the dialog open",
113
+ "if": {
114
+ "visible": "#qc-cmp2-ui"
115
+ },
116
+ "then": [
117
+ {
118
+ "comment": "'Save & Exit' is the primary button in the desktop layout; otherwise match its localized label",
119
+ "if": {
120
+ "exists": ".qc-cmp2-buttons-desktop > button[mode=primary]"
121
+ },
122
+ "then": [
123
+ {
124
+ "click": ".qc-cmp2-buttons-desktop > button[mode=primary]"
125
+ }
126
+ ],
127
+ "else": [
128
+ {
129
+ "waitForThenClick": [
130
+ ".qc-cmp2-main",
131
+ "xpath///button[contains(.,'SAVE & EXIT') or contains(.,'SALVA ED ESCI') or contains(.,'GUARDAR Y SALIR') or contains(.,'SPEICHERN & VERLASSEN')"
132
+ ],
133
+ "timeout": 5000
134
+ }
135
+ ]
136
+ }
137
+ ]
76
138
  }
77
139
  ]
78
140
  }
@@ -83,7 +145,7 @@
83
145
  ],
84
146
  "optIn": [
85
147
  {
86
- "click": ".qc-cmp2-summary-buttons > button[mode=\"primary\"]"
148
+ "click": ".qc-cmp2-summary-buttons button[mode=\"primary\"]"
87
149
  }
88
150
  ]
89
151
  }
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "quick-cookie-consent",
3
+ "vendorUrl": "https://privacypolicies.com/cookie-consent/",
4
+ "prehideSelectors": [".cookieconsent-popup:has(.ui-icon-wrench)"],
5
+ "detectCmp": [
6
+ {
7
+ "exists": ".cookieconsent-popup .cookieconsent-button-wrap button:has(.ui-icon-wrench)"
8
+ }
9
+ ],
10
+ "detectPopup": [
11
+ {
12
+ "visible": ".cookieconsent-popup .cookieconsent-button-wrap button:has(.ui-icon-wrench)"
13
+ }
14
+ ],
15
+ "optIn": [
16
+ {
17
+ "waitForThenClick": ".cookieconsent-popup .cookieconsent-button-wrap button:has(.ui-icon-close)"
18
+ }
19
+ ],
20
+ "optOut": [
21
+ {
22
+ "waitForThenClick": ".cookieconsent-popup .cookieconsent-button-wrap button:has(.ui-icon-wrench)"
23
+ },
24
+ {
25
+ "waitForVisible": ".cookieconsent-edit-settings .cookieconsent-level-changer"
26
+ },
27
+ {
28
+ "if": {
29
+ "exists": ".cookieconsent-level-changer > a:nth-of-type(2).activated"
30
+ },
31
+ "then": [
32
+ {
33
+ "click": ".cookieconsent-level-changer > a:first-of-type"
34
+ }
35
+ ]
36
+ },
37
+ {
38
+ "if": {
39
+ "exists": ".cookieconsent-edit-settings .cookieconsent-dialog-close-btn"
40
+ },
41
+ "then": [
42
+ {
43
+ "click": ".cookieconsent-edit-settings .cookieconsent-dialog-close-btn"
44
+ }
45
+ ],
46
+ "else": [
47
+ {
48
+ "click": ".cookieconsent-edit-settings .cookieconsent-dialog-close"
49
+ }
50
+ ]
51
+ }
52
+ ],
53
+ "test": [
54
+ {
55
+ "cookieContains": "cookie_consent_level="
56
+ },
57
+ {
58
+ "cookieContains": "cookie_consent_level=tracking",
59
+ "negated": true
60
+ },
61
+ {
62
+ "cookieContains": "cookie_consent_level=targeting",
63
+ "negated": true
64
+ },
65
+ {
66
+ "cookieContains": "cookie_consent_level=functional",
67
+ "negated": true
68
+ }
69
+ ]
70
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "schadefonds",
3
+ "vendorUrl": "https://www.schadefonds.nl/",
4
+ "runContext": {
5
+ "urlPattern": "^https?://(www\\.)?schadefonds\\.nl/"
6
+ },
7
+ "prehideSelectors": [".cc-window[aria-describedby=\"cookieconsent:desc\"]"],
8
+ "detectCmp": [{ "exists": ".cc-window.cc-type-info[aria-describedby=\"cookieconsent:desc\"] .cc-dismiss" }],
9
+ "detectPopup": [{ "visible": ".cc-window.cc-type-info[aria-describedby=\"cookieconsent:desc\"] .cc-dismiss" }],
10
+ "optIn": [{ "waitForThenClick": ".cc-window[aria-describedby=\"cookieconsent:desc\"] .cc-dismiss" }],
11
+ "optOut": [
12
+ { "waitFor": "body.cookie-overlay", "timeout": 2000, "optional": true },
13
+ { "waitForThenClick": ".cc-window[aria-describedby=\"cookieconsent:desc\"] .cc-dismiss" }
14
+ ]
15
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "service2school",
3
+ "vendorUrl": "https://service2school.org/",
4
+ "runContext": {
5
+ "urlPattern": "^https?://(www\\.)?service2school\\.org/"
6
+ },
7
+ "prehideSelectors": [".cookie-banner-mount-point", "#hs-eu-cookie-confirmation"],
8
+ "detectCmp": [
9
+ {
10
+ "exists": ".cookie-banner-mount-point section[aria-label='Cookie banner'] button.accept"
11
+ },
12
+ {
13
+ "cookieContains": "__hs_opt_out=",
14
+ "negated": true
15
+ }
16
+ ],
17
+ "detectPopup": [
18
+ {
19
+ "visible": ".cookie-banner-mount-point section[aria-label='Cookie banner']"
20
+ }
21
+ ],
22
+ "optIn": [
23
+ {
24
+ "waitForThenClick": ".cookie-banner-mount-point button.accept"
25
+ },
26
+ {
27
+ "waitForThenClick": "#hs-eu-confirmation-button",
28
+ "timeout": 5000
29
+ }
30
+ ],
31
+ "optOut": [
32
+ {
33
+ "hide": ".cookie-banner-mount-point"
34
+ },
35
+ {
36
+ "waitForThenClick": "#hs-eu-decline-button",
37
+ "timeout": 5000
38
+ }
39
+ ],
40
+ "test": [
41
+ {
42
+ "cookieContains": "__hs_opt_out=yes"
43
+ }
44
+ ]
45
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "sportmedizin-rheuma",
3
+ "vendorUrl": "https://www.sportmedizin-rheuma.de/",
4
+ "cosmetic": true,
5
+ "runContext": {
6
+ "urlPattern": "^https?://(www\\.)?sportmedizin-rheuma\\.de/"
7
+ },
8
+ "prehideSelectors": [".cc-type-info[aria-describedby=\"cookieconsent:desc\"]"],
9
+ "detectCmp": [{ "exists": ".cc-type-info[aria-describedby=\"cookieconsent:desc\"] .cc-compliance .cc-btn" }],
10
+ "detectPopup": [{ "visible": ".cc-type-info[aria-describedby=\"cookieconsent:desc\"] .cc-compliance .cc-btn" }],
11
+ "optIn": [{ "waitForThenClick": ".cc-type-info[aria-describedby=\"cookieconsent:desc\"] .cc-dismiss" }],
12
+ "optOut": [
13
+ { "hide": "[aria-describedby=\"cookieconsent:desc\"], .cc_overlay_bg" },
14
+ { "stylesheet": "body#home { overflow: visible !important; }" }
15
+ ],
16
+ "minimumRuleStepVersion": 3
17
+ }
@@ -6,11 +6,17 @@
6
6
  "optOut": [
7
7
  { "eval": "EVAL_TEALIUM_1" },
8
8
  { "eval": "EVAL_TEALIUM_DONOTSELL" },
9
- { "hide": "#__tealiumGDPRecModal,#__tealiumGDPRcpPrefs,#__tealiumImplicitmodal" },
10
9
  {
11
- "waitForThenClick": "#cm-acceptNone,.js-accept-essential-cookies,#continueWithoutAccepting,#no_consent,#consent_prompt_decline,#teal-decline-consent",
12
- "timeout": 1000,
13
- "optional": true
10
+ "if": { "exists": "#__tealiumGDPRecModal #rejectAll" },
11
+ "then": [{ "waitForThenClick": "#__tealiumGDPRecModal #rejectAll" }],
12
+ "else": [
13
+ { "hide": "#__tealiumGDPRecModal,#__tealiumGDPRcpPrefs,#__tealiumImplicitmodal" },
14
+ {
15
+ "waitForThenClick": "#cm-acceptNone,.js-accept-essential-cookies,#continueWithoutAccepting,#no_consent,#consent_prompt_decline,#teal-decline-consent",
16
+ "timeout": 1000,
17
+ "optional": true
18
+ }
19
+ ]
14
20
  }
15
21
  ],
16
22
  "optIn": [{ "hide": "#__tealiumGDPRecModal,#__tealiumGDPRcpPrefs" }, { "eval": "EVAL_TEALIUM_2" }],
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "tracsis-delay-repay",
3
+ "vendorUrl": "https://www.delayrepaycompensation.com/",
4
+ "cosmetic": false,
5
+ "prehideSelectors": [".my-cookie-wrapper.cc-window"],
6
+ "detectCmp": [{ "exists": ".my-cookie-wrapper [aria-describedby=\"cookieconsent:desc\"] .cc-reject-all" }],
7
+ "detectPopup": [{ "visible": ".my-cookie-wrapper [aria-describedby=\"cookieconsent:desc\"] .cc-reject-all" }],
8
+ "optIn": [{ "waitForThenClick": ".my-cookie-wrapper:not(.cc-invisible) [aria-describedby=\"cookieconsent:desc\"] .cc-dismiss" }],
9
+ "optOut": [
10
+ { "waitForThenClick": ".my-cookie-wrapper:not(.cc-invisible) [aria-describedby=\"cookieconsent:desc\"] .cc-reject-all", "retry": 2 }
11
+ ],
12
+ "test": [{ "cookieContains": "cookieconsent_dismissed1=reject_all" }]
13
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "truendo",
3
+ "prehideSelectors": ["#truendo_container .tru_cookie-dialog_wrapper"],
4
+ "detectCmp": [{ "exists": "#truendo_container .tru_cookie-dialog_wrapper" }],
5
+ "detectPopup": [{ "visible": "#truendo_container .tru_cookie-dialog_wrapper" }],
6
+ "optIn": [
7
+ {
8
+ "waitForThenClick": ".tru_cookie-dialog_wrapper [data-cy=banner-ack-btn], .tru_cookie-dialog_wrapper #tru_accept_btn, .tru_cookie-dialog_wrapper button.tru_cookie-dialog_ok:not(#tru_deselect_btn)"
9
+ }
10
+ ],
11
+ "optOut": [
12
+ {
13
+ "if": { "exists": ".tru_cookie-dialog_accept-only" },
14
+ "then": [{ "click": ".tru_cookie-dialog_accept-only .tru_cookie-dialog_message a[href='']" }],
15
+ "else": [
16
+ {
17
+ "click": ".tru_cookie-dialog_wrapper [data-cy=banner-options-btn], .tru_cookie-dialog_wrapper [data-cy=optionsBtn], .tru_cookie-dialog_wrapper #tru_options_btn"
18
+ }
19
+ ]
20
+ },
21
+ { "waitForVisible": "#truendo_container [data-cy=action-button-necessary]", "timeout": 2000, "optional": true },
22
+ {
23
+ "if": { "visible": "#truendo_container [data-cy=action-button-necessary]" },
24
+ "then": [{ "click": "#truendo_container [data-cy=action-button-necessary]" }]
25
+ }
26
+ ],
27
+ "test": [{ "cookieContains": "%22marketing%22%3Afalse" }]
28
+ }
@@ -44,6 +44,14 @@
44
44
  "all": true,
45
45
  "optional": true
46
46
  },
47
+ {
48
+ "click": [
49
+ "#polaris-css-lockdown-container",
50
+ ".polaris-preferences-widget input[type=checkbox]:checked:not([disabled])"
51
+ ],
52
+ "all": true,
53
+ "optional": true
54
+ },
47
55
  {
48
56
  "click": ["#polaris-css-lockdown-container", ".polaris-preferences-widget__save_button"]
49
57
  }
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "ubisoft.com",
3
+ "vendorUrl": "https://www.ubisoft.com/",
4
+ "runContext": {
5
+ "urlPattern": "^https?://(\\w+\\.)?ubisoft\\.com/"
6
+ },
7
+ "prehideSelectors": ["#privacy_modal", "#footer_tc_privacy"],
8
+ "detectCmp": [
9
+ {
10
+ "exists": "#privacy__modal__close, #footer_tc_privacy #privacy__links__center"
11
+ }
12
+ ],
13
+ "detectPopup": [
14
+ {
15
+ "visible": "#privacy__modal__close, #footer_tc_privacy",
16
+ "check": "any"
17
+ }
18
+ ],
19
+ "optIn": [
20
+ {
21
+ "if": {
22
+ "exists": "#privacy__modal__accept"
23
+ },
24
+ "then": [
25
+ {
26
+ "waitForThenClick": "#privacy__modal__accept"
27
+ }
28
+ ],
29
+ "else": [
30
+ {
31
+ "waitForThenClick": "#footer_tc_privacy_button"
32
+ }
33
+ ]
34
+ }
35
+ ],
36
+ "optOut": [
37
+ {
38
+ "if": {
39
+ "exists": "#privacy__modal__close"
40
+ },
41
+ "then": [
42
+ {
43
+ "waitForThenClick": "#privacy__modal__close"
44
+ }
45
+ ],
46
+ "else": [
47
+ {
48
+ "waitForThenClick": "#footer_tc_privacy #privacy__links__center"
49
+ },
50
+ {
51
+ "waitForThenClick": "#privacy_options #options_tc_privacy_button"
52
+ }
53
+ ]
54
+ }
55
+ ],
56
+ "test": [
57
+ {
58
+ "cookieContains": "UBI_PRIVACY_POLICY_VIEWED=true"
59
+ },
60
+ {
61
+ "cookieContains": "UBI_PRIVACY_ADS_OPTOUT=true"
62
+ }
63
+ ]
64
+ }
@@ -38,7 +38,7 @@
38
38
  ],
39
39
  "test": [
40
40
  {
41
- "cookieContains": "groups=C1%3A1%2CC3%3A0"
41
+ "cookieContains": "groups=C1%3A1%2CC2%3A0%2CC3%3A0%2CC4%3A0"
42
42
  }
43
43
  ]
44
44
  }
@@ -1,32 +1,50 @@
1
1
  {
2
2
  "name": "wbd-legal-terms",
3
3
  "vendorUrl": "https://www.wbd.com/",
4
- "comment": "Terms-and-cookies notice with only an Agree button. It is a modal <dialog>, so hiding it with CSS leaves the page inert; close it without submitting the form instead.",
4
+ "comment": "Terms-and-cookies notice with only an Agree button. The <dialog> variant is modal, so hiding it with CSS leaves the page inert; close it without submitting the form instead. The MUI modal variant cannot be dismissed, so it is hidden.",
5
5
  "cosmetic": true,
6
6
  "minimumRuleStepVersion": 2,
7
7
  "detectCmp": [
8
8
  {
9
- "exists": "dialog#ltp-dialog"
9
+ "exists": "dialog#ltp-dialog, [id=\"id/ltp\"]"
10
10
  }
11
11
  ],
12
12
  "detectPopup": [
13
13
  {
14
- "visible": "dialog#ltp-dialog[open]"
14
+ "visible": "dialog#ltp-dialog[open], [id=\"id/ltp/banner\"]",
15
+ "check": "any"
15
16
  }
16
17
  ],
17
18
  "optIn": [
18
19
  {
19
- "waitForThenClick": "#ltp-submit-btn"
20
+ "waitForThenClick": "#ltp-submit-btn, [id=\"id/ltp/banner/button\"]"
20
21
  }
21
22
  ],
22
23
  "optOut": [
23
24
  {
24
- "eval": "EVAL_WBD_LTP_CLOSE"
25
- },
26
- {
27
- "removeClass": "is-NoScroll",
28
- "selector": "body",
29
- "optional": true
25
+ "if": {
26
+ "exists": "dialog#ltp-dialog"
27
+ },
28
+ "then": [
29
+ {
30
+ "eval": "EVAL_WBD_LTP_CLOSE"
31
+ },
32
+ {
33
+ "removeClass": "is-NoScroll",
34
+ "selector": "body",
35
+ "optional": true
36
+ }
37
+ ],
38
+ "else": [
39
+ {
40
+ "hide": "[id=\"id/ltp\"]"
41
+ },
42
+ {
43
+ "addStyle": "overflow: auto !important",
44
+ "selector": "body",
45
+ "optional": true
46
+ }
47
+ ]
30
48
  }
31
49
  ]
32
50
  }