void GMPRemoveTest::Setup() { // Initialize media preferences. MediaPrefs::GetSingleton(); GeneratePlugin(); GetService()->GetThread(getter_AddRefs(mGMPThread)); // Spin the event loop until the GMP service has had a chance to complete // adding GMPs from MOZ_GMP_PATH. Otherwise, the RemovePluginDirectory() // below may complete before we're finished adding GMPs from MOZ_GMP_PATH, // and we'll end up not removing the GMP, and the test will fail. RefPtr<AbstractThread> thread(GetServiceParent()->GetAbstractGMPThread()); EXPECT_TRUE(thread); GMPTestMonitor* mon = &mTestMonitor; GetServiceParent()->EnsureInitialized()->Then(thread, __func__, [mon]() { mon->SetFinished(); }, [mon]() { mon->SetFinished(); } ); mTestMonitor.AwaitFinished(); nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService(); obs->AddObserver(this, GMP_DELETED_TOPIC, false /* strong ref */); EXPECT_OK(GetServiceParent()->RemovePluginDirectory(mOriginalPath)); GetServiceParent()->AsyncAddPluginDirectory(mTmpPath)->Then(thread, __func__, [mon]() { mon->SetFinished(); }, [mon]() { mon->SetFinished(); } ); mTestMonitor.AwaitFinished(); }
// GMPVideoDecoderCallbackProxy void GMPRemoveTest::Decoded(GMPVideoi420Frame* aDecodedFrame) { aDecodedFrame->Destroy(); mDecodeResult = GMPNoErr; mTestMonitor.SetFinished(); }
// nsIObserver NS_IMETHODIMP GMPRemoveTest::Observe(nsISupports* aSubject, const char* aTopic, const char16_t* aData) { EXPECT_TRUE(!strcmp(GMP_DELETED_TOPIC, aTopic)); nsString data(aData); if (mTmpPath.Equals(data)) { mTestMonitor.SetFinished(); nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService(); obs->RemoveObserver(this, GMP_DELETED_TOPIC); } return NS_OK; }
// GMPVideoDecoderCallbackProxy void GMPRemoveTest::Error(GMPErr aError) { mDecodeResult = aError; mTestMonitor.SetFinished(); }