Fix profile picture preview under CSP

This commit is contained in:
Rafael Foster
2026-04-27 09:04:54 -03:00
parent 7e4db48a9f
commit 2dd38bfae3
+9 -10
View File
@@ -100,9 +100,10 @@ function readImageAsDataUrl(file) {
return reject(new Error(t('settings.profilePictureFileTooLarge'))); return reject(new Error(t('settings.profilePictureFileTooLarge')));
} }
const img = new Image(); const reader = new FileReader();
const objectUrl = URL.createObjectURL(file); reader.onload = () => {
img.onload = () => { const img = new Image();
img.onload = () => {
try { try {
const maxSize = 512; const maxSize = 512;
const scale = Math.min(1, maxSize / Math.max(img.width, img.height)); const scale = Math.min(1, maxSize / Math.max(img.width, img.height));
@@ -114,22 +115,20 @@ function readImageAsDataUrl(file) {
const ctx = canvas.getContext('2d'); const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, width, height); ctx.drawImage(img, 0, 0, width, height);
const dataUrl = canvas.toDataURL('image/jpeg', 0.86); const dataUrl = canvas.toDataURL('image/jpeg', 0.86);
URL.revokeObjectURL(objectUrl);
if (dataUrl.length > MAX_AVATAR_DATA_LENGTH) { if (dataUrl.length > MAX_AVATAR_DATA_LENGTH) {
reject(new Error(t('settings.profilePictureTooLarge'))); reject(new Error(t('settings.profilePictureTooLarge')));
} else { } else {
resolve(dataUrl); resolve(dataUrl);
} }
} catch (err) { } catch (err) {
URL.revokeObjectURL(objectUrl);
reject(err); reject(err);
} }
};
img.onerror = () => reject(new Error(t('settings.profilePictureReadError')));
img.src = reader.result;
}; };
img.onerror = () => { reader.onerror = () => reject(new Error(t('settings.profilePictureReadError')));
URL.revokeObjectURL(objectUrl); reader.readAsDataURL(file);
reject(new Error(t('settings.profilePictureReadError')));
};
img.src = objectUrl;
}); });
} }