我们如何识别唯一的nsHTTPChannel

How can we identify a unique nsHTTPChannel?

本文关键字:唯一 nsHTTPChannel 识别 何识别 我们      更新时间:2023-10-16

我正在用javascript和c++在firefox上开发一些XPCOM组件。
我正试图监控与nsIHttpActivityDistributor的http活动。

现在的问题是,是否存在属于nsIHttpChannelflagid,我可以使用它们来识别唯一的nsHttpChannel对象?

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

任何想法?

您可以轻松地将自己的数据添加到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: %in", channelID);

你可能想检查HTTP重定向会发生什么。我认为频道属性被复制到新的频道,在这种情况下,不确定这是否适合你