LoadURIDelegate.sys.mjs (2313B)
1 // -*- indent-tabs-mode: nil; js-indent-level: 2 -*- 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 4 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 import { GeckoViewUtils } from "resource://gre/modules/GeckoViewUtils.sys.mjs"; 7 8 const { debug, warn } = GeckoViewUtils.initLogging("LoadURIDelegate"); 9 10 export const LoadURIDelegate = { 11 // Delegate URI loading to the app. 12 // Return whether the loading has been handled. 13 async load( 14 aWindow, 15 aEventDispatcher, 16 aUri, 17 aWhere, 18 aFlags, 19 aTriggeringPrincipal 20 ) { 21 if (!aWindow) { 22 return false; 23 } 24 25 const triggerUri = 26 aTriggeringPrincipal && 27 (aTriggeringPrincipal.isNullPrincipal ? null : aTriggeringPrincipal.URI); 28 29 const message = { 30 type: "GeckoView:OnLoadRequest", 31 uri: aUri ? aUri.displaySpec : "", 32 where: aWhere, 33 flags: aFlags, 34 triggerUri: triggerUri && triggerUri.displaySpec, 35 hasUserGesture: aWindow.document.hasValidTransientUserGestureActivation, 36 }; 37 38 try { 39 return await aEventDispatcher.sendRequestForResult(message); 40 } catch (e) { 41 // There was an error or listener was not registered in GeckoSession, 42 // treat as unhandled. 43 return false; 44 } 45 }, 46 47 handleLoadError(aWindow, aErrorPagePromise) { 48 let errorPageURI = undefined; 49 aErrorPagePromise.then( 50 response => { 51 try { 52 errorPageURI = response ? Services.io.newURI(response) : null; 53 } catch (e) { 54 warn`Failed to parse URI '${response}`; 55 errorPageURI = null; 56 Components.returnCode = Cr.NS_ERROR_ABORT; 57 } 58 }, 59 () => { 60 errorPageURI = null; 61 Components.returnCode = Cr.NS_ERROR_ABORT; 62 } 63 ); 64 Services.tm.spinEventLoopUntil( 65 "LoadURIDelegate.sys.mjs:handleLoadError", 66 () => aWindow.closed || errorPageURI !== undefined 67 ); 68 69 return errorPageURI; 70 }, 71 72 isSafeBrowsingError(aError) { 73 return ( 74 aError === Cr.NS_ERROR_PHISHING_URI || 75 aError === Cr.NS_ERROR_MALWARE_URI || 76 aError === Cr.NS_ERROR_HARMFUL_URI || 77 aError === Cr.NS_ERROR_UNWANTED_URI || 78 aError === Cr.NS_ERROR_HARMFULADDON_URI 79 ); 80 }, 81 };