Using XPCOM without chrome

Unstable

Using sdk XPCOM

With the low-level module sdk/platform/xpcom , it's possible to exclude chrome and XPCOMUtils in some cases.
Below is an example for the XPCOM bookmark observer.

Examples

Bookmarks Observer

Normally, a bookmark observer would require Chrome Components and XPCOMUtils as described in the following links:

However, with the sdk module , we can remove this need.
Below is an example, where we extend the xpcom module's Unknown class with an nsINavBookmarkObserverinterface and one of its optional interface methods (onItemchanged). We can then create an object from it and add it as an observer to the bookmarks service.

// This removes the need to import Ci and the XPCOMUtils
const { Class }       = require("sdk/core/heritage");
const { Unknown }     = require('sdk/platform/xpcom');
const { PlacesUtils } = require("resource://gre/modules/PlacesUtils.jsm");

let bmListener = Class({
 extends: Unknown,
 interfaces: [ "nsINavBookmarkObserver" ],
 //This event most often handles all events
 onItemChanged: function(bId, prop, an, nV, lM, type, parentId, aGUID, aParentGUID) {
  console.log("onItemChanged", "bId: "+bId, "property: "+prop, "isAnno: "+an, "new value: "+nV, "lastMod: "+lM, "type: "+type, "parentId:"+parentId, "aGUID:"+aGUID);0

  // Code to handle the event here

 }
});

//We just have a class, but need an object. Notice the small l
var bmlistener = bmListener();
PlacesUtils.bookmarks.addObserver(bmlistener, false);