@@ -22,28 +22,58 @@ play.describe('browser service worker:', () => {
22
22
page . on ( "pageerror" , ( err ) => {
23
23
console . trace ( `pageerror: ${ err . message } ` )
24
24
} )
25
- await page . waitForSelector ( textDOM )
26
- await page . waitForSelector ( linkDOM )
25
+ // await page.waitForSelector(textDOM)
26
+ // await page.waitForSelector(linkDOM)
27
27
28
28
expect ( await page . textContent ( textDOM ) ) . toContain ( "Load content by adding IPFS path to the URL" )
29
29
expect ( await page . textContent ( linkDOM ) ) . toContain ( "/ipfs/bafy" )
30
30
31
- await page . waitForSelector ( `${ debugDOM } :has-text("SW is ready")` , {
32
- state : 'attached'
33
- } )
31
+ const ipfsRequestUrl = `http://localhost:${ servers [ 0 ] . port } /ipfs/Qmf412jQZiuVUtdgnB36FXFX7xg5V6KEbSJ4dpQuhkLyfD`
34
32
33
+ /**
34
+ * Wait for the service worker to be ready
35
+ * @see https://playwright.dev/docs/service-workers-experimental#accessing-service-workers-and-waiting-for-activation
36
+ */
35
37
await page . evaluate ( async ( ) => {
36
38
const registration = await window . navigator . serviceWorker . getRegistration ( ) ;
37
- console . log ( `registration?.active?.state: ` , registration ?. active ?. state ) ;
38
39
if ( registration ?. active ?. state === 'activated' ) {
40
+ console . log ( 'Service worker is already activated' )
39
41
return ;
40
42
}
41
- await new Promise ( res => window . navigator . serviceWorker . addEventListener ( 'controllerchange' , res ) ) ;
43
+ await /** @type {Promise<void> } */ ( new Promise ( res => {
44
+ window . navigator . serviceWorker . addEventListener ( 'controllerchange' , ( ) => {
45
+ console . log ( 'Service worker is activated' )
46
+ res ( )
47
+ } )
48
+ } ) ) ;
42
49
} ) ;
50
+ // await page.waitForSelector(`${debugDOM}:has-text("SW is ready")`, {
51
+ // state: 'attached'
52
+ // })
53
+
54
+ context . on ( 'request' , ( request ) => {
55
+ console . log ( `request.url(): ${ request . url ( ) } ` )
56
+ } )
57
+ context . on ( 'requestfailed' , ( request ) => {
58
+ console . log ( `requestfailed: ${ request . url ( ) } ` )
59
+ } )
60
+ const serviceWorkerResponsePromise = new Promise ( ( resolve , reject ) => {
61
+ context . on ( 'response' , ( response ) => {
62
+ console . log ( `response.url(): ${ response . url ( ) } ` )
63
+ if ( response . url ( ) === ipfsRequestUrl && response . fromServiceWorker ( ) ) {
64
+ resolve ( response ) ;
65
+ }
66
+ } )
67
+ } )
68
+ context . on ( 'response' , ( response ) => {
69
+ console . log ( `response.url(): ${ response . url ( ) } ` )
70
+ console . log ( `response.fromServiceWorker(): ` , response . fromServiceWorker ( ) ) ;
71
+ } )
43
72
44
73
// const currentURL = await page.url();
45
- await page . goto ( `http://localhost:${ servers [ 0 ] . port } /ipfs/Qmf412jQZiuVUtdgnB36FXFX7xg5V6KEbSJ4dpQuhkLyfD` , { waitUntil : 'commit' } ) ;
46
- await page . waitForSelector ( '#viewer' , { state : 'visible' } )
74
+ await page . goto ( ipfsRequestUrl , { waitUntil : 'commit' } ) ;
75
+ await serviceWorkerResponsePromise
76
+ // await page.waitForSelector('#viewer', {state: 'visible'})
47
77
48
78
const frameText2 = page . frameLocator ( '#viewer' ) . locator ( textDOM )
49
79
await frameText2 . waitFor ( { state : 'visible' } )
0 commit comments