Приветсвую!

Пишу плугин на XPCom (С++), задача следующая:
Есть html-страничка примерно такая:

<form action="http://site.ru/" method="post">
    <input type="text" name="value" value=""/>
    <input type="submit" value="Submit" />
</form>

Нужно отловить момент когда происходит заполнение post-запроса и попытка его отправки на сервер.
Мне нужно прочитать передаваемые значения и в зависимости от их содержимого либо разрешить отправку, либо остановить редирект не обновляя страницу.

Посоветуйте в каком интерфейсе это можно сделать?
Смотрел исходники firefox и нашел что что-то похоже происходит в nsHttpChannel.cpp в функции

Выделить код

Код:

sHttpChannel::ProcessRedirection(PRUint32 redirectType){
.............................
// здесь какая-то подготовка к загрузке новой страницы
.............................
 // call out to the event sink to notify it of this redirection.
    if (mHttpEventSink) {
        rv = mHttpEventSink->OnRedirect(this, newChannel);
        if (NS_FAILED(rv)) return rv;
    }
....................................
// если дошли до сюда, то грузим редирект-страницу
....................................
}

Вопрос в следующем: можно ли сделать то что мне нужно подписавшись на nsIHttpEventSink:onRedirect (см. nsIHttpEventSink.idl)? Может быть есть способы попроще?
И если все нужно делать через интерфейс nsIHttpEventSink, то как на него подписаться, через RegisterFactory или как-то по другому?

Можно подписать observer на http-on-examine-response и у него в subject будет объект с интерфейсом nsIHttpChannel.

Что касается nsIHttpEventSink - вот здесь: http://www.xulplanet.com/references/xpcomref/ifaces/nsIHttpEventSink.html написано, что надо реализовывать объект с этим интерфейсом. А потом он назначается в channel.notificationsCallback или аргументом в asyncOpen (в js).

Спасибо за комментарий, решил делать по другому, на форме создал кнопку и прописал в событии onClick вызов своей функции, которую разместил в js.
Более подробно в этой теме: http://forum.mozilla-russia.org/viewtopic.php?id=24677