0

現在、C++ でカスタム パスワード マネージャーを開発しようとしています。

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 は、次を使用して、Firefox の Java スクリプトによってインスタンス化できます。

    Components.classes["@mozilla.org/loginmanager/loginInfo;1"].createInstance(Components.interfaces.nsILoginInfo);

Ubuntu x64 で firefox 20.0 と xul-runner-sdk 20.0 (20.0.1 と同じ結果) を使用し、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;
    }
4

1 に答える 1