Bug 1448553 - Part 5: Decodeds Punycode-encoded international domain names and URI-encoded filenames in the Developer Toolbox's frame menu so that they are displayed as human-readable Unicode text. r?jdescottes
The Punycode-encoded international domain names and URI-encoded filenames are
human-unreadable, so they should be displayed as human-readable Unicode text.
This commit decodes this kind of names in the Developer Toolbox's frame menu.
MozReview-Commit-ID: LGzw31z05OD
--- a/devtools/client/framework/toolbox.js
+++ b/devtools/client/framework/toolbox.js
@@ -18,16 +18,17 @@ const HTML_NS = "http://www.w3.org/1999/
var {Ci, Cc} = require("chrome");
var promise = require("promise");
var defer = require("devtools/shared/defer");
var Services = require("Services");
var ChromeUtils = require("ChromeUtils");
var {gDevTools} = require("devtools/client/framework/devtools");
var EventEmitter = require("devtools/shared/event-emitter");
var Telemetry = require("devtools/client/shared/telemetry");
+const { getUnicodeUrl } = require("devtools/client/shared/unicode-url");
var { attachThread, detachThread } = require("./attach-thread");
var Menu = require("devtools/client/framework/menu");
var MenuItem = require("devtools/client/framework/menu-item");
var { DOMHelpers } = require("resource://devtools/client/shared/DOMHelpers.jsm");
const { KeyCodes } = require("devtools/client/shared/keycodes");
var Startup = Cc["@mozilla.org/devtools/startup-clh;1"].getService(Ci.nsISupports)
.wrappedJSObject;
@@ -2052,21 +2053,23 @@ Toolbox.prototype = {
/**
* Refresh the host's title.
*/
_refreshHostTitle: function() {
let title;
if (this.target.name && this.target.name != this.target.url) {
const url = this.target.isWebExtension ?
- this.target.getExtensionPathName(this.target.url) : this.target.url;
+ this.target.getExtensionPathName(this.target.url) :
+ getUnicodeUrl(this.target.url);
title = L10N.getFormatStr("toolbox.titleTemplate2", this.target.name,
url);
} else {
- title = L10N.getFormatStr("toolbox.titleTemplate1", this.target.url);
+ title = L10N.getFormatStr("toolbox.titleTemplate1",
+ getUnicodeUrl(this.target.url));
}
this.postMessage({
name: "set-host-title",
title
});
},
// Returns an instance of the preference actor
@@ -2143,21 +2146,22 @@ Toolbox.prototype = {
await this.target.actorHasMethod("domwalker", "getNodeActorFromWindowID");
}
// Generate list of menu items from the list of frames.
this.frameMap.forEach(frame => {
// A frame is checked if it's the selected one.
let checked = frame.id == this.selectedFrameId;
- let label = frame.url;
-
+ let label;
if (this.target.isWebExtension) {
// Show a shorter url for extensions page.
label = this.target.getExtensionPathName(frame.url);
+ } else {
+ label = getUnicodeUrl(frame.url);
}
// Create menu item.
menu.append(new MenuItem({
label,
type: "radio",
checked,
click: () => {