61 lines
2.1 KiB
JavaScript
61 lines
2.1 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/**
|
|
* 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: globalThis.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)) {
|
|
globalThis.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;
|
|
},
|
|
};
|