alteração pushState - equivalente à extensão do Chrome onHistoryStateUpdated

Estou portando uma extensão do Chrome para uma extensão do Firefox e, devido à natureza do site em que ele é executado, preciso monitorar opushState.

As extensões do Chrome têm uma maneira prática de lidar com isso:chrome.webNavigation.onHistoryStateUpdated. A maneira como eu a uso na extensão do Chrome é a seguinte:

chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
  var tabUrl = details.url;
  if (isTabUrlValid(tabUrl)) {
    $.get(tabUrl, function(data) {
    var videoUrl = $(data).find('meta[itemprop=contentURL]').prop('content');
    videoUrl = validateUrl(videoUrl);
    videoUrl5k = make5kUrl(videoUrl);
  });
 }
});

Preciso fazer o mesmo para a extensão Firefox, mas não encontrei boas respostas. Eu tentei fazer a resposta mencionada aqui:Como ser notificado sobre alterações no histórico via history.pushState?

(function(history) {
  var pushState = history.pushState;
  history.pushState = function(state) {
    if (typeof history.onpushstate == "function") {
        history.onpushstate({state: state});
    }
    var tabUrl = tabs.activeTab.url;
    console.log("UPDATED TAB URL: " + tabUrl);
    if (isTabUrlValid(tabUrl)) {
      $.get(tabUrl, function(data) {
        var videoUrl = $(data).find('meta[itemprop=contentURL]').prop('content');
        videoUrl = validateUrl(videoUrl);
        videoUrl5k = make5kUrl(videoUrl);
      });
    }
    return pushState.apply(history, arguments);
  };
})(window.history);

O problema é que quando eu façocfx run reclama quehistory/window is undefined e, portanto, nunca é detectado. Acho que isso se deve ao fato de estar dentro do SDK, mas não conheço uma boa solução alternativa.

Alguma ideia?

Edit: Eu olhei para a resposta de @ willma abaixo e acho que isso não funcionaria para mim. O problema é que o URL é atualizado viapushState e o DOM não é ... Existe alguma maneira de replicar o que faço na extensão do chrome?

Edit: Aqui está opageMod parte

pageMod.PageMod({
  attachTo: 'top', // Don't attach to iFrames --> http://goo.gl/b6b1Iv
  include: [URLs],
  contentScriptFile: [data.url("jquery-2.1.1.min.js"),
                      data.url("csScript.js")],
  onAttach: function(worker) {
    worker.port.on('url', function(url) {
      var videoUrl = validateUrl(url);
      videoUrl5k = make5kUrl(videoUrl);
      console.log("--5K URL--: " + videoUrl5k);
    });
  }
});

questionAnswers(1)

yourAnswerToTheQuestion