2011-10-14 34 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