Skip to content

Commit 6127f11

Browse files
committed
Ensure the Playwright route handler is set up early enough
Tests were sometimes timing out, waiting for `background.forAllConfiguration()` to resolve. It turned out, that occasionally the request for the HTTPS bloom filter would start before the route handler could be set up, which resulted in the request sometimes failing and therefore `https.isReady` to remain false. Let's set up the route handler as soon as possible, to avoid that from happening.
1 parent d38fec9 commit 6127f11

File tree

1 file changed

+40
-37
lines changed

1 file changed

+40
-37
lines changed

integration-test/helpers/playwrightHarness.js

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,39 @@ export const mockAtb = {
3737
version: 'v364-2',
3838
};
3939

40+
const defaultRouteHandler = (route) => {
41+
const url = route.request().url();
42+
if (url.startsWith('https://staticcdn.duckduckgo.com/')) {
43+
return routeLocalResources(route);
44+
}
45+
if (url.startsWith('https://duckduckgo.com/atb.js')) {
46+
// mock ATB endpoint
47+
const params = new URL(url).searchParams;
48+
if (params.has('atb')) {
49+
const version = params.get('atb');
50+
const [majorVersion, minorVersion] = version.slice(1).split('-');
51+
if (majorVersion < 360 && minorVersion > 1) {
52+
return route.fulfill({
53+
body: JSON.stringify({
54+
...mockAtb,
55+
updateVersion: `v${majorVersion}-1`,
56+
}),
57+
});
58+
}
59+
}
60+
return route.fulfill({
61+
body: JSON.stringify(mockAtb),
62+
});
63+
}
64+
if (url.startsWith('https://duckduckgo.com/exti') || url.startsWith('https://improving.duckduckgo.com/')) {
65+
return route.fulfill({
66+
status: 200,
67+
body: '',
68+
});
69+
}
70+
route.continue();
71+
};
72+
4073
// based off example at https://playwright.dev/docs/chrome-extensions#testing
4174
export const test = base.extend({
4275
/**
@@ -53,6 +86,12 @@ export const test = base.extend({
5386
channel: 'chromium',
5487
args: [`--disable-extensions-except=${pathToExtension}`, `--load-extension=${pathToExtension}`],
5588
});
89+
90+
if (manifestVersion === 3) {
91+
// Serve extension background requests from local cache
92+
await context.route('**/*', defaultRouteHandler);
93+
}
94+
5695
// intercept extension install page and use HAR
5796
context.on('page', (page) => {
5897
// console.log('page', page.url())
@@ -71,40 +110,6 @@ export const test = base.extend({
71110
* @type {import('@playwright/test').Page | import('@playwright/test').Worker}
72111
*/
73112
async backgroundPage({ context, manifestVersion }, use) {
74-
// let background: Page | Worker
75-
const routeHandler = (route) => {
76-
const url = route.request().url();
77-
if (url.startsWith('https://staticcdn.duckduckgo.com/')) {
78-
return routeLocalResources(route);
79-
}
80-
if (url.startsWith('https://duckduckgo.com/atb.js')) {
81-
// mock ATB endpoint
82-
const params = new URL(url).searchParams;
83-
if (params.has('atb')) {
84-
const version = params.get('atb');
85-
const [majorVersion, minorVersion] = version.slice(1).split('-');
86-
if (majorVersion < 360 && minorVersion > 1) {
87-
return route.fulfill({
88-
body: JSON.stringify({
89-
...mockAtb,
90-
updateVersion: `v${majorVersion}-1`,
91-
}),
92-
});
93-
}
94-
}
95-
return route.fulfill({
96-
body: JSON.stringify(mockAtb),
97-
});
98-
}
99-
if (url.startsWith('https://duckduckgo.com/exti') || url.startsWith('https://improving.duckduckgo.com/')) {
100-
return route.fulfill({
101-
status: 200,
102-
body: '',
103-
});
104-
}
105-
route.continue();
106-
};
107-
108113
if (manifestVersion === 3) {
109114
// See https://playwright.dev/docs/service-workers
110115
const getBackgroundServiceWorker = async () => {
@@ -154,8 +159,6 @@ export const test = base.extend({
154159
throw new Error("Failed to find extension's background ServiceWorker.");
155160
}
156161

157-
// Serve extension background requests from local cache
158-
await context.route('**/*', routeHandler);
159162
await use(background);
160163
} else {
161164
let [background] = context.backgroundPages();
@@ -164,7 +167,7 @@ export const test = base.extend({
164167
}
165168

166169
// Serve extension background requests from local cache
167-
await background.route('**/*', routeHandler);
170+
await background.route('**/*', defaultRouteHandler);
168171
await use(background);
169172
}
170173
},

0 commit comments

Comments
 (0)