Bug 513147 - Remove the "properties" dialog (and associated "metaData" hooks) from web elements. r=vlad sr=jonas
authorJohnathan Nightingale <johnath@mozilla.com>
Tue, 01 Sep 2009 09:21:35 -0400
changeset 32129 60ddd1db03973d1a1a958c3907fc75f7f380c8c4
parent 32128 22304c45a4c7f2dd3390a3d2adb20d694780d49d
child 32130 c2843401d2f9bbb9300dfad8c7bbbe6f8ce01156
push idunknown
push userunknown
push dateunknown
reviewersvlad, jonas
bugs513147
milestone1.9.3a1pre
Bug 513147 - Remove the "properties" dialog (and associated "metaData" hooks) from web elements. r=vlad sr=jonas
browser/base/content/browser-context.inc
browser/base/content/metaData.js
browser/base/content/metaData.xul
browser/base/content/nsContextMenu.js
browser/base/content/test/test_contextmenu.html
browser/base/jar.mn
browser/locales/en-US/chrome/browser/browser.dtd
browser/locales/en-US/chrome/browser/metaData.dtd
browser/locales/en-US/chrome/browser/metaData.properties
browser/locales/jar.mn
browser/themes/gnomestripe/browser/browser.css
--- a/browser/base/content/browser-context.inc
+++ b/browser/base/content/browser-context.inc
@@ -296,20 +296,16 @@
                 label="&viewPageSourceCmd.label;"
                 accesskey="&viewPageSourceCmd.accesskey;"
                 oncommand="BrowserViewSourceOfDocument(gContextMenu.browser.contentDocument);"
                 observes="isImage"/>
       <menuitem id="context-viewinfo"
                 label="&viewPageInfoCmd.label;"
                 accesskey="&viewPageInfoCmd.accesskey;"
                 oncommand="gContextMenu.viewInfo();"/>
-      <menuitem id="context-metadata"
-                label="&metadataCmd.label;"
-                accesskey="&metadataCmd.accesskey;"
-                oncommand="gContextMenu.showMetadata();"/>
       <menuseparator id="spell-separator"/>
       <menuitem id="spell-check-enabled"
                 label="&spellCheckEnable.label;"
                 type="checkbox"
                 accesskey="&spellCheckEnable.accesskey;"
                 oncommand="InlineSpellCheckerUI.toggleEnabled();"/>
       <menuitem id="spell-add-dictionaries-main"
                 label="&spellAddDictionaries.label;"
