diff options
Diffstat (limited to 'comm/mail/actors/LinkHandlerParent.sys.mjs')
-rw-r--r-- | comm/mail/actors/LinkHandlerParent.sys.mjs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/comm/mail/actors/LinkHandlerParent.sys.mjs b/comm/mail/actors/LinkHandlerParent.sys.mjs new file mode 100644 index 0000000000..269405c4ff --- /dev/null +++ b/comm/mail/actors/LinkHandlerParent.sys.mjs @@ -0,0 +1,57 @@ +/* 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/. */ + +export class LinkHandlerParent extends JSWindowActorParent { + receiveMessage(msg) { + let browser = this.browsingContext.top.embedderElement; + if (!browser) { + return; + } + + switch (msg.name) { + case "Link:SetIcon": + this.setIconFromLink(browser, msg.data.iconURL, msg.data.canUseForTab); + break; + } + } + + setIconFromLink(browser, iconURL, canUseForTab) { + let tabmail = browser.ownerDocument.getElementById("tabmail"); + if (!tabmail) { + return; + } + + let tab = tabmail.getTabForBrowser(browser); + if (tab?.mode?.type != "contentTab") { + return; + } + + let iconURI; + try { + iconURI = Services.io.newURI(iconURL); + } catch (ex) { + console.error(ex); + return; + } + if (iconURI.scheme != "data") { + try { + Services.scriptSecurityManager.checkLoadURIWithPrincipal( + browser.contentPrincipal, + iconURI, + Services.scriptSecurityManager.ALLOW_CHROME + ); + } catch (ex) { + return; + } + } + + if (canUseForTab) { + tabmail.setTabFavIcon( + tab, + iconURL, + "chrome://messenger/skin/icons/new/compact/draft.svg" + ); + } + } +} |