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 http://mozilla.org/MPL/2.0/. */
"use strict";
const {
DEBUG_TARGET_PANE,
PREFERENCES,
RUNTIMES,
} = require("resource://devtools/client/aboutdebugging/src/constants.js");
// Process target debugging is disabled by default.
function isProcessDebuggingSupported() {
return Services.prefs.getBoolPref(
PREFERENCES.PROCESS_DEBUGGING_ENABLED,
false
);
}
// Local tab debugging is disabled by default.
function isLocalTabDebuggingSupported() {
return Services.prefs.getBoolPref(
PREFERENCES.LOCAL_TAB_DEBUGGING_ENABLED,
false
);
}
// Local process debugging is disabled by default.
// This preference has no default value in
// devtools/client/preferences/devtools-client.js
// because it is only intended for tests.
function isLocalProcessDebuggingSupported() {
return Services.prefs.getBoolPref(
"devtools.aboutdebugging.test-local-process-debugging",
false
);
}
// Installing extensions can be disabled in enterprise policy.
// Note: Temporary Extensions are only supported when debugging This Firefox, so checking
// the local preference is acceptable here. If we enable Temporary extensions for remote
// runtimes, we should retrieve the preference from the target runtime instead.
function isTemporaryExtensionSupported() {
return Services.prefs.getBoolPref(PREFERENCES.XPINSTALL_ENABLED, true);
}
const ALL_DEBUG_TARGET_PANES = [
DEBUG_TARGET_PANE.INSTALLED_EXTENSION,
...(isProcessDebuggingSupported() ? [DEBUG_TARGET_PANE.PROCESSES] : []),
DEBUG_TARGET_PANE.OTHER_WORKER,
DEBUG_TARGET_PANE.SERVICE_WORKER,
DEBUG_TARGET_PANE.SHARED_WORKER,
DEBUG_TARGET_PANE.TAB,
...(isTemporaryExtensionSupported()
? [DEBUG_TARGET_PANE.TEMPORARY_EXTENSION]
: []),
];
// All debug target panes (to filter out if any of the panels should be excluded).
const REMOTE_DEBUG_TARGET_PANES = [...ALL_DEBUG_TARGET_PANES];
const THIS_FIREFOX_DEBUG_TARGET_PANES = ALL_DEBUG_TARGET_PANES
// Main process debugging is not available for This Firefox.
// At the moment only the main process is listed under processes, so remove the category
// for this runtime.
.filter(
p => p !== DEBUG_TARGET_PANE.PROCESSES || isLocalProcessDebuggingSupported()
)
// Showing tab targets for This Firefox is behind a preference.
.filter(p => p !== DEBUG_TARGET_PANE.TAB || isLocalTabDebuggingSupported());
const SUPPORTED_TARGET_PANE_BY_RUNTIME = {
[RUNTIMES.THIS_FIREFOX]: THIS_FIREFOX_DEBUG_TARGET_PANES,
[RUNTIMES.USB]: REMOTE_DEBUG_TARGET_PANES,
[RUNTIMES.NETWORK]: REMOTE_DEBUG_TARGET_PANES,
};
/**
* A debug target pane is more specialized than a debug target. For instance EXTENSION is
* a DEBUG_TARGET but INSTALLED_EXTENSION and TEMPORARY_EXTENSION are DEBUG_TARGET_PANES.
*/
function isSupportedDebugTargetPane(runtimeType, debugTargetPaneKey) {
return SUPPORTED_TARGET_PANE_BY_RUNTIME[runtimeType].includes(
debugTargetPaneKey
);
}
exports.isSupportedDebugTargetPane = isSupportedDebugTargetPane;
/**
* Check if the given runtimeType supports temporary extension installation
* from about:debugging (currently disallowed on non-local runtimes).
*/
function supportsTemporaryExtensionInstaller(runtimeType) {
return runtimeType === RUNTIMES.THIS_FIREFOX;
}
exports.supportsTemporaryExtensionInstaller =
supportsTemporaryExtensionInstaller;