diff --git a/lib/cmps/base.ts b/lib/cmps/base.ts index 402d607080..8bd78df199 100644 --- a/lib/cmps/base.ts +++ b/lib/cmps/base.ts @@ -389,6 +389,13 @@ export class AutoConsentCMP extends AutoConsentCMPBase { const result = await this.evaluateRuleStep(rule); logSteps && console.log('...rule result', result); if (!result && !rule.optional) { + this.autoconsent.sendContentMessage({ + type: 'autoconsentError', + details: { + msg: 'Rule step failed', + details: `${JSON.stringify(rule)}`, + }, + }); return false; } } diff --git a/lib/web.ts b/lib/web.ts index 484e1833f8..1864f2c86f 100644 --- a/lib/web.ts +++ b/lib/web.ts @@ -304,6 +304,13 @@ export default class AutoConsent { } } catch (e) { logsConfig.errors && console.warn(`error detecting ${cmp.name}`, e); + this.sendContentMessage({ + type: 'autoconsentError', + details: { + msg: 'error detecting CMP', + details: `${cmp.name}: ${e.message}`, + }, + }); } }; @@ -552,6 +559,13 @@ export default class AutoConsent { logsConfig.lifecycle && console.log('checking if popup is open...', cmp.name); const isOpen = await cmp.detectPopup().catch((e) => { logsConfig.errors && console.warn(`error detecting popup for ${cmp.name}`, e); + this.sendContentMessage({ + type: 'autoconsentError', + details: { + msg: 'error detecting popup', + details: `${cmp.name}: ${e.message}`, + }, + }); return false; }); // ignore possible errors in one-time popup detection if (!isOpen && retries > 0) { diff --git a/playwright/runner.ts b/playwright/runner.ts index f98a2fd711..3880e0a8c7 100644 --- a/playwright/runner.ts +++ b/playwright/runner.ts @@ -9,7 +9,7 @@ import { filterCompactRules } from '../lib/encoding'; import compactRules from '../rules/compact-rules.json'; const LOG_MESSAGES: ContentScriptMessage['type'][] = process.env.CI - ? [] + ? ['autoconsentError'] : ['optInResult', 'optOutResult', 'autoconsentDone', 'autoconsentError', 'selfTestResult']; const LOG_PAGE_LOGS = false; @@ -159,6 +159,15 @@ class TestRun { detectRetries: 20, enableCosmeticRules: true, visualTest: true, + logs: { + lifecycle: true, + rulesteps: true, + detectionsteps: false, + waits: false, + evals: false, + errors: true, + messages: false, + }, })}, rules: ${JSON.stringify({ compact: filterCompactRules(compactRules, { url, mainFrame }) })} })`, ); break; diff --git a/tests-wtr/rules/logical-rules.test.ts b/tests-wtr/rules/logical-rules.test.ts index 8a3e2881a3..125f48873d 100644 --- a/tests-wtr/rules/logical-rules.test.ts +++ b/tests-wtr/rules/logical-rules.test.ts @@ -17,6 +17,7 @@ describe('AutoConsentCMP', () => { logs: {}, }, domActions: domActionsMock, + sendContentMessage: sinon.stub(), // @ts-expect-error - it's a mock! state: {}, updateState: () => Promise.resolve(),