Как мы можем определить уникальный nsHTTPChannel? - PullRequest
1 голос
/ 14 октября 2011

Я занимаюсь разработкой Firefox с использованием JavaScript и C ++ для некоторых компонентов XPCOM.
Я пытаюсь отслеживать активность http с помощью nsIHttpActivityDistributor.

Проблема сейчас в том, есть ли flag или id, принадлежащие nsIHttpChannel, которые я могу использовать для идентификации уникального nsHttpChannel объекта?

Я хочу сохранить некоторые nsIHttpChannel упомянутые объекты в C ++, а затем обработать их позже в Javascript или C ++. Дело в том, что в настоящее время я не могу найти elegent способ идентификации объекта канала, который может использоваться как в js, так и в C ++, который используется для четкой регистрации его в файле журнала.

Есть идеи?

1 Ответ

2 голосов
/ 14 октября 2011

Вы можете легко добавлять свои собственные данные в HTTP-каналы, они всегда реализуют интерфейсы nsIPropertyBag2 и nsIWritablePropertyBag2. Что-то вроде этого (непроверенный код, просто для иллюстрации принципа):

static PRInt64 maxChannelID = -1;

...

nsCOMPtr<nsIWritablePropertyBag2> bag = do_QueryInterface(channel);
if (!bag)
  ...

nsAutoString prop(NS_LITERAL_STRING("myChannelID"));
PRInt64 channelID;

rv = bag->GetPropertyAsInt64(prop, &channelID);
if (NS_FAILED(rv))
{
  // First time that we see that channel, assign it an ID
  channelID = ++maxChannelID;
  rv = bag->SetPropertyAsInt64(prop, channelID)
  if (NS_FAILED(rv))
    ...
}

printf("Channel ID: %i\n", channelID);

Однако вы можете проверить, что происходит при перенаправлении HTTP. Я думаю, что в этом случае свойства канала копируются на новый канал, но я не уверен, что это желательно для вас.

...