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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
/*
* This file is part of TbSync.
*
* 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/.
*/
var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
function startup(data, reason) {
// possible reasons: APP_STARTUP, ADDON_ENABLE, ADDON_INSTALL, ADDON_UPGRADE, or ADDON_DOWNGRADE.
// set default prefs
let defaults = Services.prefs.getDefaultBranch("extensions.tbsync.");
defaults.setBoolPref("debug.testoptions", false);
defaults.setBoolPref("log.toconsole", false);
defaults.setIntPref("log.userdatalevel", 0); //0 - off 1 - userdata only on errors 2 - including full userdata, 3 - extra infos
// Check if at least one main window has finished loading
let windows = Services.wm.getEnumerator("mail:3pane");
if (windows.hasMoreElements()) {
let domWindow = windows.getNext();
WindowListener.loadIntoWindow(domWindow);
}
// Wait for any new windows to open.
Services.wm.addListener(WindowListener);
//DO NOT ADD ANYTHING HERE!
}
function shutdown(data, reason) {
//possible reasons: APP_SHUTDOWN, ADDON_DISABLE, ADDON_UNINSTALL, ADDON_UPGRADE, or ADDON_DOWNGRADE
// Stop listening for any new windows to open.
Services.wm.removeListener(WindowListener);
var { TbSync } = ChromeUtils.import("chrome://tbsync/content/tbsync.jsm");
TbSync.enabled = false;
TbSync.unload().then(function() {
Cu.unload("chrome://tbsync/content/tbsync.jsm");
Cu.unload("chrome://tbsync/content/HttpRequest.jsm");
Cu.unload("chrome://tbsync/content/OverlayManager.jsm");
// HACK WARNING:
// - the Addon Manager does not properly clear all addon related caches on update;
// - in order to fully update images and locales, their caches need clearing here
Services.obs.notifyObservers(null, "startupcache-invalidate");
Services.obs.notifyObservers(null, "chrome-flush-caches");
});
}
var WindowListener = {
async loadIntoWindow(window) {
if (window.document.readyState != "complete") {
// Make sure the window load has completed.
await new Promise(resolve => {
window.addEventListener("load", resolve, { once: true });
});
}
// Check if the opened window is the one we want to modify.
if (window.document.documentElement.getAttribute("windowtype") === "mail:3pane") {
// the main window has loaded, continue with init
var { TbSync } = ChromeUtils.import("chrome://tbsync/content/tbsync.jsm");
if (!TbSync.enabled) TbSync.load(window, addon, extension);
}
},
unloadFromWindow(window) {
},
// nsIWindowMediatorListener functions
onOpenWindow(xulWindow) {
// A new window has opened.
let domWindow = xulWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow);
// The domWindow.document.documentElement.getAttribute("windowtype") is not set before the load, so we cannot check it here
this.loadIntoWindow(domWindow);
},
onCloseWindow(xulWindow) {
},
onWindowTitleChange(xulWindow, newTitle) {
},
};
|