view chrome/content/crashreports/crashreports.js @ 2:472a16863ecc

expanded nightly.jar
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Tue, 02 Dec 2008 20:38:20 +0900
parents
children
line wrap: on
line source

Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");

var crashreports = {

init: function(event)
{
  window.removeEventListener("load", crashreports.init, false);
  if (Components.interfaces.nsICrashReporter)
  {
    var service = Components.classes["@blueprintit.co.uk/breakpad;1"]
                            .getService(Components.interfaces.nttIBreakpadService);
    
    if (nightly.preferences.getBoolPref("crashreports.recentlist.display"))
    {
      service.loadDatabase();
      service.addProgressListener(crashreports);
    }
    else
    {
      document.getElementById("nightly-crashreports-incidents").parentNode.hidden=true;
    }
  }
  else
  {
    document.getElementById("nightly-crashreports-separator").hidden = true;
    document.getElementById("nightly-crashreports-recent").hidden = true;
    document.getElementById("nightly-crashreports-sidebar").hidden = true;
  }
},

copy: function(event)
{
  var node = document.popupNode;
  if (node.id.substring(0,12)=="breakpad-id-")
  {
    var id = node.id.substring(12);
    var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]
                              .getService(Components.interfaces.nsIClipboardHelper);
    clipboard.copyString(id);
    closeMenus(node);
  }
},

onDatabaseLoaded: function()
{
  var service = Components.classes["@blueprintit.co.uk/breakpad;1"]
                          .getService(Components.interfaces.nttIBreakpadService);
  
  var incidents = null;
  
  incidents = service.getPreviousIncidents(10);
  
  var parent = document.getElementById("nightly-crashreports-incidents");
  if ((incidents) && (incidents.length > 0))
  {
    while (parent.firstChild)
      parent.removeChild(parent.firstChild);
    
    var en = incidents.enumerate();
    while (en.hasMoreElements())
    {
      var incident = en.getNext().QueryInterface(Components.interfaces.nttIBreakpadIncident);
      
      var item = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "menuitem");
      item.setAttribute("id", "breakpad-id-"+incident.id);
      item.setAttribute("tooltip", "nightly-crashreport-tooltip");
      item.setAttribute("context", "nightly-crashreport-context");
      item.setAttribute("label", incident.id+" ("+(new Date(incident.date)).toLocaleDateString()+")");
      parent.appendChild(item);
    }
  }
  else
  {
    parent.parentNode.disabled=true;
  }
},

popupTooltip: function(event)
{
  var node = document.tooltipNode;
  if (node.id.substring(0,12)=="breakpad-id-")
  {
    var id = node.id.substring(12);
    var service = Components.classes["@blueprintit.co.uk/breakpad;1"]
                            .getService(Components.interfaces.nttIBreakpadService);
    var incident = service.getIncident(id);
    var label = document.getElementById("nightly-crashreport-tooltip").firstChild;
    label.value=(new Date(incident.date)).toLocaleString();
    return true;
  }
  return false;
},

viewIncident: function(event)
{
  if (event.target.id.substring(0,12)=="breakpad-id-")
  {
    var url = nightly.preferences.getCharPref("breakpad.searchurl");
    var id = event.target.id.substring(15);
    nightlyApp.openURL(url+id, event);
  }
},

QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nttIBreakpadProgressListener])
}

window.addEventListener("load", crashreports.init, false);