void Done(GMPContentParent* aGMPParent) override { GMPVideoDecoderParent* gmpVDP = nullptr; GMPVideoHostImpl* videoHost = nullptr; if (aGMPParent && NS_SUCCEEDED(aGMPParent->GetGMPVideoDecoder(&gmpVDP))) { videoHost = &gmpVDP->Host(); } mCallback->Done(gmpVDP, videoHost); }
NS_IMETHODIMP GeckoMediaPluginService::GetDecryptingGMPVideoDecoder(GMPCrashHelper* aHelper, nsTArray<nsCString>* aTags, const nsACString& aNodeId, UniquePtr<GetGMPVideoDecoderCallback>&& aCallback, uint32_t aDecryptorId) { MOZ_ASSERT(NS_GetCurrentThread() == mGMPThread); NS_ENSURE_ARG(aTags && aTags->Length() > 0); NS_ENSURE_ARG(aCallback); if (mShuttingDownOnGMPThread) { return NS_ERROR_FAILURE; } GetGMPVideoDecoderCallback* rawCallback = aCallback.release(); RefPtr<AbstractThread> thread(GetAbstractGMPThread()); RefPtr<GMPCrashHelper> helper(aHelper); GetContentParent(aHelper, aNodeId, NS_LITERAL_CSTRING(GMP_API_VIDEO_DECODER), *aTags) ->Then(thread, __func__, [rawCallback, helper, aDecryptorId](RefPtr<GMPContentParent::CloseBlocker> wrapper) { RefPtr<GMPContentParent> parent = wrapper->mParent; UniquePtr<GetGMPVideoDecoderCallback> callback(rawCallback); GMPVideoDecoderParent* actor = nullptr; GMPVideoHostImpl* host = nullptr; if (parent && NS_SUCCEEDED(parent->GetGMPVideoDecoder(&actor, aDecryptorId))) { host = &(actor->Host()); actor->SetCrashHelper(helper); } callback->Done(actor, host); }, [rawCallback] { UniquePtr<GetGMPVideoDecoderCallback> callback(rawCallback); callback->Done(nullptr, nullptr); }); return NS_OK; }