Source code

Revision control

Copy as Markdown

Other Tools

/* 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 https://mozilla.org/MPL/2.0/. */
export let SerialDeviceSharingHelper = {
_activePortCounts: new WeakMap(),
observe(subject, topic, _data) {
if (topic != "serial-device-state-changed") {
return;
}
let props = subject.QueryInterface(Ci.nsIPropertyBag2);
const browserId = props.getPropertyAsUint64("browserId");
let bc = BrowsingContext.getCurrentTopByBrowserId(browserId);
if (!bc) {
console.warn("BrowsingContext not found for browser ID:", browserId);
return;
}
let browser = bc.embedderElement;
if (!browser) {
console.warn("No embedder element for BrowsingContext");
return;
}
let connected = props.getPropertyAsBool("connected");
let count = this._activePortCounts.get(browser) || 0;
count = connected ? count + 1 : Math.max(0, count - 1);
this._activePortCounts.set(browser, count);
browser.documentGlobal?.gBrowser?.updateBrowserSharing(browser, {
serial: count > 0 ? "serial" : null,
});
},
resetBrowserCount(browser) {
this._activePortCounts.delete(browser);
},
};