WIP

Firefox の View Source ウィンドウのタイトルが DOM Inspector で見ると正しく表示されない。常に Minefied/Mozilla Firefox のままになる。不便に感じたので適当に直した。

diff --git a/toolkit/components/viewsource/content/viewPartialSource.js b/toolkit/components/viewsource/content/viewPartialSource.js
--- a/toolkit/components/viewsource/content/viewPartialSource.js
+++ b/toolkit/components/viewsource/content/viewPartialSource.js
@@ -70,16 +70,18 @@ function onLoadViewPartialSource()
     } catch (e) { }
     try {
       document.getElementById("menu_highlightSyntax").setAttribute("checked", gPrefs.getBoolPref("view_source.syntax_highlight"));
     } catch (e) {
     }
   } else {
     document.getElementById("menu_highlightSyntax").setAttribute("hidden", "true");
   }
+
+  getBrowser().addEventListener("DOMTitleChanged", updateTitlebar, true);
 
   if (window.arguments[3] == 'selection')
     viewPartialSourceForSelection(window.arguments[2]);
   else
     viewPartialSourceForFragment(window.arguments[2], window.arguments[3]);
 
   window._content.focus();
 }
@@ -502,8 +504,26 @@ function unicodeTOentity(text)
   // replace chars in our charTable
   str = str.replace(/[<>&"]/g, charTableLookup);
 
   // replace chars > 0x7f via nsIEntityConverter
   str = str.replace(/[^\0-\u007f]/g, convertEntity);
 
   return str;
 }
+
+function updateTitlebar() {
+  var newTitle = "";
+  var docTitle;
+  var docElement = document.documentElement;
+  if (getBrowser().docShell.contentViewer)
+    docTitle = getBrowser().contentTitle;
+
+  var modifier = docElement.getAttribute("titlemodifier");
+  if (docTitle) {
+    newTitle += docElement.getAttribute("titlepreface");
+    newTitle += docTitle;
+    if (modifier)
+      newTitle += docElement.getAttribute("titlemenuseparator");
+  }
+  newTitle += docElement.getAttribute("titlemodifier");
+  document.title = newTitle;
+}
diff --git a/toolkit/components/viewsource/content/viewPartialSource.xul b/toolkit/components/viewsource/content/viewPartialSource.xul
--- a/toolkit/components/viewsource/content/viewPartialSource.xul
+++ b/toolkit/components/viewsource/content/viewPartialSource.xul
@@ -52,17 +52,16 @@
 %brandDTD;
 <!ENTITY % sourceDTD SYSTEM "chrome://global/locale/viewSource.dtd" >
 %sourceDTD;
 ]>
 
 <window id="viewSource"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="onLoadViewPartialSource();"
-        contenttitlesetting="true"
         title="&mainWindow.title;" 
         titlemodifier="&mainWindow.titlemodifier;" 
         titlepreface=""
         titlemenuseparator ="&mainWindow.titlemodifierseparator;"  
         windowtype="navigator:view-source"
         width="500" height="300"
         screenX="10" screenY="10"
         persist="screenX screenY width height sizemode">
diff --git a/toolkit/components/viewsource/content/viewSource.js b/toolkit/components/viewsource/content/viewSource.js
--- a/toolkit/components/viewsource/content/viewSource.js
+++ b/toolkit/components/viewsource/content/viewSource.js
@@ -151,16 +151,17 @@ function viewSource(url)
 {
   if (!url)
     return false; // throw Components.results.NS_ERROR_FAILURE;
     
   var viewSrcUrl = "view-source:" + url;
 
   getBrowser().addEventListener("unload", onUnloadContent, true);
   getBrowser().addEventListener("load", onLoadContent, true);
+  getBrowser().addEventListener("DOMTitleChanged", updateTitlebar, true);
 
   var loadFromURL = true;
   //
   // Parse the 'arguments' supplied with the dialog.
   //    arg[0] - URL string.
   //    arg[1] - Charset value in the form 'charset=xxx'.
   //    arg[2] - Page descriptor used to load content from the cache.
   //    arg[3] - Line number to go to.
@@ -737,8 +738,26 @@ function UpdateBackForwardCommands(aWebN
 
   if (forwardDisabled == aWebNavigation.canGoForward) {
     if (forwardDisabled)
       forwardBroadcaster.removeAttribute("disabled");
     else
       forwardBroadcaster.setAttribute("disabled", true);
   }
 }
+
+function updateTitlebar() {
+  var newTitle = "";
+  var docTitle;
+  var docElement = document.documentElement;
+  if (getBrowser().docShell.contentViewer)
+    docTitle = getBrowser().contentTitle;
+
+  var modifier = docElement.getAttribute("titlemodifier");
+  if (docTitle) {
+    newTitle += docElement.getAttribute("titlepreface");
+    newTitle += docTitle;
+    if (modifier)
+      newTitle += docElement.getAttribute("titlemenuseparator");
+  }
+  newTitle += docElement.getAttribute("titlemodifier");
+  document.title = newTitle;
+}
diff --git a/toolkit/components/viewsource/content/viewSource.xul b/toolkit/components/viewsource/content/viewSource.xul
--- a/toolkit/components/viewsource/content/viewSource.xul
+++ b/toolkit/components/viewsource/content/viewSource.xul
@@ -54,17 +54,16 @@
 <!ENTITY % sourceDTD SYSTEM "chrome://global/locale/viewSource.dtd" >
 %sourceDTD;
 ]>
 
 <window id="viewSource"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         onload="onLoadViewSource();"
         onunload="onUnloadViewSource();"
-        contenttitlesetting="true"
         title="&mainWindow.title;" 
         titlemodifier="&mainWindow.titlemodifier;" 
         titlepreface="&mainWindow.preface;"
         titlemenuseparator ="&mainWindow.titlemodifierseparator;"  
         windowtype="navigator:view-source"
         width="640" height="480"
         screenX="10" screenY="10"
         persist="screenX screenY width height sizemode">

メモ