forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			78 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			2 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/. */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| this.extension = class extends ExtensionAPI {
 | |
|   getAPI(context) {
 | |
|     let api = {
 | |
|       getURL(url) {
 | |
|         return context.extension.baseURI.resolve(url);
 | |
|       },
 | |
| 
 | |
|       get lastError() {
 | |
|         return context.lastError;
 | |
|       },
 | |
| 
 | |
|       get inIncognitoContext() {
 | |
|         return context.incognito;
 | |
|       },
 | |
|     };
 | |
| 
 | |
|     if (context.envType === "addon_child") {
 | |
|       api.getViews = function(fetchProperties) {
 | |
|         let result = Cu.cloneInto([], context.cloneScope);
 | |
| 
 | |
|         for (let view of context.extension.views) {
 | |
|           if (!view.active) {
 | |
|             continue;
 | |
|           }
 | |
|           if (!context.principal.subsumes(view.principal)) {
 | |
|             continue;
 | |
|           }
 | |
| 
 | |
|           if (fetchProperties !== null) {
 | |
|             if (
 | |
|               fetchProperties.type !== null &&
 | |
|               view.viewType != fetchProperties.type
 | |
|             ) {
 | |
|               continue;
 | |
|             }
 | |
| 
 | |
|             if (fetchProperties.windowId !== null) {
 | |
|               let bc = view.contentWindow?.docShell?.browserChild;
 | |
|               let windowId =
 | |
|                 view.viewType !== "background"
 | |
|                   ? bc?.chromeOuterWindowID ?? -1
 | |
|                   : -1;
 | |
|               if (windowId !== fetchProperties.windowId) {
 | |
|                 continue;
 | |
|               }
 | |
|             }
 | |
| 
 | |
|             if (
 | |
|               fetchProperties.tabId !== null &&
 | |
|               view.tabId != fetchProperties.tabId
 | |
|             ) {
 | |
|               continue;
 | |
|             }
 | |
|           }
 | |
| 
 | |
|           // Do not include extension popups contexts while their document
 | |
|           // is blocked on parsing during its preloading state
 | |
|           // (See Bug 1748808).
 | |
|           if (context.extension.hasContextBlockedParsingDocument(view)) {
 | |
|             continue;
 | |
|           }
 | |
| 
 | |
|           result.push(view.contentWindow);
 | |
|         }
 | |
| 
 | |
|         return result;
 | |
|       };
 | |
|     }
 | |
| 
 | |
|     return { extension: api };
 | |
|   }
 | |
| };
 | 
