Skip to content

Commit 0618536

Browse files
authored
chore(adblock): use adblock helpers (#652)
1 parent 4e05f82 commit 0618536

File tree

2 files changed

+47
-18
lines changed

2 files changed

+47
-18
lines changed

packages/goto/src/adblock.js

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -86,23 +86,11 @@ const setupAutoConsent = async page => {
8686
const runAutoConsent = page => page.evaluate(autoconsentPlaywrightScript)
8787

8888
const enableBlockingInPage = (page, run, actionTimeout) => {
89-
let adblockContext
90-
91-
page.disableAdblock = () => {
92-
// TODO: drop this when https://github.com/ghostery/adblocker/pull/5161 is merged
93-
engine.contexts.delete(page)
94-
95-
if (adblockContext.blocker.config.loadNetworkFilters) {
96-
adblockContext.page.off('request', adblockContext.onRequest)
97-
}
98-
99-
if (adblockContext.blocker.config.loadCosmeticFilters) {
100-
adblockContext.page.off('frameattached', adblockContext.onFrameNavigated)
101-
adblockContext.page.off('domcontentloaded', adblockContext.onDomContentLoaded)
102-
}
103-
104-
debug('disabled')
105-
}
89+
page.disableAdblock = () =>
90+
engine
91+
.disableBlockingInPage(page, { keepRequestInterception: true })
92+
.then(() => debug('disabled'))
93+
.catch(() => {})
10694

10795
return [
10896
run({
@@ -111,7 +99,7 @@ const enableBlockingInPage = (page, run, actionTimeout) => {
11199
debug: 'autoconsent:setup'
112100
}),
113101
run({
114-
fn: engine.enableBlockingInPage(page).then(context => (adblockContext = context)),
102+
fn: engine.enableBlockingInPage(page),
115103
timeout: actionTimeout,
116104
debug: 'adblock'
117105
})

packages/goto/test/unit/adblock/index.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,44 @@ test('skip autoconsent setup when `adblock` is false', async t => {
5353

5454
t.false(calls.includes('autoconsentSendMessage'))
5555
})
56+
57+
test('`disableAdblock` removes blocker listeners and keeps request interception enabled', async t => {
58+
const browserless = await getBrowserContext(t)
59+
const url = await getUrl(t)
60+
61+
const run = browserless.withPage((page, goto) => async () => {
62+
const interceptionCalls = []
63+
const originalSetRequestInterception = page.setRequestInterception.bind(page)
64+
page.setRequestInterception = enabled => {
65+
interceptionCalls.push(enabled)
66+
return originalSetRequestInterception(enabled)
67+
}
68+
69+
await goto(page, { url, adblock: true })
70+
71+
const listenersBeforeDisable = {
72+
request: page.listenerCount('request'),
73+
frameattached: page.listenerCount('frameattached'),
74+
domcontentloaded: page.listenerCount('domcontentloaded')
75+
}
76+
77+
await page.disableAdblock()
78+
const listenersAfterDisable = {
79+
request: page.listenerCount('request'),
80+
frameattached: page.listenerCount('frameattached'),
81+
domcontentloaded: page.listenerCount('domcontentloaded')
82+
}
83+
await page.disableAdblock()
84+
85+
return { interceptionCalls, listenersBeforeDisable, listenersAfterDisable }
86+
})
87+
88+
const { interceptionCalls, listenersBeforeDisable, listenersAfterDisable } = await run()
89+
90+
t.true(interceptionCalls.includes(true))
91+
t.false(interceptionCalls.includes(false))
92+
93+
t.true(listenersAfterDisable.request < listenersBeforeDisable.request)
94+
t.true(listenersAfterDisable.frameattached <= listenersBeforeDisable.frameattached)
95+
t.true(listenersAfterDisable.domcontentloaded <= listenersBeforeDisable.domcontentloaded)
96+
})

0 commit comments

Comments
 (0)