Fennec/NativeUI/Messages

Gecko -> Java

function SendMessageToJava(obj) {
    Cc["@mozilla.org/android/bridge;1"]
        .getService(Ci.nsIAndroidBridge)
        .handleGeckoMessage(JSON.stringify(obj));
}


The message ends up in embedding/android/GeckoAppShell.java handleGeckoMessage(). Right now, it is just a big switch that dispatches to the right handler.

Java -> Gecko

From java we can post message that can be recieved by the nsIObserver. Subject and Data can be anything here:

// JAVA:
GeckoEvent e = new GeckoEvent("subject", "data");
GeckoAppShell.sendEventToGecko(e);

any registered nsIObserver can see this:

// Javascript

let SomeEventListener = {

  init: function() {
    Services.obs.addObserver(this, "subject", false);
  },

  observe: function(aSubject, aTopic, aData) {

      if (aTopic == "subject") {
         // data could be anything, think json.    
      }
  },
};