mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-29 04:31:46 +00:00
866e2f0aab
add timeout on loading of service worker GitOrigin-RevId: d2153c9abf1dbd6eee3b2fcfd770a21766ebb84e
65 lines
1.8 KiB
JavaScript
65 lines
1.8 KiB
JavaScript
import { captureException } from '../../../infrastructure/error-reporter'
|
|
const OError = require('@overleaf/o-error')
|
|
|
|
let pendingWorkerSetup = Promise.resolve()
|
|
|
|
function supportsServiceWorker() {
|
|
return 'serviceWorker' in navigator
|
|
}
|
|
|
|
export function waitForServiceWorker() {
|
|
return pendingWorkerSetup
|
|
}
|
|
|
|
export function loadServiceWorker(options) {
|
|
if (supportsServiceWorker()) {
|
|
const workerSetup = navigator.serviceWorker
|
|
.register('/serviceWorker.js', {
|
|
scope: '/project/',
|
|
})
|
|
.then(() => {
|
|
navigator.serviceWorker.addEventListener('message', event => {
|
|
let ctx
|
|
try {
|
|
ctx = JSON.parse(event.data)
|
|
} catch (e) {
|
|
return
|
|
}
|
|
if (!ctx || !ctx.error || !ctx.extra) return
|
|
|
|
const err = OError.tag(ctx.error, 'Error in serviceWorker')
|
|
const fullError = new Error()
|
|
fullError.name = err.name
|
|
fullError.message = err.message
|
|
fullError.stack = OError.getFullStack(err)
|
|
captureException(fullError, { extra: ctx.extra })
|
|
})
|
|
})
|
|
.catch(error =>
|
|
captureException(OError.tag(error, 'Cannot register serviceWorker'))
|
|
)
|
|
if (options && options.timeout > 0) {
|
|
const workerTimeout = new Promise(resolve => {
|
|
setTimeout(resolve, options.timeout)
|
|
})
|
|
pendingWorkerSetup = Promise.race([workerSetup, workerTimeout])
|
|
} else {
|
|
pendingWorkerSetup = workerSetup
|
|
}
|
|
}
|
|
}
|
|
|
|
export function unregisterServiceWorker() {
|
|
if (supportsServiceWorker()) {
|
|
if (navigator.serviceWorker.controller) {
|
|
navigator.serviceWorker.controller.postMessage({
|
|
type: 'disable',
|
|
})
|
|
}
|
|
navigator.serviceWorker.getRegistrations().then(registrations => {
|
|
registrations.forEach(worker => {
|
|
worker.unregister()
|
|
})
|
|
})
|
|
}
|
|
}
|