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 draft
authorZhang Junzhi <zjz@zjz.name>
Tue, 03 Apr 2018 01:23:24 +0800
changeset 780909 50da529445967d083eeafe952fbcc088ea9e86fb
parent 780908 381b0c274d435603d188090f6df4eea5996c327f
child 780910 e5b3e63e807ef6f1ffc4e70ef3a792597e945682
push id106159
push userbmo:zjz@zjz.name
push dateThu, 12 Apr 2018 07:30:36 +0000
reviewersjdescottes
bugs1448553
milestone61.0a1
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
devtools/client/framework/toolbox.js
--- 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: () => {