rem: return Components.lookupMethod(obj, propname).call(obj); 
add: return obj[propname]; 
context: function livemarkOnLinkAdded(event){  if (!gLivemarksButton)    gLivemarksButton = document.getElementById("livemark-button");  // from tabbrowser.xml  // mechanism for reading properties of the underlying XPCOM object  // (ignoring potential getters/setters added by malicious content)  var safeGetProperty = function(obj, propname) {    return Components.lookupMethod(obj, propname).call(obj);  }  var erel = event.target.rel;  var etype = event.target.type;  var etitle = event.target.title;  // this is a blogger post service URL; so skip it  if (erel && erel == "service.post")    return;  if (etype == "application/rss+xml" ||      etype == "application/atom+xml" ||      etype == "application/x.atom+xml" ||      etitle.indexOf("RSS") != -1 ||      etitle.indexOf("Atom") != -1 ||      etitle.indexOf("rss") != -1)  {    const targetDoc = safeGetProperty(event.target, "ownerDocument");    // find which tab this is for, and set the attribute on the browser    // should there be a getTabForDocument method on tabbedbrowser?    var browserForLink = null;    if (gBrowser.mTabbedMode) {      var browserIndex = gBrowser.getBrowserIndexForDocument(targetDoc);      if (browserIndex == -1)        return;      browserForLink = gBrowser.getBrowserAtIndex(browserIndex);    } else if (gBrowser.mCurrentBrowser.contentDocument == targetDoc) {      browserForLink = gBrowser.mCurrentBrowser;    }    if (!browserForLink) {      // ??? this really shouldn't happen..      return;    }    var livemarkLinks = [];    if (browserForLink.livemarkLinks != null) {      livemarkLinks = browserForLink.livemarkLinks;    }    var wrapper = new XPCNativeWrapper(event.target, "href", "type", "title");    livemarkLinks.push({ href: wrapper.href,                         type: wrapper.type,                        title: wrapper.title});    browserForLink.livemarkLinks = livemarkLinks;    if (browserForLink == gBrowser || browserForLink == gBrowser.mCurrentBrowser)      gLivemarksButton.setAttribute("livemarks", "true");  }}
meta: 8395	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/8395/6941a16b76cb3356e621385f5d54a57dc50b49b5/browser.js/clean/browser/base/content/browser.js