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
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
var { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
const { Services } = Cu.import('resource://gre/modules/Services.jsm');
const { SystemAppProxy } = Cu.import('resource://gre/modules/SystemAppProxy.jsm');
var processId;
function peekChildId(aSubject, aTopic, aData) {
Services.obs.removeObserver(peekChildId, 'recording-device-events');
Services.obs.removeObserver(peekChildId, 'recording-device-ipc-events');
let props = aSubject.QueryInterface(Ci.nsIPropertyBag2);
if (props.hasKey('childID')) {
processId = props.get('childID');
}
}
addMessageListener('init-chrome-event', function(message) {
// listen mozChromeEvent and forward to content process.
let type = message.type;
SystemAppProxy.addEventListener('mozChromeEvent', function(event) {
let details = event.detail;
if (details.type === type) {
sendAsyncMessage('chrome-event', details);
}
}, true);
Services.obs.addObserver(peekChildId, 'recording-device-events', false);
Services.obs.addObserver(peekChildId, 'recording-device-ipc-events', false);
});
addMessageListener('fake-content-shutdown', function(message) {
let props = Cc["@mozilla.org/hash-property-bag;1"]
.createInstance(Ci.nsIWritablePropertyBag2);
if (processId) {
props.setPropertyAsUint64('childID', processId);
}
Services.obs.notifyObservers(props, 'recording-device-ipc-events', 'content-shutdown');
});
|