forked from mozilla/tab-split
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbootstrap.js
More file actions
92 lines (77 loc) · 3.4 KB
/
bootstrap.js
File metadata and controls
92 lines (77 loc) · 3.4 KB
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
90
91
92
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* 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";
const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Services", "resource://gre/modules/Services.jsm");
const startupObserver = {
register() {
Services.obs.addObserver(this, "sessionstore-windows-restored", false);
Services.obs.addObserver(this, "browser-delayed-startup-finished", false);
},
unregister() {
Services.obs.removeObserver(this, "sessionstore-windows-restored");
Services.obs.removeObserver(this, "browser-delayed-startup-finished");
},
observe(subj, topic, data) {
console.log("TMP > TabSplit - startupObserver - observe", topic);
TabSplit.onNewBrowserCreated();
}
};
const TabSplit = {
_browserCount: 0,
onNewBrowserCreated() {
console.log("TMP > TabSplit - bootstrap - onNewBrowserCreated");
let WM = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator);
let chromeWindow = WM.getMostRecentWindow("navigator:browser");
let tabbrowser = chromeWindow.document.getElementById("content");
if (tabbrowser.getAttribute("data-tabsplit-tabbrowser-id")) {
return;
}
tabbrowser.setAttribute("data-tabsplit-tabbrowser-id", ++this._browserCount);
console.log("TMP > TabSplit - bootstrap - onNewBrowserCreated - browserCount", this._browserCount);
console.log("TMP > TabSplit - bootstrap - onNewBrowserCreated - load overlay tabsplit-init-overlay.xul");
chromeWindow.document.loadOverlay("chrome://tabsplit/content/overlay/tabsplit-init-overlay.xul",
(subj, topic, data) => console.log("TMP > TabSplit - bootstrap - onNewBrowserCreated - load overlay topic", topic));
},
onDestroy() {
console.log("TMP > TabSplit - bootstrap - onDestroy");
let WM = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator);
let chromeWindows = WM.getEnumerator("navigator:browser");
while (chromeWindows.hasMoreElements()) {
let win = chromeWindows.getNext();
let tabbrowser = win.document.getElementById("content");
if (win.TabSplit) {
console.log("TMP > TabSplit - bootstrap - destroying data-tabsplit-tabbrowser-id =", tabbrowser.getAttribute("data-tabsplit-tabbrowser-id"), Date.now());
win.TabSplit.control.destroy();
delete win.TabSplit;
console.log("TMP > TabSplit - bootstrap - destroyed at", Date.now());
}
tabbrowser.removeAttribute("data-tabsplit-tabbrowser-id");
this._browserCount--;
}
}
};
function startup(data, reason) {
console.log("TMP> TabSplit startup with reason =", reason);
startupObserver.register();
TabSplit.onNewBrowserCreated();
}
function shutdown(data, reason) {
console.log("TMP> TabSplit shutdown with reason =", reason);
startupObserver.unregister();
if (reason != APP_SHUTDOWN) {
console.log("TMP> TabSplit shutdown to destroy");
TabSplit.onDestroy();
}
}
function install(data, reason) {
console.log("TMP> TabSplit install with reason =", reason);
}
function uninstall(data, reason) {
console.log("TMP> TabSplit uninstall with reason =", reason);
startupObserver.unregister();
TabSplit.onDestroy();
}