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