- commit
- 6f7c2771b6b0b1873c43f173e996ba1f9522cf51
- parent
- 27b0bacda80451686ee2b137b78df751ba63b773
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-10-04 19:52
tb115: adapt monkeypatch
Diffstat
| M | background.js | 12 | +++++++++++- |
| M | experiment-api/api.js | 52 | ++++++++++++++++++++++++++-------------------------- |
| M | experiment-api/schema.json | 9 | ++++++--- |
| M | manifest.json | 3 | ++- |
4 files changed, 45 insertions, 31 deletions
diff --git a/background.js b/background.js
@@ -1,3 +1,13 @@ 1 1 /* global browser */ 2 23 -1 browser.xi.patchOpenSelectedMessages();-1 3 browser.tabs.onCreated.addListener(tab => { -1 4 if (tab.mailTab) { -1 5 browser.xi.patchTab(tab.id); -1 6 } -1 7 }); -1 8 -1 9 browser.tabs.query({mailTab: true}).then(tabs => { -1 10 tabs.forEach(tab => { -1 11 browser.xi.patchTab(tab.id); -1 12 }); -1 13 });
diff --git a/experiment-api/api.js b/experiment-api/api.js
@@ -18,6 +18,16 @@ var unique = function(l, keyFn) {
18 18 });
19 19 };
20 20
-1 21 var waitForLoad = function(win) {
-1 22 return new Promise(resolve => {
-1 23 if (win.document.readyState === 'complete') {
-1 24 resolve();
-1 25 } else {
-1 26 win.addEventListener('load', resolve);
-1 27 }
-1 28 });
-1 29 };
-1 30
21 31 var getConversation = function(ids) {
22 32 return new Promise((resolve, reject) => {
23 33 var conversationListener = {
@@ -91,32 +101,22 @@ var xi = class extends ExtensionCommon.ExtensionAPI {
91 101 {URL: url},
92 102 );
93 103 },
94 -1 // cannot be replaced by messageDisplay.OnMessagesDisplayed because
95 -1 // we need to replace the original handler
96 -1 patchOpenSelectedMessages() {
97 -1 var observer = (win, topic) => {
98 -1 if (topic === 'domwindowopened' && win.location.href === 'chrome://messenger/content/messenger.xhtml') {
99 -1 win.MsgOpenSelectedMessages = () => {
100 -1 var msgs = win.gFolderDisplay.selectedMessages;
101 -1 var ids = msgs.map(msgHdr => msgHdr.messageId);
102 -1 var url = '/content/main.html?ids=' + encodeURIComponent(ids);
103 -1 var tab = win.openTab('contentTab', {
104 -1 url: context.uri.resolve(url),
105 -1 linkHandler: 'single-page',
106 -1 principal: context.extension.principal,
107 -1 });
108 -1 tab.toolbar.hidden = true;
109 -1 };
110 -1 }
111 -1 win.addEventListener('load', () => observer(win, topic));
112 -1 };
113 -1
114 -1 Services.ww.registerNotification(observer);
115 -1
116 -1 var e = Services.ww.getWindowEnumerator();
117 -1 while (e.hasMoreElements()) {
118 -1 observer(e.getNext(), 'domwindowopened');
119 -1 }
-1 104 patchTab(id) {
-1 105 var tabObject = context.extension.tabManager.get(id);
-1 106 var win = tabObject.nativeTab.chromeBrowser.contentWindow;
-1 107 return waitForLoad(win).then(() => {
-1 108 win.threadPane._onItemActivate = () => {
-1 109 var msgs = win.gDBView.getSelectedMsgHdrs();
-1 110 var ids = msgs.map(msgHdr => msgHdr.messageId);
-1 111 var url = '/content/main.html?ids=' + encodeURIComponent(ids);
-1 112 var tab = win.openTab('contentTab', {
-1 113 url: context.uri.resolve(url),
-1 114 linkHandler: 'single-page',
-1 115 principal: context.extension.principal,
-1 116 });
-1 117 tab.toolbar.hidden = true;
-1 118 };
-1 119 });
120 120 },
121 121 },
122 122 };
diff --git a/experiment-api/schema.json b/experiment-api/schema.json
@@ -28,9 +28,12 @@ 28 28 "type": "integer" 29 29 }] 30 30 }, {31 -1 "name": "patchOpenSelectedMessages",-1 31 "name": "patchTab", 32 32 "type": "function",33 -1 "async": false,34 -1 "parameters": []-1 33 "async": true, -1 34 "parameters": [{ -1 35 "name": "id", -1 36 "type": "integer" -1 37 }] 35 38 }] 36 39 }]
diff --git a/manifest.json b/manifest.json
@@ -17,7 +17,8 @@ 17 17 "permissions": [ 18 18 "accountsRead", 19 19 "messagesRead",20 -1 "messagesMove"-1 20 "messagesMove", -1 21 "tabs" 21 22 ], 22 23 "experiment_apis": { 23 24 "xi": {