2011-10-14 33 views
1

我正在做一些开发的Firefox和JavaScript和C + +的一些XPCOM组件。
我想用nsIHttpActivityDistributor来监视http活动。我们如何识别一个独特的nsHTTPChannel?

现在的问题是,是否有任何flag或属于nsIHttpChannel,我可以用它来识别唯一nsHttpChannel对象id

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

有什么想法?

回答

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

+0

很酷的工作!我知道nsIWritableBag由nsIHTTPChannel继承,但我从来没有尝试过使用它!非常感谢你! – winterTTr