Skip to content

Commit aee1a41

Browse files
authored
Merge pull request #120 from jeevatkm/tb-v102-support
2 parents d5f528b + 5bbc8d7 commit aee1a41

File tree

2 files changed

+45
-49
lines changed

2 files changed

+45
-49
lines changed

experiment/api/WindowListener/implementation.js

Lines changed: 41 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* This file is provided by the addon-developer-support repository at
33
* https://github.com/thundernest/addon-developer-support
44
*
5-
* Version: 1.56
5+
* Version: 1.57
66
*
77
* Author: John Bieling (john@thunderbird.net)
88
*
@@ -200,7 +200,7 @@ var WindowListener = class extends ExtensionCommon.ExtensionAPI {
200200
// returns the outer browser, not the nested browser of the add-on manager
201201
// events must be attached to the outer browser
202202
getAddonManagerFromTab(tab) {
203-
if (tab.browser) {
203+
if (tab.browser && tab.mode.name == "contentTab") {
204204
let win = tab.browser.contentWindow;
205205
if (win && win.location.href == "about:addons") {
206206
return win;
@@ -211,9 +211,28 @@ var WindowListener = class extends ExtensionCommon.ExtensionAPI {
211211
getAddonManagerFromWindow(window) {
212212
let tabMail = this.getTabMail(window);
213213
for (let tab of tabMail.tabInfo) {
214-
let win = this.getAddonManagerFromTab(tab);
215-
if (win) {
216-
return win;
214+
let managerWindow = this.getAddonManagerFromTab(tab);
215+
if (managerWindow) {
216+
return managerWindow;
217+
}
218+
}
219+
}
220+
221+
async getAddonManagerFromWindowWaitForLoad(window) {
222+
let { setTimeout } = Services.wm.getMostRecentWindow("mail:3pane");
223+
224+
let tabMail = this.getTabMail(window);
225+
for (let tab of tabMail.tabInfo) {
226+
if (tab.browser && tab.mode.name == "contentTab") {
227+
// Instead of registering a load observer, wait until its loaded. Not nice,
228+
// but gets aroud a lot of edge cases.
229+
while(!tab.pageLoaded) {
230+
await new Promise(r => setTimeout(r, 150));
231+
}
232+
let managerWindow = this.getAddonManagerFromTab(tab);
233+
if (managerWindow) {
234+
return managerWindow;
235+
}
217236
}
218237
}
219238
}
@@ -329,41 +348,20 @@ var WindowListener = class extends ExtensionCommon.ExtensionAPI {
329348

330349
// TabMonitor to detect opening of tabs, to setup the options button in the add-on manager.
331350
this.tabMonitor = {
332-
onTabTitleChanged(aTab) { },
333-
onTabClosing(aTab) { },
334-
onTabPersist(aTab) { },
335-
onTabRestored(aTab) { },
336-
onTabSwitched(aNewTab, aOldTab) {
337-
//self.setupAddonManager(self.getAddonManagerFromTab(aNewTab));
338-
},
339-
async onTabOpened(aTab) {
340-
if (aTab.browser) {
341-
if (!aTab.pageLoaded) {
342-
// await a location change if browser is not loaded yet
343-
await new Promise((resolve) => {
344-
let reporterListener = {
345-
QueryInterface: ChromeUtils.generateQI([
346-
"nsIWebProgressListener",
347-
"nsISupportsWeakReference",
348-
]),
349-
onStateChange() { },
350-
onProgressChange() { },
351-
onLocationChange(
352-
/* in nsIWebProgress*/ aWebProgress,
353-
/* in nsIRequest*/ aRequest,
354-
/* in nsIURI*/ aLocation
355-
) {
356-
aTab.browser.removeProgressListener(reporterListener);
357-
resolve();
358-
},
359-
onStatusChange() { },
360-
onSecurityChange() { },
361-
onContentBlockingEvent() { },
362-
};
363-
aTab.browser.addProgressListener(reporterListener);
364-
});
351+
onTabTitleChanged(tab) { },
352+
onTabClosing(tab) { },
353+
onTabPersist(tab) { },
354+
onTabRestored(tab) { },
355+
onTabSwitched(aNewTab, aOldTab) { },
356+
async onTabOpened(tab) {
357+
if (tab.browser && tab.mode.name == "contentTab") {
358+
let { setTimeout } = Services.wm.getMostRecentWindow("mail:3pane");
359+
// Instead of registering a load observer, wait until its loaded. Not nice,
360+
// but gets aroud a lot of edge cases.
361+
while(!tab.pageLoaded) {
362+
await new Promise(r => setTimeout(r, 150));
365363
}
366-
self.setupAddonManager(self.getAddonManagerFromTab(aTab));
364+
self.setupAddonManager(self.getAddonManagerFromTab(tab));
367365
}
368366
},
369367
};
@@ -594,16 +592,14 @@ var WindowListener = class extends ExtensionCommon.ExtensionAPI {
594592
self
595593
);
596594
} else {
597-
// Setup the options button/menu in the add-on manager, if it is already open.
598-
self.setupAddonManager(
599-
self.getAddonManagerFromWindow(window),
600-
true
601-
);
602595
// Add a tabmonitor, to be able to setup the options button/menu in the add-on manager.
603596
self
604597
.getTabMail(window)
605598
.registerTabMonitor(self.tabMonitor);
606599
window[self.uniqueRandomID].hasTabMonitor = true;
600+
// Setup the options button/menu in the add-on manager, if it is already open.
601+
let managerWindow = await self.getAddonManagerFromWindowWaitForLoad(window);
602+
self.setupAddonManager(managerWindow, true);
607603
}
608604
}
609605
}
@@ -1183,4 +1179,4 @@ var WindowListener = class extends ExtensionCommon.ExtensionAPI {
11831179
this.chromeHandle = null;
11841180
}
11851181
}
1186-
};
1182+
};

manifest.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22
"name": "ReplyWithHeader",
33
"short_name": "RWH",
44
"description": "Outlook style headers and few goodies for Thunderbird",
5-
"version_name": "2.4.0",
6-
"version": "2.4.0",
5+
"version_name": "2.5.0",
6+
"version": "2.5.0",
77
"author": "Jeevanandam M.",
88
"homepage_url": "https://myjeeva.com/replywithheader-mozilla",
99

1010
"applications": {
1111
"gecko": {
1212
"id": "replywithheader@myjeeva.com",
13-
"strict_min_version": "91.0",
14-
"strict_max_version": "91.*"
13+
"strict_min_version": "102.0",
14+
"strict_max_version": "102.*"
1515
}
1616
},
1717

0 commit comments

Comments
 (0)