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