forked from naskooskov/stannum
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtabdata.js
executable file
·121 lines (95 loc) · 2.33 KB
/
tabdata.js
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Initialize the namespace.
flake = window.flake || {}
/**
* A representation of a tab and the resources that have been loaded inside it.
* @param {number} tabId The ID of the tab.
* @constructor
*/
flake.TabInstance = function(tabId) {
/**
* The ID of the tab.
* @type {number}
*/
this.tabId = tabId;
/**
* A collection of scripts that have been loaded inside the tab.
* @type {!Array}
*/
this.scripts = [];
/**
* A collection of stylesheets that have been loaded inside the tab.
* @type {!Array}
*/
this.stylesheets = [];
/**
* A collection of objects that have been loaded inside the tab.
* @type {!Array}
*/
this.objects = [];
/**
* A collection of XHRs that have been made by the tab.
* @type {!Array}
*/
this.xhrs = [];
/**
* A collection of 'others'.
* TODO(radi/nasko): Define what this is.
* @type {!Array}
*/
this.others = [];
};
flake.TabInstance.prototype.add = function(objType, uri) {
this[objType].push(uri);
};
flake.TabInstance.prototype.reset = function() {
for (var prop in this) {
if (this[prop] instanceof Array) {
this[prop] = [];
}
}
};
/**
* An object to allow easier management of collections of tab representations.
* @constructor
*/
flake.TabData = function() {
this.tabs = {};
};
/**
* Register a tab so that its resources can be properly managed.
* @param {!Object} tab The tab to register.
*/
flake.TabData.prototype.registerTab = function(tab) {
this.tabs[tab.id] = new flake.TabInstance(tab.id);
};
/**
* Unregister a tab.
* @param {number} tabId The ID of the tab to unregister.
*/
flake.TabData.prototype.unregisterTab = function(tabId) {
delete this.tabs[tabId];
};
/**
* A collection of managed tabs.
* @type {!flake.TabData}
*/
flake.tabsHolder = new flake.TabData();
/**
* Start monitoring the Chrome tabs.
*/
flake.initTabs = function() {
// Register all existing tabs.
chrome.tabs.query({}, function(tabsArray) {
tabsArray.forEach(function(tab) {
flake.tabsHolder.registerTab(tab);
});
});
// Register new tabs upon creation.
chrome.tabs.onCreated.addListener(function(tab) {
flake.tabsHolder.registerTab(tab);
});
// Unregister a tab when it's being closed.
chrome.tabs.onRemoved.addListener(function(tabId) {
flake.tabsHolder.unregisterTab(tabId);
});
};