deleted file mode 100644
--- a/browser/base/content/metaData.js
+++ /dev/null
@@ -1,655 +0,0 @@
-# -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-#
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is this file as it was released on January 3, 2001.
-#
-# The Initial Developer of the Original Code is
-# Jonas Sicking.
-# Portions created by the Initial Developer are Copyright (C) 2000
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Jonas Sicking <sicking@bigfoot.com> (Original Author)
-#   Gervase Markham <gerv@gerv.net>
-#   Heikki Toivonen <heikki@netscape.com>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-const XLinkNS = "http://www.w3.org/1999/xlink";
-const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
-const XMLNS = "http://www.w3.org/XML/1998/namespace";
-const XHTMLNS = "http://www.w3.org/1999/xhtml";
-var gMetadataBundle;
-var gLangBundle;
-var gRegionBundle;
-var nodeView;
-var htmlMode = false;
-
-var onLink   = false;
-var onImage  = false;
-var onInsDel = false;
-var onQuote  = false;
-var onMisc   = false;
-var onTable  = false;
-var onTitle  = false;
-var onLang   = false;
-
-// Interface for image loading content
-const nsIImageLoadingContent = Components.interfaces.nsIImageLoadingContent;
-
-const prefs = Components.classes["@mozilla.org/preferences-service;1"].
-              getService(Components.interfaces.nsIPrefBranch);
-
-const nsICacheService = Components.interfaces.nsICacheService;
-const cacheService = Components.classes["@mozilla.org/network/cache-service;1"]
-                     .getService(nsICacheService);
-var httpCacheSession = cacheService.createSession("HTTP", 0, true);
-httpCacheSession.doomEntriesIfExpired = false;
-var ftpCacheSession = cacheService.createSession("FTP", 0, true);
-ftpCacheSession.doomEntriesIfExpired = false;
-
-const PREF_PINGS_ENABLED = "browser.send_pings";
-const PREF_PINGS_MAX_PER_LINK = "browser.send_pings.max_per_link";
-const PREF_PINGS_REQUIRE_SAME_HOST = "browser.send_pings.require_same_host";
-
-/**
- * This function generates an array of pings that will be sent if the given
- * anchor element is clicked.  It basically duplicates the pref checking logic
- * found in nsWebShell.cpp.  It might be nice to expose that functionality on
- * some interface that both of these sections of code could share.
- *
- * @param elem
- *   An anchor or area element
- * @return 
- *   An array of URL strings corresponding to the pings that would occur if
- *   the element's href were loaded.
- */
-function getPings(elem)
-{
-  var result = [];
-
-  var enabled = prefs.getBoolPref(PREF_PINGS_ENABLED);
-  if (!enabled)
-    return result;
-  var maxPings = prefs.getIntPref(PREF_PINGS_MAX_PER_LINK);
-  if (maxPings == 0)
-    return result;
-  var requireSameHost = prefs.getBoolPref(PREF_PINGS_REQUIRE_SAME_HOST);
-
-  const ios =
-      Components.classes["@mozilla.org/network/io-service;1"].
-      getService(Components.interfaces.nsIIOService);
-
-  var doc = elem.ownerDocument;
-  var docURI = ios.newURI(doc.documentURI, doc.characterSet, null);
-
-  // The URL strings returned by elem.ping are absolute URLs.
-  var pings = elem.ping;
-  if (!pings)
-    return result;
-  pings = pings.split(" ");
-  for (var i = 0; i < pings.length; ++i) {
-    if (requireSameHost) {
-      var uri = ios.newURI(pings[i], doc.characterSet, null);
-      if (uri.asciiHost == docURI.asciiHost)
-        result.push(pings[i]);
-    } else {
-      result.push(pings[i]);
-    }
-    if (result.length == maxPings)
-      break;
-  }
-
-  return result;
-}
-
-function onLoad()
-{
-  gMetadataBundle = document.getElementById("bundle_metadata");
-  gLangBundle = document.getElementById("bundle_languages");
-  gRegionBundle = document.getElementById("bundle_regions");
-  
-  showMetadataFor(window.arguments[0]);
-  nodeView = window.arguments[0].ownerDocument.defaultView;
-}
-
-function showMetadataFor(elem)
-{
-  // skip past non-element nodes
-  while (elem && elem.nodeType != Node.ELEMENT_NODE)
-    elem = elem.parentNode;
-
-  if (!elem) {
-    alert(gMetadataBundle.getString("unableToShowProps"));
-    window.close();
-  }
-
-  if (elem.ownerDocument.getElementsByName && !elem.ownerDocument.namespaceURI)
-    htmlMode = true;
-  
-  // htmllocalname is "" if it's not an html tag, or the name of the tag if it is.
-  var htmllocalname = "";
-  if (isHTMLElement(elem,"")) { 
-    htmllocalname = elem.localName.toLowerCase();
-  }
-  
-  // We only look for images once
-  checkForImage(elem, htmllocalname);
-  
-  // Walk up the tree, looking for elements of interest.
-  // Each of them could be at a different level in the tree, so they each
-  // need their own boolean to tell us to stop looking.
-  while (elem && elem.nodeType == Node.ELEMENT_NODE) {
-    htmllocalname = "";
-    if (isHTMLElement(elem,"")) { 
-      htmllocalname = elem.localName.toLowerCase();
-    }
-
-    if (!onLink)   checkForLink(elem, htmllocalname);
-    if (!onInsDel) checkForInsDel(elem, htmllocalname);
-    if (!onQuote)  checkForQuote(elem, htmllocalname);
-    if (!onTable)  checkForTable(elem, htmllocalname);
-    if (!onTitle)  checkForTitle(elem, htmllocalname);
-    if (!onLang)   checkForLang(elem, htmllocalname);
-      
-    elem = elem.parentNode;
-  }
-  
-  // Decide which sections to show
-  var onMisc = onTable || onTitle || onLang;
-  if (!onMisc)   hideNode("misc-sec");
-  if (!onLink)   hideNode("link-sec");
-  if (!onImage)  hideNode("image-sec");
-  if (!onInsDel) hideNode("insdel-sec");
-  if (!onQuote)  hideNode("quote-sec");
-
-  // Fix the Misc section visibilities
-  if (onMisc) {
-    if (!onTable) hideNode("misc-tblsummary");
-    if (!onLang)  hideNode("misc-lang");
-    if (!onTitle) hideNode("misc-title");
-  }
-
-  // Get rid of the "No properties" message. This is a backstop -
-  // it should really never show, as long as nsContextMenu.js's
-  // checking doesn't get broken.
-  if (onLink || onImage || onInsDel || onQuote || onMisc)
-    hideNode("no-properties")
-}
-
-
-function checkForImage(elem, htmllocalname)
-{
-  var img;
-  var imgType; // "img" = <img>
-               // "object" = <object>
-               // "input" = <input type=image>
-               // "background" = css background (to be added later)
-  var ismap = false;
-
-  if (htmllocalname === "img") {
-    img = elem;
-    imgType = "img";
-
-  } else if (htmllocalname === "object" &&
-             elem.type.substring(0,6) == "image/" &&
-             elem.data) {
-    img = elem;
-    imgType = "object";
-
-  } else if (htmllocalname === "input" &&
-             elem.type.toUpperCase() == "IMAGE") {
-    img = elem;
-    imgType = "input";
-
-  } else if (htmllocalname === "area" || htmllocalname === "a") {
-
-    // Clicked in image map?
-    var map = elem;
-    ismap = true;
-    setAlt(map);
-
-    while (map && map.nodeType == Node.ELEMENT_NODE && !isHTMLElement(map,"map") )
-      map = map.parentNode;
-
-    if (map && map.nodeType == Node.ELEMENT_NODE) {
-      img = getImageForMap(map);
-      var imgLocalName = img && img.localName.toLowerCase();
-      if (imgLocalName == "img" || imgLocalName == "object")
-          imgType = imgLocalName;
-    }
-  }
-
-  if (img) {
-
-    var imgURL = imgType == "object" ? img.data : img.src;
-    setInfo("image-url", imgURL);
-    var size = getSize(imgURL);
-
-    if (size != -1) {
-      var kbSize = size / 1024;
-      kbSize = Math.round(kbSize*100)/100;
-      setInfo("image-filesize", gMetadataBundle.getFormattedString("imageSize", [kbSize, size]));
-    } else {
-      setInfo("image-filesize", gMetadataBundle.getString("imageSizeUnknown"));
-    }
-
-    var imageRequest = img.QueryInterface(nsIImageLoadingContent)
-                          .getRequest(nsIImageLoadingContent.CURRENT_REQUEST);
-    var image = imageRequest && imageRequest.image;
-    var imageType = "";
-    if (imageRequest) {
-      imageType = imageRequest.mimeType;
-      var imageMimeType = /^image\/(.*)/.exec(imageType);
-      if (imageMimeType) {
-        imageType = imageMimeType[1].toUpperCase();
-        if (image && image.numFrames > 1)
-          imageType = gMetadataBundle.getFormattedString("animatedImageType",
-                                                         [imageType, image.numFrames]);
-        else
-          imageType = gMetadataBundle.getFormattedString("imageType", [imageType]);
-      }
-    }
-    setInfo("image-type", imageType);
-
-    var imageSize = "";
-    if (img.width) {
-      if (image && (image.width != img.width || image.height != img.height))
-        imageSize = gMetadataBundle.getFormattedString("imageDimensionsScaled",
-                                                       [image.width, image.height,
-                                                        img.width,   img.height]);
-      else
-        imageSize = gMetadataBundle.getFormattedString("imageDimensions", [img.width, img.height]);
-    }        
-    setInfo("image-size", imageSize);
-     
-    if (imgType == "img") {
-      setInfo("image-desc", img.longDesc);
-    } else {
-      setInfo("image-desc", "");
-    }
-    
-    onImage = true;
-  }
-
-  if (!ismap) {
-   if (imgType == "img" || imgType == "input") {
-     setAlt(img);
-   } else {
-     hideNode("image-alt");
-   }
-  }
-}
-
-function checkForLink(elem, htmllocalname)
-{
-  if ((htmllocalname === "a" && elem.href != "") ||
-    htmllocalname === "area") {
-
-    setInfo("link-lang", convertLanguageCode(elem.getAttribute("hreflang")));
-    setInfo("link-url",  elem.href);
-    setInfo("link-type", elem.getAttribute("type"));
-    setInfo("link-rel",  elem.getAttribute("rel"));
-    setInfo("link-rev",  elem.getAttribute("rev"));
-    setInfo("link-ping", getPings(elem).join('\n'));
-
-    var target = elem.target;
-
-    switch (target) {
-    case "_top":
-      setInfo("link-target", gMetadataBundle.getString("sameWindowText"));
-      break;
-    case "_parent":
-      setInfo("link-target", gMetadataBundle.getString("parentFrameText"));
-      break;
-    case "_blank":
-      var where = "Window";
-      var newWindowPref = prefs.getIntPref("browser.link.open_newwindow");
-      if (newWindowPref == 3)
-        where = "Tab";
-      setInfo("link-target", gMetadataBundle.getString("new" + where + "Text"));
-      break;
-    case "":
-    case "_self":
-      if (elem.ownerDocument.defaultView) {
-        if (elem.ownerDocument != elem.ownerDocument.defaultView.content.document)
-          setInfo("link-target", gMetadataBundle.getString("sameFrameText"));
-        else
-          setInfo("link-target", gMetadataBundle.getString("sameWindowText"));
-      } else {
-        hideNode("link-target");
-      }
-      break;
-    default:
-      setInfo("link-target", "\"" + target + "\"");
-    }
-
-    onLink = true;
-  }
-
-  else if (elem.getAttributeNS(XLinkNS, "href") != "") {
-    var ioService = Components.classes["@mozilla.org/network/io-service;1"]
-                              .getService(Components.interfaces.nsIIOService);
-    var url = elem.getAttributeNS(XLinkNS, "href");
-    try {
-        var baseURI = ioService.newURI(elem.baseURI, elem.ownerDocument.characterSet, null);
-        url = ioService.newURI(url, elem.ownerDocument.characterSet, baseURI).spec;
-    } catch (e) {}
-    setInfo("link-url", url);
-    setInfo("link-lang", "");
-    setInfo("link-type", "");
-    setInfo("link-rel", "");
-    setInfo("link-rev", "");
-    setInfo("link-ping", "");
-
-    switch (elem.getAttributeNS(XLinkNS,"show")) {
-    case "embed":
-        setInfo("link-target", gMetadataBundle.getString("embeddedText"));
-        break;
-    case "new":
-        setInfo("link-target", gMetadataBundle.getString("newWindowText"));
-        break;
-    case "":
-    case "replace":
-        if (elem.ownerDocument != elem.ownerDocument.defaultView.content.document)
-            setInfo("link-target", gMetadataBundle.getString("sameFrameText"));
-        else
-            setInfo("link-target", gMetadataBundle.getString("sameWindowText"));
-        break;
-    default:
-        setInfo("link-target", "");
-        break;
-    }
-    
-    onLink = true;
-  }
-}
-
-function checkForInsDel(elem, htmllocalname)
-{
-  if ((htmllocalname === "ins" || htmllocalname === "del") &&
-    (elem.cite || elem.dateTime)) {
-    setInfo("insdel-cite", elem.cite);
-    setInfo("insdel-date", elem.dateTime);
-    onInsDel = true;
-  } 
-}
-
-
-function checkForQuote(elem, htmllocalname)
-{
-  if ((htmllocalname === "q" || htmllocalname === "blockquote") && elem.cite) {
-    setInfo("quote-cite", elem.cite);
-    onQuote = true;
-  } 
-}
-
-function checkForTable(elem, htmllocalname)
-{
-  if (htmllocalname === "table" && elem.summary) {
-    setInfo("misc-tblsummary", elem.summary);
-    onTable = true;
-  }
-}
-
-function checkForLang(elem, htmllocalname)
-{
-  if ((htmllocalname && elem.lang) || elem.getAttributeNS(XMLNS, "lang")) {
-    var abbr;
-    if (htmllocalname && elem.lang)
-      abbr = elem.lang;
-    else
-      abbr = elem.getAttributeNS(XMLNS, "lang");
-        
-    setInfo("misc-lang", convertLanguageCode(abbr));
-    onLang = true;
-  }
-}
-    
-function checkForTitle(elem, htmllocalname)
-{
-  if (htmllocalname && elem.title) {
-    setInfo("misc-title", elem.title);
-    onTitle = true;
-  }    
-}
-
-/*
- * Set text of node id to value
- * if value="" the node with specified id is hidden.
- * Node should be have one of these forms
- * <xul:label id="id-text" value=""/>
- * <xul:description id="id-text"/>
- */
-function setInfo(id, value)
-{
-  if (!value) {
-    hideNode(id);
-    return;
-  }
-
-  var node = document.getElementById(id+"-text");
-
-  if (node.namespaceURI == XULNS && node.localName == "label" ||
-     (node.namespaceURI == XULNS && node.localName == "textbox")) {
-    node.setAttribute("value",value);
-
-  } else if (node.namespaceURI == XULNS && node.localName == "description") {
-    while (node.hasChildNodes())
-      node.removeChild(node.firstChild);
-    node.appendChild(node.ownerDocument.createTextNode(value));
-  }
-}
-
-// Hide node with specified id
-function hideNode(id)
-{
-    var style = document.getElementById(id).getAttribute("style");
-    document.getElementById(id).setAttribute("style", "display:none;" + style);
-}
-
-/*
- * Find <img> or <object> which uses an imagemap.
- * If more then one object is found we can't determine which one
- * was clicked.
- *
- * This code has to be changed once bug 1882 is fixed.
- * Once bug 72527 is fixed this code should use the .images collection.
- */
-function getImageForMap(map)
-{
-  var mapuri = "#" + map.getAttribute("name");
-  var multipleFound = false;
-  var img;
-
-  var list = getHTMLElements(map.ownerDocument, "img");
-  for (var i=0; i < list.length; i++) {
-    if (list.item(i).getAttribute("usemap") == mapuri) {
-      if (img) {
-        multipleFound = true;
-        break;
-      } else {
-        img = list.item(i);
-        imgType = "img";
-      }
-    }
-  }
-
-  list = getHTMLElements(map.ownerDocument, "object");
-  for (i = 0; i < list.length; i++) {
-    if (list.item(i).getAttribute("usemap") == mapuri) {
-      if (img) {
-        multipleFound = true;
-        break;
-      } else {
-        img = list.item(i);
-        imgType = "object";
-      }
-    }
-  }
-
-  if (multipleFound)
-    img = null;
-
-  return img;
-}
-
-function getHTMLElements(node, name)
-{
-  if (htmlMode)
-    return node.getElementsByTagName(name);
-  return node.getElementsByTagNameNS(XHTMLNS, name);
-}
-
-// name should be in lower case
-function isHTMLElement(node, name)
-{
-  if (node.nodeType != Node.ELEMENT_NODE)
-    return false;
-
-  if (htmlMode)
-    return !name || node.localName.toLowerCase() == name;
-
-  return (!name || node.localName == name) && node.namespaceURI == XHTMLNS;
-}
-
-// This function coded according to the spec at:
-// http://www.bath.ac.uk/~py8ieh/internet/discussion/metadata.txt
-function convertLanguageCode(abbr)
-{
-  if (!abbr) return "";
-  var result;
-  var language = "";
-  var region;
-  var is_region_set = false;
-  var tokens = abbr.split("-");
-
-  if (tokens[0] === "x" || tokens[0] === "i")
-  {
-    // x and i prefixes mean unofficial ones. So we upper-case the first
-    // word and leave the rest.
-    tokens.shift();
-
-    if (tokens[0])
-    {
-      // Upper-case first letter
-      language = tokens[0].substr(0, 1).toUpperCase() + tokens[0].substr(1);
-      tokens.shift();
-
-      if (tokens[0])
-      {
-        // Add on the rest as space-separated strings inside the brackets
-        region = tokens.join(" ");
-        is_region_set = true;
-      }
-    }
-  }
-  else
-  {
-    // Otherwise we treat the first as a lang, the second as a region
-    // and the rest as strings.
-    try
-    {
-      language = gLangBundle.getString(tokens[0].toLowerCase());
-    }
-    catch (e) 
-    {
-      // Language not present in lang bundle
-      language = tokens[0]; 
-    }
-
-    tokens.shift();
-
-    if (tokens[0])
-    {
-      try
-      {
-        // We don't add it on to the result immediately
-        // because we want to get the spacing right.
-        region = gRegionBundle.getString(tokens[0].toLowerCase());
-
-        tokens.shift();
-
-        if (tokens[0])
-        {
-          // Add on the rest as space-separated strings inside the brackets
-          region += " " + tokens.join(" ");
-        }
-      }
-      catch (e) 
-      {
-        // Region not present in region bundle
-        region = tokens.join(" ");
-      }
-
-      is_region_set = true;
-    }
-  }
-
-  if (is_region_set) {
-    result = gMetadataBundle.getFormattedString("languageRegionFormat",
-                                                [language, region]);
-  } else
-    result = language;
-
-  return result;
-}
-
-// Returns the size of the URL in bytes; must be cached and therefore an HTTP or FTP URL
-function getSize(url) {
-  try
-  {
-    var cacheEntryDescriptor = httpCacheSession.openCacheEntry(url, Components.interfaces.nsICache.ACCESS_READ, false);
-    if(cacheEntryDescriptor)
-      return cacheEntryDescriptor.dataSize;
-  }
-  catch(ex) {}
-  try
-  {
-    cacheEntryDescriptor = ftpCacheSession.openCacheEntry(url, Components.interfaces.nsICache.ACCESS_READ, false);
-    if (cacheEntryDescriptor)
-      return cacheEntryDescriptor.dataSize;
-  }
-  catch(ex) {}
-  return -1;
-}
-
-function setAlt(elem) {
-  var altText = document.getElementById("image-alt-text");
-  if (elem.hasAttribute("alt")) {
-    if (elem.alt != "") {
-      altText.value = elem.alt;
-      altText.setAttribute("style","font-style:inherit");
-    } else {
-      altText.value = gMetadataBundle.getString("altTextBlank");
-      altText.setAttribute("style","font-style:italic");
-    }
-  } else {
-    altText.value = gMetadataBundle.getString("altTextMissing");
-    altText.setAttribute("style","font-style:italic");
-  }
-}
deleted file mode 100644
--- a/browser/base/content/metaData.xul
+++ /dev/null
@@ -1,231 +0,0 @@
-<?xml version="1.0"?> 
-
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is this file as it was released on January 3, 2001.
-#
-# The Initial Developer of the Original Code is
-# Jonas Sicking.
-# Portions created by the Initial Developer are Copyright (C) 2000
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Jonas Sicking <sicking@bigfoot.com> (Original Author)
-#   Gervase Markham <gerv@gerv.net>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://browser/skin/pageInfo.css" type="text/css"?>
-<?xul-overlay href="chrome://global/content/dialogOverlay.xul"?>
-
-<!DOCTYPE window SYSTEM "chrome://browser/locale/metaData.dtd" >
-
-<window id="metadata"
-        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        title="&caption.label;"
-        onload="onLoad()"
-        class="dialog"
-        style="width: 40em; height: 10em;"
-        persist="screenX screenY"
-        screenX="24" screenY="24">
-
-  <script type="application/x-javascript" src="chrome://browser/content/metaData.js"/>
-
-  <keyset id="dialogKeys"/>
-
-  <stringbundle src="chrome://browser/locale/metaData.properties" id="bundle_metadata"/>
-  <stringbundle src="chrome://global/locale/languageNames.properties" id="bundle_languages"/>
-  <stringbundle src="chrome://global/locale/regionNames.properties" id="bundle_regions"/>
-
-  <label id="no-properties" value="&no-properties.label;"/>
-  
-  <vbox id="link-sec">
-    <label value="&link-sec.label;"/>
-    <separator class="groove"/>
-    <grid>
-      <columns>
-        <column/>
-        <column/>
-        <column flex="1"/>
-      </columns>
-      <rows>
-        <row id="link-url">
-          <separator orient="vertical"/>
-          <label value="&link-url.label; "/>
-          <textbox readonly="true" id="link-url-text" class="uri-element"/>
-        </row>
-        <row id="link-target">
-          <separator orient="vertical"/>
-          <label value="&link-target.label; "/>
-          <textbox readonly="true" id="link-target-text"/>
-        </row>
-        <row id="link-type">
-          <separator orient="vertical"/>
-          <label value="&link-type.label; "/>
-          <textbox readonly="true" id="link-type-text"/>
-        </row>
-        <row id="link-lang">
-          <separator orient="vertical"/>
-          <label value="&link-lang.label; "/>
-          <textbox readonly="true" id="link-lang-text"/>
-        </row>
-        <row id="link-rel">
-          <separator orient="vertical"/>
-          <label value="&link-rel.label; "/>
-          <textbox readonly="true" id="link-rel-text"/>
-        </row>
-        <row id="link-rev">
-          <separator orient="vertical"/>
-          <label value="&link-rev.label; "/>
-          <textbox readonly="true" id="link-rev-text"/>
-        </row>
-        <row id="link-ping">
-          <separator orient="vertical"/>
-          <label value="&link-ping.label; "/>
-          <textbox readonly="true" multiline="true" id="link-ping-text"/>
-        </row>
-      </rows>
-    </grid>
-    <separator/>
-  </vbox>
-  <vbox id="image-sec">
-    <label value="&image-sec.label;"/>
-    <separator class="groove"/>
-    <grid>
-      <columns>
-        <column/>
-        <column/>
-        <column flex="1"/>
-      </columns>
-      <rows>
-        <row id="image-url">
-          <separator orient="vertical"/>
-          <label value="&image-url.label; "/>
-          <textbox readonly="true" id="image-url-text" class="uri-element"/>
-        </row>
-        <row id="image-type">
-          <separator orient="vertical"/>
-          <label value="&image-type.label; "/>
-          <textbox readonly="true" id="image-type-text"/>
-        </row>
-        <row id="image-size">
-          <separator orient="vertical"/>
-          <label value="&image-size.label; "/>
-          <textbox readonly="true" id="image-size-text"/>
-        </row>
-	<row id="image-filesize">
-          <separator orient="vertical"/>
-          <label value="&image-filesize.label; "/>
-          <textbox readonly="true" id="image-filesize-text"/>
-	</row>
-        <row id="image-alt">
-          <separator orient="vertical"/>
-          <label value="&image-alt.label; "/>
-          <textbox readonly="true" id="image-alt-text"/>
-        </row>
-        <row id="image-desc">
-          <separator orient="vertical"/>
-          <label value="&image-desc.label; "/>
-          <textbox readonly="true" id="image-desc-text"/>
-        </row>
-      </rows>
-    </grid>
-    <separator/>
-  </vbox>
-  <vbox id="insdel-sec">
-    <label value="&insdel-sec.label;"/>
-    <separator class="groove"/>
-    <grid>
-      <columns>
-        <column/>
-        <column/>
-        <column flex="1"/>
-      </columns>
-      <rows>
-        <row id="insdel-cite">
-          <separator orient="vertical"/>
-          <label value="&insdel-cite.label; "/>
-          <textbox readonly="true" id="insdel-cite-text"/>
-        </row>
-        <row id="insdel-date">
-          <separator orient="vertical"/>
-          <label value="&insdel-date.label; "/>
-          <textbox readonly="true" id="insdel-date-text"/>
-        </row>
-      </rows>
-    </grid>
-    <separator/>
-  </vbox>
-  <vbox id="quote-sec">
-    <label value="&quote-sec.label;"/>
-    <separator class="groove"/>
-    <grid>
-      <columns>
-        <column/>
-        <column/>
-        <column flex="1"/>
-      </columns>
-      <rows>
-        <row id="quote-cite">
-          <separator orient="vertical"/>
-          <label value="&quote-cite.label; "/>
-          <textbox readonly="true" id="quote-cite-text"/>
-        </row>
-      </rows>
-    </grid>
-    <separator/>
-  </vbox>
-  <vbox id="misc-sec">
-    <label value="&misc-sec.label;"/>
-    <separator class="groove"/>
-    <grid>
-      <columns>
-        <column/>
-        <column/>
-        <column flex="1"/>
-      </columns>
-      <rows>
-        <row id="misc-lang">
-          <separator orient="vertical"/>
-          <label value="&misc-lang.label; "/>
-          <textbox readonly="true" id="misc-lang-text"/>
-        </row>
-        <row id="misc-title">
-          <separator orient="vertical"/>
-          <label value="&misc-title.label; "/>
-          <textbox readonly="true" id="misc-title-text"/>
-        </row>
-        <row id="misc-tblsummary">
-          <separator orient="vertical"/>
-          <label value="&misc-tblsummary.label; "/>
-          <textbox readonly="true" id="misc-tblsummary-text"/>
-        </row>
-      </rows>
-    </grid>
-    <separator/>
-  </vbox>
-</window>
--- a/browser/base/content/nsContextMenu.js
+++ b/browser/base/content/nsContextMenu.js
@@ -71,17 +71,16 @@ function nsContextMenu(aXulMenu, aBrowse
   this.onLoadedImage     = false;
   this.onCompletedImage  = false;
   this.onCanvas          = false;
   this.onVideo           = false;
   this.onAudio           = false;
   this.onLink            = false;
   this.onMailtoLink      = false;
   this.onSaveableLink    = false;
-  this.onMetaDataItem    = false;
   this.onMathML          = false;
   this.link              = false;
   this.linkURL           = "";
   this.linkURI           = null;
   this.linkProtocol      = null;
   this.inFrame           = false;
   this.hasBGImage        = false;
   this.isTextSelected    = false;
@@ -126,17 +125,16 @@ nsContextMenu.prototype = {
   initItems: function CM_initItems() {
     this.initOpenItems();
     this.initNavigationItems();
     this.initViewItems();
     this.initMiscItems();
     this.initSpellingItems();
     this.initSaveItems();
     this.initClipboardItems();
-    this.initMetadataItems();
     this.initMediaPlayerItems();
   },
 
   initOpenItems: function CM_initOpenItems() {
     var isMailtoInternal = false;
     if (this.onMailtoLink) {
       var mailtoHandler = Cc["@mozilla.org/uriloader/external-protocol-service;1"].
                           getService(Ci.nsIExternalProtocolService).
@@ -200,19 +198,17 @@ nsContextMenu.prototype = {
     var shouldShow = !(this.isContentSelected ||
                        this.onImage || this.onCanvas ||
                        this.onVideo || this.onAudio ||
                        this.onLink || this.onTextInput);
     this.showItem("context-viewsource", shouldShow);
     this.showItem("context-viewinfo", shouldShow);
 
     this.showItem("context-sep-properties",
-                  !(this.isContentSelected ||
-                    this.onTextInput || this.onCanvas ||
-                    this.onVideo || this.onAudio));
+                  (shouldShow || this.isContentSelected));
 
     // Set as Desktop background depends on whether an image was clicked on,
     // and only works if we have a shell service.
     var haveSetDesktopBackground = false;
 #ifdef HAVE_SHELL_SERVICE
     // Only enable Set as Desktop Background if we can get the shell service.
     var shell = getShellService();
     if (shell)
@@ -385,21 +381,16 @@ nsContextMenu.prototype = {
     this.showItem("context-copyvideourl", this.onVideo);
     this.showItem("context-copyaudiourl", this.onAudio);
     this.setItemAttr("context-copyvideourl",  "disabled", !this.mediaURL);
     this.setItemAttr("context-copyaudiourl",  "disabled", !this.mediaURL);
     this.showItem("context-sep-copyimage", this.onImage ||
                   this.onVideo || this.onAudio);
   },
 
-  initMetadataItems: function() {
-    // Show if user clicked on something which has metadata.
-    this.showItem("context-metadata", this.onMetaDataItem);
-  },
-
   initMediaPlayerItems: function() {
     var onMedia = (this.onVideo || this.onAudio);
     // Several mutually exclusive items... play/pause, mute/unmute, show/hide
     this.showItem("context-media-play",  onMedia && (this.target.paused || this.target.ended));
     this.showItem("context-media-pause", onMedia && !this.target.paused && !this.target.ended);
     this.showItem("context-media-mute",   onMedia && !this.target.muted);
     this.showItem("context-media-unmute", onMedia && this.target.muted);
     this.showItem("context-media-showcontrols", onMedia && !this.target.controls)
@@ -428,17 +419,16 @@ nsContextMenu.prototype = {
     // Initialize contextual info.
     this.onImage           = false;
     this.onLoadedImage     = false;
     this.onCompletedImage  = false;
     this.onStandaloneImage = false;
     this.onCanvas          = false;
     this.onVideo           = false;
     this.onAudio           = false;
-    this.onMetaDataItem    = false;
     this.onTextInput       = false;
     this.onKeywordField    = false;
     this.mediaURL          = "";
     this.onLink            = false;
     this.linkURL           = "";
     this.linkURI           = null;
     this.linkProtocol      = "";
     this.onMathML          = false;
@@ -461,17 +451,16 @@ nsContextMenu.prototype = {
     this.target = aNode;
 
     // First, do checks for nodes that never have children.
     if (this.target.nodeType == Node.ELEMENT_NODE) {
       // See if the user clicked on an image.
       if (this.target instanceof Ci.nsIImageLoadingContent &&
           this.target.currentURI) {
         this.onImage = true;
-        this.onMetaDataItem = true;
                 
         var request =
           this.target.getRequest(Ci.nsIImageLoadingContent.CURRENT_REQUEST);
         if (request && (request.imageStatus & request.STATUS_SIZE_AVAILABLE))
           this.onLoadedImage = true;
         if (request && (request.imageStatus & request.STATUS_LOAD_COMPLETE))
           this.onCompletedImage = true;
 
@@ -532,17 +521,16 @@ nsContextMenu.prototype = {
         if (!this.onLink &&
              ((elem instanceof HTMLAnchorElement && elem.href) ||
               (elem instanceof HTMLAreaElement && elem.href) ||
               elem instanceof HTMLLinkElement ||
               elem.getAttributeNS("http://www.w3.org/1999/xlink", "type") == "simple")) {
             
           // Target is a link or a descendant of a link.
           this.onLink = true;
-          this.onMetaDataItem = true;
 
           // xxxmpc: this is kind of a hack to work around a Gecko bug (see bug 266932)
           // we're going to walk up the DOM looking for a parent link node,
           // this shouldn't be necessary, but we're matching the existing behaviour for left click
           var realLink = elem;
           var parent = elem;
           while ((parent = parent.parentNode) &&
                  (parent.nodeType == Node.ELEMENT_NODE)) {
@@ -559,32 +547,16 @@ nsContextMenu.prototype = {
           this.link = realLink;
           this.linkURL = this.getLinkURL();
           this.linkURI = this.getLinkURI();
           this.linkProtocol = this.getLinkProtocol();
           this.onMailtoLink = (this.linkProtocol == "mailto");
           this.onSaveableLink = this.isLinkSaveable( this.link );
         }
 
-        // Metadata item?
-        if (!this.onMetaDataItem) {
-          // We display metadata on anything which fits
-          // the below test, as well as for links and images
-          // (which set this.onMetaDataItem to true elsewhere)
-          if ((elem instanceof HTMLQuoteElement && elem.cite) ||
-              (elem instanceof HTMLTableElement && elem.summary) ||
-              (elem instanceof HTMLModElement &&
-               (elem.cite || elem.dateTime)) ||
-              (elem instanceof HTMLElement &&
-               (elem.title || elem.lang)) ||
-              elem.getAttributeNS(XMLNS, "lang")) {
-            this.onMetaDataItem = true;
-          }
-        }
-
         // Background image?  Don't bother if we've already found a
         // background image further down the hierarchy.  Otherwise,
         // we look for the computed background-image style.
         if (!this.hasBGImage) {
           var bgImgUrl = this.getComputedURL( elem, "background-image" );
           if (bgImgUrl) {
             this.hasBGImage = true;
             this.bgImageURL = makeURLAbsolute(elem.baseURI,
@@ -627,17 +599,16 @@ nsContextMenu.prototype = {
       }
 
       if (isEditable) {
         this.onTextInput       = true;
         this.onKeywordField    = false;
         this.onImage           = false;
         this.onLoadedImage     = false;
         this.onCompletedImage  = false;
-        this.onMetaDataItem    = false;
         this.onMathML          = false;
         this.inFrame           = false;
         this.hasBGImage        = false;
         this.isDesignMode      = true;
         this.possibleSpellChecking = true;
         InlineSpellCheckerUI.init(editingSession.getEditorForWindow(win));
         var canSpell = InlineSpellCheckerUI.canSpellCheck;
         InlineSpellCheckerUI.initFromEvent(aRangeParent, aRangeOffset);
@@ -1094,24 +1065,16 @@ nsContextMenu.prototype = {
       // Do nothing.
     }
 
     var clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].
                     getService(Ci.nsIClipboardHelper);
     clipboard.copyString(addresses);
   },
 
-  // Open Metadata window for node
-  showMetadata: function () {
-    window.openDialog("chrome://browser/content/metaData.xul",
-                      "_blank",
-                      "scrollbars,resizable,chrome,dialog=no",
-                      this.target);
-  },
-
   ///////////////
   // Utilities //
   ///////////////
 
   // Show/hide one item (specified via name or the item element itself).
   showItem: function(aItemOrId, aShow) {
     var item = aItemOrId.constructor == String ?
       document.getElementById(aItemOrId) : aItemOrId;
--- a/browser/base/content/test/test_contextmenu.html
+++ b/browser/base/content/test/test_contextmenu.html
@@ -168,28 +168,24 @@ function runTest(testNum) {
     case 3:
         // Context menu for text link
         checkContextMenu(["context-openlink",      true,
                           "context-openlinkintab", true,
                           "---",                   null,
                           "context-bookmarklink",  true,
                           "context-savelink",      true,
                           "context-sendlink",      true,
-                          "context-copylink",      true,
-                          "---",                   null,
-                          "context-metadata",      true]);
+                          "context-copylink",      true]);
         closeContextMenu()
         openContextMenuFor(mailto); // Invoke context menu for next test.
         break;
 
     case 4:
         // Context menu for text mailto-link
-        checkContextMenu(["context-copyemail", true,
-                          "---",               null,
-                          "context-metadata",  true]);
+        checkContextMenu(["context-copyemail", true]);
         closeContextMenu()
         openContextMenuFor(input); // Invoke context menu for next test.
         break;
 
     case 5:
         // Context menu for text input field
         checkContextMenu(["context-undo",        false,
                           "---",                 null,
@@ -209,19 +205,17 @@ function runTest(testNum) {
         // Context menu for an image
         checkContextMenu(["context-viewimage",            true,
                           "context-copyimage-contents",   true,
                           "context-copyimage",            true,
                           "---",                          null,
                           "context-saveimage",            true,
                           "context-sendimage",            true,
                           "context-setDesktopBackground", true,
-                          "context-blockimage",           true,
-                          "---",                          null,
-                          "context-metadata",             true]);
+                          "context-blockimage",           true]);
         closeContextMenu();
         openContextMenuFor(canvas); // Invoke context menu for next test.
         break;
 
     case 7:
         // Context menu for a canvas
         checkContextMenu(["context-viewimage",    true,
                           "context-saveimage",    true,
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -19,18 +19,16 @@ browser.jar:
         content/browser/aboutRobots-icon-rtl.png      (content/aboutRobots-icon-rtl.png)
         content/browser/aboutRobots-widget-left.png   (content/aboutRobots-widget-left.png)
         content/browser/aboutRobots-widget-right.png  (content/aboutRobots-widget-right.png)
 *       content/browser/browser.css                   (content/browser.css)
 *       content/browser/browser.js                    (content/browser.js)
 *       content/browser/browser.xul                   (content/browser.xul)
 *       content/browser/browser-tabPreviews.xml       (content/browser-tabPreviews.xml)
 *       content/browser/credits.xhtml                 (content/credits.xhtml)
-*       content/browser/metaData.js                   (content/metaData.js)
-*       content/browser/metaData.xul                  (content/metaData.xul)
 *       content/browser/pageinfo/pageInfo.xul         (content/pageinfo/pageInfo.xul)
 *       content/browser/pageinfo/pageInfo.js          (content/pageinfo/pageInfo.js)
 *       content/browser/pageinfo/pageInfo.css         (content/pageinfo/pageInfo.css)
 *       content/browser/pageinfo/feeds.js             (content/pageinfo/feeds.js)
 *       content/browser/pageinfo/feeds.xml            (content/pageinfo/feeds.xml)
 *       content/browser/pageinfo/permissions.js       (content/pageinfo/permissions.js)
 *       content/browser/pageinfo/security.js          (content/pageinfo/security.js)
 *       content/browser/openLocation.js               (content/openLocation.js)
--- a/browser/locales/en-US/chrome/browser/browser.dtd
+++ b/browser/locales/en-US/chrome/browser/browser.dtd
@@ -309,18 +309,16 @@
 <!ENTITY copyImageCmd.accesskey       "o">
 <!ENTITY copyImageContentsCmd.label   "Copy Image">
 <!ENTITY copyImageContentsCmd.accesskey  "y"> 
 <!ENTITY copyVideoURLCmd.label        "Copy Video Location">
 <!ENTITY copyVideoURLCmd.accesskey    "o">
 <!ENTITY copyAudioURLCmd.label        "Copy Audio Location">
 <!ENTITY copyAudioURLCmd.accesskey    "o">
 <!ENTITY blockImageCmd.accesskey      "B">
-<!ENTITY metadataCmd.label            "Properties">
-<!ENTITY metadataCmd.accesskey        "P">
 <!ENTITY copyEmailCmd.label           "Copy Email Address">
 <!ENTITY copyEmailCmd.accesskey       "E">
 <!ENTITY thisFrameMenu.label              "This Frame">
 <!ENTITY thisFrameMenu.accesskey          "h">
 
 <!-- Media (video/audio) controls -->
 <!ENTITY mediaPlay.label             "Play">
 <!ENTITY mediaPlay.accesskey         "P">
deleted file mode 100644
--- a/browser/locales/en-US/chrome/browser/metaData.dtd
+++ /dev/null
@@ -1,27 +0,0 @@
-<!ENTITY no-properties.label   "No properties set.">
-
-<!ENTITY caption.label         "Element Properties">
-<!ENTITY image-sec.label       "Image Properties">
-<!ENTITY image-url.label       "Location:">
-<!ENTITY image-type.label      "Type:">
-<!ENTITY image-desc.label      "Description:">
-<!ENTITY image-alt.label       "Alternate text:">
-<!ENTITY image-size.label      "Image Dimensions:">
-<!ENTITY image-filesize.label  "Size of File:">
-<!ENTITY insdel-sec.label      "Insert/Delete Properties">
-<!ENTITY insdel-cite.label     "Info:">
-<!ENTITY insdel-date.label     "Date:">
-<!ENTITY link-sec.label        "Link Properties">
-<!ENTITY link-url.label        "Address:">
-<!ENTITY link-target.label     "Will open in:">
-<!ENTITY link-type.label       "Target type:">
-<!ENTITY link-lang.label       "Target language:">
-<!ENTITY link-rel.label        "Relation:">
-<!ENTITY link-rev.label        "Reversed relation:">
-<!ENTITY link-ping.label       "Will notify:">
-<!ENTITY misc-sec.label        "Miscellaneous Properties">
-<!ENTITY misc-lang.label       "Text language:">
-<!ENTITY misc-title.label      "Title:">
-<!ENTITY misc-tblsummary.label "Table summary:">
-<!ENTITY quote-sec.label       "Quote Properties">
-<!ENTITY quote-cite.label      "Info:">
deleted file mode 100644
--- a/browser/locales/en-US/chrome/browser/metaData.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-sameWindowText=Same window
-newWindowText=New window
-newTabText=New tab
-parentFrameText=Parent frame
-sameFrameText=Same frame
-embeddedText=Embedded
-unableToShowProps=No properties available.
-altTextMissing=Missing
-altTextBlank=Blank
-imageSize=%S KB (%S bytes)
-imageSizeUnknown=Unknown (not cached)
-imageType=%S image
-animatedImageType=%S image (animated, %S frames)
-imageDimensions=%Spx \u00D7 %Spx
-imageDimensionsScaled=%Spx \u00D7 %Spx (scaled to %Spx \u00D7 %Spx)
-# LOCALIZATION NOTE: Next two strings are for language name representations
-#                    %1$S = language name, %2$S = region name
-languageRegionFormat=%1$S (%2$S)
--- a/browser/locales/jar.mn
+++ b/browser/locales/jar.mn
@@ -8,18 +8,16 @@
     locale/browser/aboutRights.dtd                 (%chrome/browser/aboutRights.dtd)
     locale/browser/aboutRights.properties          (%chrome/browser/aboutRights.properties)
     locale/browser/aboutRobots.dtd                 (%chrome/browser/aboutRobots.dtd)
     locale/browser/aboutSessionRestore.dtd         (%chrome/browser/aboutSessionRestore.dtd)
     locale/browser/credits.dtd                     (%chrome/browser/credits.dtd)
 *   locale/browser/browser.dtd                     (%chrome/browser/browser.dtd)
     locale/browser/baseMenuOverlay.dtd             (%chrome/browser/baseMenuOverlay.dtd)
     locale/browser/browser.properties              (%chrome/browser/browser.properties)
-    locale/browser/metaData.dtd                    (%chrome/browser/metaData.dtd)
-    locale/browser/metaData.properties             (%chrome/browser/metaData.properties)
     locale/browser/openLocation.dtd                (%chrome/browser/openLocation.dtd)
     locale/browser/openLocation.properties         (%chrome/browser/openLocation.properties)
 *   locale/browser/pageInfo.dtd                    (%chrome/browser/pageInfo.dtd)
     locale/browser/pageInfo.properties             (%chrome/browser/pageInfo.properties)
     locale/browser/pageReportFirstTime.dtd         (%chrome/browser/pageReportFirstTime.dtd)
     locale/browser/quitDialog.properties           (%chrome/browser/quitDialog.properties)
 *   locale/browser/safeMode.dtd                    (%chrome/browser/safeMode.dtd)
     locale/browser/sanitize.dtd                    (%chrome/browser/sanitize.dtd)
--- a/browser/themes/gnomestripe/browser/browser.css
+++ b/browser/themes/gnomestripe/browser/browser.css
@@ -441,18 +441,17 @@ menuitem:not([type]) {
 }
 
 #menu_pageInfo,
 #context-viewinfo,
 #context-viewframeinfo {
   list-style-image: url("moz-icon://stock/gtk-info?size=menu");
 }
 
-#placesContext_show\:info,
-#context-metadata {
+#placesContext_show\:info {
   list-style-image: url("moz-icon://stock/gtk-properties?size=menu");
 }
 
 #sanitizeItem {
   list-style-image: url("moz-icon://stock/gtk-clear?size=menu");
 }
 
 #menu_openHelp {