Issue #2452 - Don't use WebVTTListener, JS wrapper, MediaShutdownManager in stable state

https://bugzilla.mozilla.org/show_bug.cgi?id=1443429
https://bugzilla.mozilla.org/show_bug.cgi?id=1515021
This commit is contained in:
Martok 2024-01-14 22:41:18 +01:00 • committed by roytam1
commit fbd829908e
7 changed files with 77 additions and 38 deletions

View file

@ -457,8 +457,6 @@ MediaDecoder::MediaDecoder(MediaDecoderOwner* aOwner)
mWatchManager.Watch(mLogicallySeeking, &MediaDecoder::SeekingChanged);
mWatchManager.Watch(mIsAudioDataAudible, &MediaDecoder::NotifyAudibleStateChanged);
MediaShutdownManager::InitStatics();
}
#undef INIT_MIRROR

View file

@ -4,6 +4,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "WebVTTListener.h"
#include "mozilla/CycleCollectedJSContext.h"
#include "mozilla/dom/TextTrackCue.h"
#include "mozilla/dom/TextTrackRegion.h"
#include "mozilla/dom/VTTRegionBinding.h"
@ -34,9 +35,22 @@ LazyLogModule gTextTrackLog("TextTrack");
WebVTTListener::WebVTTListener(HTMLTrackElement* aElement)
: mElement(aElement)
, mParserWrapperError(NS_OK)
{
MOZ_ASSERT(mElement, "Must pass an element to the callback");
VTT_LOG("WebVTTListener created.");
MOZ_DIAGNOSTIC_ASSERT(
CycleCollectedJSContext::Get() &&
!CycleCollectedJSContext::Get()->IsInStableOrMetaStableState());
mParserWrapper = do_CreateInstance(NS_WEBVTTPARSERWRAPPER_CONTRACTID,
&mParserWrapperError);
if (NS_SUCCEEDED(mParserWrapperError)) {
nsPIDOMWindowInner* window = mElement->OwnerDoc()->GetInnerWindow();
mParserWrapperError = mParserWrapper->LoadParser(window);
}
if (NS_SUCCEEDED(mParserWrapperError)) {
mParserWrapperError = mParserWrapper->Watch(this);
}
}
WebVTTListener::~WebVTTListener()
@ -54,16 +68,8 @@ WebVTTListener::GetInterface(const nsIID &aIID,
nsresult
WebVTTListener::LoadResource()
{
nsresult rv;
mParserWrapper = do_CreateInstance(NS_WEBVTTPARSERWRAPPER_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsPIDOMWindowInner* window = mElement->OwnerDoc()->GetInnerWindow();
rv = mParserWrapper->LoadParser(window);
NS_ENSURE_SUCCESS(rv, rv);
rv = mParserWrapper->Watch(this);
NS_ENSURE_SUCCESS(rv, rv);
// Exit if we failed to create the WebVTTParserWrapper (vtt.jsm)
NS_ENSURE_SUCCESS(mParserWrapperError, mParserWrapperError);
mElement->SetReadyState(TextTrackReadyState::Loading);
return NS_OK;

View file

@ -57,6 +57,7 @@ private:
RefPtr<HTMLTrackElement> mElement;
nsCOMPtr<nsIWebVTTParserWrapper> mParserWrapper;
nsresult mParserWrapperError;
};
} // namespace dom