Добрый день.
Возник вопрос. Как можно отменить стандартную загрузку браузера.
Есть код который перехватывает http ответ

Выделить код

Код:

var httpResponseObserver =  
{  
  observe: function(subject, topic, data)   
  {  
          var httpChannel = subject.QueryInterface(Components.interfaces.nsIHttpChannel);
          if(httpChannel.originalURI.host == "tfile.ru"){
              alert(httpChannel.referrer);
              //alert(window.document.documentURI);
              alert(httpChannel.getResponseHeader("Content-Type"));
          }
            //alert(httpChannel.getResponseHeader("Content-Type"));
  }  
}; 
var observerService = Components.classes["@mozilla.org/observer-service;1"]
                                .getService(Components.interfaces.nsIObserverService);
observerService.addObserver(httpResponseObserver, "http-on-examine-response", false );

Хочу, чтоб при определенном «Content-Type» делались действия в моем экстеншене. А стандартные браузерные отменялись.
К примеру, когда тип Content-Type = application/binary чтоб вызывался мой загрузчик файлов а не стандартный браузера. С вызовом моих действий нет проблем, но вот как отменить действия браузера не нашел.
Конечно, можно перехватывать каждый запрос и делать предварительный запрос через xmlhttprequest смотреть Content-Type и принимать решение продолжать запрос или нет. Но думаю, пользователи экстеншена не буду рады тормазам в браузере.

1. downloadManager.
2. nsIDownload.
3. nsICancelable.

Проверяй URI регеспом на расширение. их не так много будет для файлов загрузки. если совпадает с exe или msi и тп, то делай
subject.cancel(Components.results.NS_BINDING_ABORTED);