Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Use lazy load for image blurrer worker
The image blurrer worker now is loaded only when it is actually needed,
so this should prevent the worker to be loaded on browsers other than
Chromium, as well as on Chromium if no call is joined.

This indirectly fixes the CSP error shown in Safari when the worker was
loaded (as the worker is no longer loaded now in Safari) due to Safari
not supporting the "worker-src" directive but requiring "child-src" to
be used instead.

Signed-off-by: Daniel Calviño Sánchez <[email protected]>
  • Loading branch information
danxuliu committed Dec 21, 2020
commit 8a6e439037dbec29e9daf86903ad27d0bab6c65a
39 changes: 25 additions & 14 deletions src/utils/imageBlurrer.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,27 +21,30 @@

import { generateFilePath } from '@nextcloud/router'

let worker = null
let worker

const pendingResults = {}
let pendingResultsNextId = 0

try {
worker = new Worker(generateFilePath('spreed', '', 'js/image-blurrer-worker.js'))
worker.onmessage = function(message) {
const pendingResult = pendingResults[message.data.id]
if (!pendingResult) {
console.debug('No pending result for blurring image with id ' + message.data.id)
function loadWorker() {
try {
worker = new Worker(generateFilePath('spreed', '', 'js/image-blurrer-worker.js'))
worker.onmessage = function(message) {
const pendingResult = pendingResults[message.data.id]
if (!pendingResult) {
console.debug('No pending result for blurring image with id ' + message.data.id)

return
}
return
}

pendingResult(message.data.blurredImageAsDataUrl)
pendingResult(message.data.blurredImageAsDataUrl)

delete pendingResults[message.data.id]
delete pendingResults[message.data.id]
}
} catch (exception) {
worker = null
console.error('Image blurrer worker could not be loaded', exception)
}
} catch (exception) {
console.error('Image blurrer worker could not be loaded', exception)
}

function blurSync(image, width, height, blurRadius) {
Expand All @@ -59,7 +62,15 @@ function blurSync(image, width, height, blurRadius) {
}

export default function blur(image, width, height, blurRadius) {
if (!worker || typeof OffscreenCanvas === 'undefined') {
if (typeof OffscreenCanvas === 'undefined') {
return blurSync(image, width, height, blurRadius)
}

if (worker === undefined) {
loadWorker()
}

if (!worker) {
return blurSync(image, width, height, blurRadius)
}

Expand Down