forked from mirrors/gecko-dev
		
	Differential Revision: https://phabricator.services.mozilla.com/D5914 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * 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;
 | 
						|
  },
 | 
						|
};
 |