| // META: title=StorageManager: estimate() for service worker registrations |
| const wait_for_active = worker => new Promise(resolve =>{ |
| if (worker.active) { resolve(worker.active); } |
| |
| const listen_for_active = worker => e => { |
| if (e.target.state === 'activated') { resolve(worker.active); } |
| } |
| |
| if (worker.waiting) { |
| worker.waiting |
| .addEventListener('statechange', listen_for_active(worker.waiting)); |
| } |
| if (worker.installing) { |
| worker.installing |
| .addEventListener('statechange', listen_for_active(worker.installing)); |
| } |
| }); |
| |
| promise_test(async t => { |
| let estimate = await navigator.storage.estimate(); |
| const usageBeforeCreate = estimate.usageDetails.serviceWorkerRegistrations || |
| 0; |
| // Note: helpers.js is an arbitrary file; it could be any file that |
| // exists, but this test does not depend on the contents of said file. |
| const serviceWorkerRegistration = await |
| navigator.serviceWorker.register('./helpers.js'); |
| |
| t.add_cleanup(() => serviceWorkerRegistration.unregister()); |
| await wait_for_active(serviceWorkerRegistration); |
| |
| estimate = await navigator.storage.estimate(); |
| assert_true('serviceWorkerRegistrations' in estimate.usageDetails); |
| |
| const usageAfterCreate = estimate.usageDetails.serviceWorkerRegistrations; |
| assert_greater_than( |
| usageAfterCreate, usageBeforeCreate, |
| 'estimated usage should increase after service worker is registered'); |
| }, 'estimate() shows usage increase after large value is stored'); |