60 lines
1.8 KiB
JavaScript
60 lines
1.8 KiB
JavaScript
/* 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/. */
|
|
|
|
/**
|
|
* Singleton that should be updated whenever a socket is opened or closed for
|
|
* incoming connections.
|
|
*
|
|
* Notifies observers via "devtools-socket" when the status might have have
|
|
* changed.
|
|
*
|
|
* Currently observed by browser/base/content/browser.js in order to display
|
|
* the "remote control" visual cue also used for Marionette and Remote Agent.
|
|
*/
|
|
export const DevToolsSocketStatus = {
|
|
_browserToolboxSockets: 0,
|
|
_otherSockets: 0,
|
|
|
|
/**
|
|
* Check if there are opened DevTools sockets.
|
|
*
|
|
* @param {Object=} options
|
|
* @param {boolean=} options.excludeBrowserToolboxSockets
|
|
* Exclude sockets opened by local Browser Toolbox sessions. Defaults to
|
|
* false.
|
|
*
|
|
* @return {boolean}
|
|
* Returns true if there are DevTools sockets opened and matching the
|
|
* provided options if any.
|
|
*/
|
|
hasSocketOpened(options = {}) {
|
|
const { excludeBrowserToolboxSockets = false } = options;
|
|
if (excludeBrowserToolboxSockets) {
|
|
return this._otherSockets > 0;
|
|
}
|
|
return this._browserToolboxSockets + this._otherSockets > 0;
|
|
},
|
|
|
|
notifySocketOpened(options) {
|
|
const { fromBrowserToolbox } = options;
|
|
if (fromBrowserToolbox) {
|
|
this._browserToolboxSockets++;
|
|
} else {
|
|
this._otherSockets++;
|
|
}
|
|
|
|
Services.obs.notifyObservers(this, "devtools-socket");
|
|
},
|
|
|
|
notifySocketClosed(options) {
|
|
const { fromBrowserToolbox } = options;
|
|
if (fromBrowserToolbox) {
|
|
this._browserToolboxSockets--;
|
|
} else {
|
|
this._otherSockets--;
|
|
}
|
|
|
|
Services.obs.notifyObservers(this, "devtools-socket");
|
|
},
|
|
};
|