我们如何识别唯一的nsHTTPChannel?

时间:2011-10-14 05:35:16

标签: javascript c++ firefox mozilla xpcom

我正在使用javascript和C ++为一些XPCOM组件对firefox进行一些开发 我正在尝试使用nsIHttpActivityDistributor监控http活动。

现在的问题是,是否有flagid属于nsIHttpChannel我可以用来识别唯一的nsHttpChannel对象?

我想在C ++中保存一些nsIHttpChannel引用的对象,然后在Javascript或C ++中处理。问题是,目前我找不到 elegent 方法来识别可以在js和C ++中使用的通道对象,用于将其清楚地记录到日志文件中。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以轻松地将自己的数据添加到HTTP通道,它们始终实现nsIPropertyBag2nsIWritablePropertyBag2接口。沿着这些方向的东西(未经测试的代码,仅用于说明原理):

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重定向上会发生什么。在这种情况下,我认为通道属性会被复制到新通道,不确定这是否适合您。