Bug 1367485 - Improve formatting of Windows paths in about:debugging r?jdescottes
MozReview-Commit-ID: 1mKNvccF6nZ
--- a/devtools/client/aboutdebugging/components/addons/target.js
+++ b/devtools/client/aboutdebugging/components/addons/target.js
@@ -3,17 +3,18 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* eslint-env browser */
"use strict";
const { createClass, DOM: dom, PropTypes } =
require("devtools/client/shared/vendor/react");
-const { debugAddon, uninstallAddon, isTemporaryID } = require("../../modules/addon");
+const { debugAddon, isTemporaryID, parseFileUri, uninstallAddon } =
+ require("../../modules/addon");
const Services = require("Services");
loader.lazyImporter(this, "BrowserToolboxProcess",
"resource://devtools/client/framework/ToolboxProcess.jsm");
loader.lazyRequireGetter(this, "DebuggerClient",
"devtools/shared/client/main", true);
@@ -23,17 +24,17 @@ const Strings = Services.strings.createB
const TEMP_ID_URL = "https://developer.mozilla.org/Add-ons" +
"/WebExtensions/WebExtensions_and_the_Add-on_ID";
function filePathForTarget(target) {
// Only show file system paths, and only for temporarily installed add-ons.
if (!target.temporarilyInstalled || !target.url || !target.url.startsWith("file://")) {
return [];
}
- let path = target.url.slice("file://".length);
+ let path = parseFileUri(target.url);
return [
dom.dt(
{ className: "addon-target-info-label" },
Strings.GetStringFromName("location")),
// Wrap the file path in a span so we can do some RTL/LTR swapping to get
// the ellipsis on the left.
dom.dd(
{ className: "addon-target-info-content file-path" },
--- a/devtools/client/aboutdebugging/modules/addon.js
+++ b/devtools/client/aboutdebugging/modules/addon.js
@@ -27,8 +27,19 @@ exports.debugAddon = function (addonID)
exports.uninstallAddon = async function (addonID) {
let addon = await AddonManager.getAddonByID(addonID);
return addon && addon.uninstall();
};
exports.isTemporaryID = function (addonID) {
return AddonManagerPrivate.isTemporaryInstallID(addonID);
};
+
+exports.parseFileUri = function (url) {
+ // Strip a leading slash from Windows drive letter URIs.
+ // file:///home/foo ~> /home/foo
+ // file:///C:/foo ~> C:/foo
+ const windowsRegex = /^file:\/\/\/([a-zA-Z]:\/.*)/;
+ if (windowsRegex.test(url)) {
+ return windowsRegex.exec(url)[1];
+ }
+ return url.slice("file://".length);
+};
--- a/devtools/client/aboutdebugging/moz.build
+++ b/devtools/client/aboutdebugging/moz.build
@@ -7,11 +7,12 @@
DIRS += [
'components',
'modules',
]
BROWSER_CHROME_MANIFESTS += [
'test/browser.ini'
]
+XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell.ini']
with Files('**'):
BUG_COMPONENT = ('Firefox', 'Developer Tools: about:debugging')
new file mode 100644
--- /dev/null
+++ b/devtools/client/aboutdebugging/test/test_addon_path.js
@@ -0,0 +1,23 @@
+/* global equal */
+
+"use strict";
+
+const { parseFileUri } =
+ require("devtools/client/aboutdebugging/modules/addon");
+
+add_task(function* testParseFileUri() {
+ equal(
+ parseFileUri("file:///home/me/my-extension/"),
+ "/home/me/my-extension/",
+ "UNIX paths are supported");
+
+ equal(
+ parseFileUri("file:///C:/Documents/my-extension/"),
+ "C:/Documents/my-extension/",
+ "Windows paths are supported");
+
+ equal(
+ parseFileUri("file://home/Documents/my-extension/"),
+ "home/Documents/my-extension/",
+ "Windows network paths are supported");
+});
new file mode 100644
--- /dev/null
+++ b/devtools/client/aboutdebugging/test/xpcshell-head.js
@@ -0,0 +1,9 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/* eslint no-unused-vars: [2, {"vars": "local"}] */
+
+const { utils: Cu } = Components;
+const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
new file mode 100644
--- /dev/null
+++ b/devtools/client/aboutdebugging/test/xpcshell.ini
@@ -0,0 +1,7 @@
+[DEFAULT]
+tags = devtools
+head = xpcshell-head.js
+firefox-appdir = browser
+skip-if = toolkit == 'android'
+
+[test_addon_path.js]