我目前正在嘗試在C++中開發自定義密碼管理器。獲取接口實現內置的Mozilla Firefox組件
我已經開發了實現nsILoginManagerStorage接口可部署模塊,可以在Firefox中安裝它,它是由Firefox的正常調用時的密碼字段出現。
問題是,當我嘗試實例化要返回的nsILoginInfo對象時,do_CreateInstance函數總是返回null。 我的方法實現:
NS_IMETHODIMP FirefoxComponent::FindLogins(uint32_t *count, const nsAString & aHostname, const nsAString & aActionURL, const nsAString & aHttpRealm, nsILoginInfo * **logins)
{
nsILoginInfo ** array = static_cast<nsILoginInfo**>(nsMemory::Alloc(sizeof(nsILoginInfo*)));
nsresult result;
nsCOMPtr<nsILoginInfo> loginInfo = do_CreateInstance("@mozilla.org/login-manager/loginInfo;1" , &result);
//nsCOMPtr<nsILoginManager> loginInfo = do_CreateInstance("@mozilla.org/login-manager;1" , &result);
if (NS_FAILED(result)){
printf("shouldn't be here!!\n");
return result;
}
}
我試圖得到一個nsILoginManager實例(只是爲了檢查它是否工作),但它有同樣的結果。該nsILoginInfo可以通過Java腳本的Firefox使用被instantited:
Components.classes["@mozilla.org/loginmanager/loginInfo;1"].createInstance(Components.interfaces.nsILoginInfo);
我使用火狐20.0和XUL的亞軍SDK 20.0(與20.0.1相同的結果),在Ubuntu 64位,並與QtCreator建築(對於x64)。
我的代碼已經從https://github.com/infinity0/mozilla-gnome-keyring
啓發既然我現在nsILoginInfo被正確加載到Firefox中,有任何要求的字段/信息的Firefox,讓我來訪問這些接口?
感謝您的支持。
編輯: 試圖通過直接訪問組件管理器加載模塊,但我無法加載組件管理器。
nsIComponentManager * manager;
result = NS_GetComponentManager(&manager);
if (NS_FAILED(result)){
printf("failed getting component manager!!\n");
return result;
}