forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			47 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1.5 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/. */
 | |
| 
 | |
| import {
 | |
|   getBestRectForElement,
 | |
|   getElementFromPoint,
 | |
| } from "chrome://browser/content/screenshots/overlayHelpers.mjs";
 | |
| 
 | |
| /**
 | |
|  * This class is used to get the dimensions of hovered elements within iframes.
 | |
|  * The main content process cannot get the dimensions of elements within
 | |
|  * iframes so a message will be send to this actor to get the dimensions of the
 | |
|  * element for a given point inside the iframe.
 | |
|  */
 | |
| export class ScreenshotsHelperChild extends JSWindowActorChild {
 | |
|   receiveMessage(message) {
 | |
|     if (message.name === "ScreenshotsHelper:GetElementRectFromPoint") {
 | |
|       return this.getBestElementRectFromPoint(message.data);
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   async getBestElementRectFromPoint(data) {
 | |
|     let { x, y } = data;
 | |
| 
 | |
|     x -= this.contentWindow.mozInnerScreenX;
 | |
|     y -= this.contentWindow.mozInnerScreenY;
 | |
| 
 | |
|     let { ele, rect } = await getElementFromPoint(x, y, this.document);
 | |
| 
 | |
|     if (!rect) {
 | |
|       rect = getBestRectForElement(ele, this.document);
 | |
|     }
 | |
| 
 | |
|     if (rect) {
 | |
|       rect = {
 | |
|         left: rect.left + this.contentWindow.mozInnerScreenX,
 | |
|         right: rect.right + this.contentWindow.mozInnerScreenX,
 | |
|         top: rect.top + this.contentWindow.mozInnerScreenY,
 | |
|         bottom: rect.bottom + this.contentWindow.mozInnerScreenY,
 | |
|       };
 | |
|     }
 | |
| 
 | |
|     return rect;
 | |
|   }
 | |
| }
 | 
