1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
/* 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";
var { ExtensionSupport } = ChromeUtils.import(
"resource:///modules/ExtensionSupport.jsm"
);
var { ExtensionCommon } = ChromeUtils.importESModule(
"resource://gre/modules/ExtensionCommon.sys.mjs"
);
var { makeWidgetId } = ExtensionCommon;
function getSessionData(tabId, extension) {
let nativeTab = tabTracker.getTab(tabId);
let widgetId = makeWidgetId(extension.id);
if (!nativeTab._ext.extensionSession) {
nativeTab._ext.extensionSession = {};
}
if (!nativeTab._ext.extensionSession[`${widgetId}`]) {
nativeTab._ext.extensionSession[`${widgetId}`] = {};
}
return nativeTab._ext.extensionSession[`${widgetId}`];
}
this.sessions = class extends ExtensionAPI {
getAPI(context) {
return {
sessions: {
setTabValue(tabId, key, value) {
let sessionData = getSessionData(tabId, context.extension);
sessionData[key] = value;
},
getTabValue(tabId, key) {
let sessionData = getSessionData(tabId, context.extension);
return sessionData[key];
},
removeTabValue(tabId, key) {
let sessionData = getSessionData(tabId, context.extension);
delete sessionData[key];
},
},
};
}
static onUninstall(extensionId) {
// Remove session data.
let widgetId = makeWidgetId(extensionId);
for (let window of Services.wm.getEnumerator("mail:3pane")) {
for (let tabInfo of window.gTabmail.tabInfo) {
if (
tabInfo._ext.extensionSession &&
tabInfo._ext.extensionSession[`${widgetId}`]
) {
delete tabInfo._ext.extensionSession[`${widgetId}`];
}
}
}
}
};
|