| OLD | NEW | 
| (Empty) |  | 
 |   1 <!DOCTYPE html> | 
 |   2 <script src="/resources/testharness.js"></script> | 
 |   3 <script src="/resources/testharnessreport.js"></script> | 
 |   4 <script src="/common/get-host-info.sub.js"></script> | 
 |   5 <script src="resources/test-helpers.sub.js"></script> | 
 |   6 <body> | 
 |   7 <script> | 
 |   8 const worker = 'resources/fetch-event-within-sw-worker.js'; | 
 |   9  | 
 |  10 function reset() { | 
 |  11   for (const iframe of [...document.querySelectorAll('.test-iframe')]) { | 
 |  12     iframe.remove(); | 
 |  13   } | 
 |  14   return navigator.serviceWorker.getRegistrations().then(registrations => { | 
 |  15     return Promise.all(registrations.map(r => r.unregister())); | 
 |  16   }).then(() => caches.keys()).then(cacheKeys => { | 
 |  17     return Promise.all(cacheKeys.map(c => caches.delete(c))); | 
 |  18   }); | 
 |  19 } | 
 |  20  | 
 |  21 add_completion_callback(reset); | 
 |  22  | 
 |  23 function regReady(reg) { | 
 |  24   return new Promise((resolve, reject) => { | 
 |  25     if (reg.active) { | 
 |  26       resolve(); | 
 |  27       return; | 
 |  28     } | 
 |  29     const nextWorker = reg.waiting || reg.installing; | 
 |  30  | 
 |  31     nextWorker.addEventListener('statechange', () => { | 
 |  32       if (nextWorker.state == 'redundant') { | 
 |  33         reject(Error(`Service worker failed to install`)); | 
 |  34         return; | 
 |  35       } | 
 |  36       if (nextWorker.state == 'activated') { | 
 |  37         resolve(); | 
 |  38       } | 
 |  39     }); | 
 |  40   }); | 
 |  41 } | 
 |  42  | 
 |  43 function registerSwAndOpenFrame() { | 
 |  44   return reset().then(() => navigator.serviceWorker.register(worker, { scope: 'r
    esources/' })) | 
 |  45     .then(reg => regReady(reg)) | 
 |  46     .then(() => with_iframe('resources/simple.html')); | 
 |  47 } | 
 |  48  | 
 |  49 promise_test(() => { | 
 |  50   return registerSwAndOpenFrame().then(iframe => { | 
 |  51     return Promise.all([ | 
 |  52       iframe.contentWindow.fetch('dummy.txt').then(r => r.text()), | 
 |  53       iframe.contentWindow.caches.open('test') | 
 |  54         .then(cache => | 
 |  55           cache.add('dummy.txt').then(() => cache.match('dummy.txt')) | 
 |  56         ).then(response => { | 
 |  57           if (!response) return 'cache match failed'; | 
 |  58           return response.text(); | 
 |  59         }) | 
 |  60     ]) | 
 |  61   }).then(([fetchText, cacheText]) => { | 
 |  62     assert_equals(fetchText, 'intercepted', 'fetch intercepted'); | 
 |  63     assert_equals(cacheText, 'intercepted', 'cache.add intercepted'); | 
 |  64   }); | 
 |  65 }, 'Service worker intercepts requests from window'); | 
 |  66  | 
 |  67 promise_test(() => { | 
 |  68   return registerSwAndOpenFrame().then(iframe => { | 
 |  69     return Promise.all([ | 
 |  70       iframe.contentWindow.fetch('dummy.txt-inner-fetch').then(r => r.text()), | 
 |  71       iframe.contentWindow.fetch('dummy.txt-inner-cache').then(r => r.text()) | 
 |  72     ]) | 
 |  73   }).then(([fetchText, cacheText]) => { | 
 |  74     assert_equals(fetchText, 'Hello world\n', 'fetch within SW not intercepted')
    ; | 
 |  75     assert_equals(cacheText, 'Hello world\n', 'cache.add within SW not intercept
    ed'); | 
 |  76   }); | 
 |  77 }, `Service worker does not intercept fetch/cache requests within service worker
    `); | 
 |  78 </script> | 
 |  79 </body> | 
| OLD | NEW |