/** * List of helper functions for screenshot-based images. * * There are two kinds of images: * 1. Remote Image: This is the image from the main process and it refers to * the image in the React props. This can either be an object with the `data` * and `path` properties, if it is a blob, or a string, if it is a normal image. * 2. Local Image: This is the image object in the content process and it refers * to the image *object* in the React component's state. All local image * objects have the `url` property, and an additional property `path`, if they * are blobs. */ export const ScreenshotUtils = { isBlob(isLocal, image) { return !!(image && image.path && ((!isLocal && image.data) || (isLocal && image.url))); }, // This should always be called with a remote image and not a local image. createLocalImageObject(remoteImage) { if (!remoteImage) { return null; } if (this.isBlob(false, remoteImage)) { return {url: global.URL.createObjectURL(remoteImage.data), path: remoteImage.path}; } return {url: remoteImage}; }, // Revokes the object URL of the image if the local image is a blob. // This should always be called with a local image and not a remote image. maybeRevokeBlobObjectURL(localImage) { if (this.isBlob(true, localImage)) { global.URL.revokeObjectURL(localImage.url); } }, // Checks if remoteImage and localImage are the same. isRemoteImageLocal(localImage, remoteImage) { // Both remoteImage and localImage are present. if (remoteImage && localImage) { return this.isBlob(false, remoteImage) ? localImage.path === remoteImage.path : localImage.url === remoteImage; } // This will only handle the remaining three possible outcomes. // (i.e. everything except when both image and localImage are present) return !remoteImage && !localImage; } };