mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-04 21:18:35 +00:00
Bug 950308 - TextTrack, TextTrackCue, TextTrackList should BindToOwner. r=smaug
This commit is contained in:
parent
8f5afee871
commit
fd2961dce2
@ -130,7 +130,7 @@ HTMLTrackElement::IsWebVTTEnabled()
|
||||
}
|
||||
|
||||
TextTrack*
|
||||
HTMLTrackElement::Track()
|
||||
HTMLTrackElement::GetTrack()
|
||||
{
|
||||
if (!mTrack) {
|
||||
CreateTextTrack();
|
||||
@ -153,7 +153,14 @@ HTMLTrackElement::CreateTextTrack()
|
||||
kind = TextTrackKind::Subtitles;
|
||||
}
|
||||
|
||||
mTrack = new TextTrack(OwnerDoc()->GetParentObject(), kind, label, srcLang,
|
||||
bool hasHadScriptObject = true;
|
||||
nsIScriptGlobalObject* scriptObject =
|
||||
OwnerDoc()->GetScriptHandlingObject(hasHadScriptObject);
|
||||
|
||||
NS_ENSURE_TRUE_VOID(scriptObject || !hasHadScriptObject);
|
||||
|
||||
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(scriptObject);
|
||||
mTrack = new TextTrack(window, kind, label, srcLang,
|
||||
TextTrackMode::Disabled,
|
||||
TextTrackReadyState::NotLoaded,
|
||||
TextTrackSource::Track);
|
||||
|
@ -88,7 +88,7 @@ public:
|
||||
uint16_t ReadyState() const;
|
||||
void SetReadyState(uint16_t aReadyState);
|
||||
|
||||
TextTrack* Track();
|
||||
TextTrack* GetTrack();
|
||||
|
||||
virtual nsresult Clone(nsINodeInfo* aNodeInfo, nsINode** aResult) const MOZ_OVERRIDE;
|
||||
|
||||
|
@ -85,11 +85,17 @@ TextTrackManager::TextTrackManager(HTMLMediaElement *aMediaElement)
|
||||
, performedTrackSelection(false)
|
||||
{
|
||||
MOZ_COUNT_CTOR(TextTrackManager);
|
||||
mNewCues = new TextTrackCueList(mMediaElement->OwnerDoc()->GetParentObject());
|
||||
mTextTracks = new TextTrackList(mMediaElement->OwnerDoc()->GetParentObject(),
|
||||
this);
|
||||
mPendingTextTracks =
|
||||
new TextTrackList(mMediaElement->OwnerDoc()->GetParentObject(), this);
|
||||
|
||||
bool hasHadScriptObject = true;
|
||||
nsIScriptGlobalObject* scriptObject =
|
||||
mMediaElement->OwnerDoc()->GetScriptHandlingObject(hasHadScriptObject);
|
||||
|
||||
NS_ENSURE_TRUE_VOID(scriptObject || !hasHadScriptObject);
|
||||
|
||||
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(scriptObject);
|
||||
mNewCues = new TextTrackCueList(window);
|
||||
mTextTracks = new TextTrackList(window, this);
|
||||
mPendingTextTracks = new TextTrackList(window, this);
|
||||
|
||||
if (!sParserWrapper) {
|
||||
nsCOMPtr<nsIWebVTTParserWrapper> parserWrapper =
|
||||
@ -117,7 +123,7 @@ TextTrackManager::AddTextTrack(TextTrackKind aKind, const nsAString& aLabel,
|
||||
TextTrackReadyState aReadyState,
|
||||
TextTrackSource aTextTrackSource)
|
||||
{
|
||||
if (!mMediaElement) {
|
||||
if (!mMediaElement || !mTextTracks) {
|
||||
return nullptr;
|
||||
}
|
||||
nsRefPtr<TextTrack> ttrack =
|
||||
@ -135,7 +141,7 @@ TextTrackManager::AddTextTrack(TextTrackKind aKind, const nsAString& aLabel,
|
||||
void
|
||||
TextTrackManager::AddTextTrack(TextTrack* aTextTrack)
|
||||
{
|
||||
if (!mMediaElement) {
|
||||
if (!mMediaElement || !mTextTracks) {
|
||||
return;
|
||||
}
|
||||
mTextTracks->AddTextTrack(aTextTrack, CompareTextTracks(mMediaElement));
|
||||
@ -148,6 +154,10 @@ TextTrackManager::AddTextTrack(TextTrack* aTextTrack)
|
||||
void
|
||||
TextTrackManager::AddCues(TextTrack* aTextTrack)
|
||||
{
|
||||
if (!mNewCues) {
|
||||
return;
|
||||
}
|
||||
|
||||
TextTrackCueList* cueList = aTextTrack->GetCues();
|
||||
if (cueList) {
|
||||
bool dummy;
|
||||
@ -160,6 +170,10 @@ TextTrackManager::AddCues(TextTrack* aTextTrack)
|
||||
void
|
||||
TextTrackManager::RemoveTextTrack(TextTrack* aTextTrack, bool aPendingListOnly)
|
||||
{
|
||||
if (!mPendingTextTracks || !mTextTracks) {
|
||||
return;
|
||||
}
|
||||
|
||||
mPendingTextTracks->RemoveTextTrack(aTextTrack);
|
||||
if (aPendingListOnly) {
|
||||
return;
|
||||
@ -171,12 +185,18 @@ TextTrackManager::RemoveTextTrack(TextTrack* aTextTrack, bool aPendingListOnly)
|
||||
void
|
||||
TextTrackManager::DidSeek()
|
||||
{
|
||||
mTextTracks->DidSeek();
|
||||
if (mTextTracks) {
|
||||
mTextTracks->DidSeek();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TextTrackManager::UpdateCueDisplay()
|
||||
{
|
||||
if (!mMediaElement || !mTextTracks) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsIFrame* frame = mMediaElement->GetPrimaryFrame();
|
||||
nsVideoFrame* videoFrame = do_QueryFrame(frame);
|
||||
if (!videoFrame) {
|
||||
@ -212,12 +232,17 @@ TextTrackManager::UpdateCueDisplay()
|
||||
void
|
||||
TextTrackManager::AddCue(TextTrackCue& aCue)
|
||||
{
|
||||
mNewCues->AddCue(aCue);
|
||||
if (mNewCues) {
|
||||
mNewCues->AddCue(aCue);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TextTrackManager::PopulatePendingList()
|
||||
{
|
||||
if (!mTextTracks || !mPendingTextTracks || !mMediaElement) {
|
||||
return;
|
||||
}
|
||||
uint32_t len = mTextTracks->Length();
|
||||
bool dummy;
|
||||
for (uint32_t index = 0; index < len; ++index) {
|
||||
@ -233,7 +258,7 @@ TextTrackManager::PopulatePendingList()
|
||||
void
|
||||
TextTrackManager::HonorUserPreferencesForTrackSelection()
|
||||
{
|
||||
if (performedTrackSelection) {
|
||||
if (performedTrackSelection || !mTextTracks) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -316,6 +341,9 @@ void
|
||||
TextTrackManager::GetTextTracksOfKind(TextTrackKind aTextTrackKind,
|
||||
nsTArray<TextTrack*>& aTextTracks)
|
||||
{
|
||||
if (!mTextTracks) {
|
||||
return;
|
||||
}
|
||||
for (uint32_t i = 0; i < mTextTracks->Length(); i++) {
|
||||
TextTrack* textTrack = (*mTextTracks)[i];
|
||||
if (textTrack->Kind() == aTextTrackKind) {
|
||||
|
@ -16,9 +16,8 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_5(TextTrack,
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_4(TextTrack,
|
||||
DOMEventTargetHelper,
|
||||
mParent,
|
||||
mCueList,
|
||||
mActiveCueList,
|
||||
mTextTrackList,
|
||||
@ -29,14 +28,14 @@ NS_IMPL_RELEASE_INHERITED(TextTrack, DOMEventTargetHelper)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(TextTrack)
|
||||
NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
|
||||
|
||||
TextTrack::TextTrack(nsISupports* aParent,
|
||||
TextTrack::TextTrack(nsPIDOMWindow* aOwnerWindow,
|
||||
TextTrackKind aKind,
|
||||
const nsAString& aLabel,
|
||||
const nsAString& aLanguage,
|
||||
TextTrackMode aMode,
|
||||
TextTrackReadyState aReadyState,
|
||||
TextTrackSource aTextTrackSource)
|
||||
: mParent(aParent)
|
||||
: DOMEventTargetHelper(aOwnerWindow)
|
||||
, mKind(aKind)
|
||||
, mLabel(aLabel)
|
||||
, mLanguage(aLanguage)
|
||||
@ -45,10 +44,9 @@ TextTrack::TextTrack(nsISupports* aParent,
|
||||
, mTextTrackSource(aTextTrackSource)
|
||||
{
|
||||
SetDefaultSettings();
|
||||
SetIsDOMBinding();
|
||||
}
|
||||
|
||||
TextTrack::TextTrack(nsISupports* aParent,
|
||||
TextTrack::TextTrack(nsPIDOMWindow* aOwnerWindow,
|
||||
TextTrackList* aTextTrackList,
|
||||
TextTrackKind aKind,
|
||||
const nsAString& aLabel,
|
||||
@ -56,7 +54,7 @@ TextTrack::TextTrack(nsISupports* aParent,
|
||||
TextTrackMode aMode,
|
||||
TextTrackReadyState aReadyState,
|
||||
TextTrackSource aTextTrackSource)
|
||||
: mParent(aParent)
|
||||
: DOMEventTargetHelper(aOwnerWindow)
|
||||
, mTextTrackList(aTextTrackList)
|
||||
, mKind(aKind)
|
||||
, mLabel(aLabel)
|
||||
@ -66,14 +64,14 @@ TextTrack::TextTrack(nsISupports* aParent,
|
||||
, mTextTrackSource(aTextTrackSource)
|
||||
{
|
||||
SetDefaultSettings();
|
||||
SetIsDOMBinding();
|
||||
}
|
||||
|
||||
void
|
||||
TextTrack::SetDefaultSettings()
|
||||
{
|
||||
mCueList = new TextTrackCueList(mParent);
|
||||
mActiveCueList = new TextTrackCueList(mParent);
|
||||
nsPIDOMWindow* ownerWindow = GetOwner();
|
||||
mCueList = new TextTrackCueList(ownerWindow);
|
||||
mActiveCueList = new TextTrackCueList(ownerWindow);
|
||||
mCuePos = 0;
|
||||
mDirty = false;
|
||||
}
|
||||
|
@ -42,14 +42,14 @@ public:
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(TextTrack, DOMEventTargetHelper)
|
||||
|
||||
TextTrack(nsISupports* aParent,
|
||||
TextTrack(nsPIDOMWindow* aOwnerWindow,
|
||||
TextTrackKind aKind,
|
||||
const nsAString& aLabel,
|
||||
const nsAString& aLanguage,
|
||||
TextTrackMode aMode,
|
||||
TextTrackReadyState aReadyState,
|
||||
TextTrackSource aTextTrackSource);
|
||||
TextTrack(nsISupports* aParent,
|
||||
TextTrack(nsPIDOMWindow* aOwnerWindow,
|
||||
TextTrackList* aTextTrackList,
|
||||
TextTrackKind aKind,
|
||||
const nsAString& aLabel,
|
||||
@ -62,11 +62,6 @@ public:
|
||||
|
||||
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
|
||||
|
||||
nsISupports* GetParentObject() const
|
||||
{
|
||||
return mParent;
|
||||
}
|
||||
|
||||
TextTrackKind Kind() const
|
||||
{
|
||||
return mKind;
|
||||
@ -124,7 +119,6 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
nsCOMPtr<nsISupports> mParent;
|
||||
nsRefPtr<TextTrackList> mTextTrackList;
|
||||
|
||||
TextTrackKind mKind;
|
||||
|
@ -43,40 +43,40 @@ TextTrackCue::SetDefaultCueSettings()
|
||||
mVertical = DirectionSetting::_empty;
|
||||
}
|
||||
|
||||
TextTrackCue::TextTrackCue(nsISupports* aGlobal,
|
||||
TextTrackCue::TextTrackCue(nsPIDOMWindow* aOwnerWindow,
|
||||
double aStartTime,
|
||||
double aEndTime,
|
||||
const nsAString& aText,
|
||||
ErrorResult& aRv)
|
||||
: mText(aText)
|
||||
: DOMEventTargetHelper(aOwnerWindow)
|
||||
, mText(aText)
|
||||
, mStartTime(aStartTime)
|
||||
, mEndTime(aEndTime)
|
||||
, mReset(false)
|
||||
{
|
||||
SetDefaultCueSettings();
|
||||
MOZ_ASSERT(aGlobal);
|
||||
SetIsDOMBinding();
|
||||
if (NS_FAILED(StashDocument(aGlobal))) {
|
||||
MOZ_ASSERT(aOwnerWindow);
|
||||
if (NS_FAILED(StashDocument())) {
|
||||
aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
|
||||
}
|
||||
}
|
||||
|
||||
TextTrackCue::TextTrackCue(nsISupports* aGlobal,
|
||||
TextTrackCue::TextTrackCue(nsPIDOMWindow* aOwnerWindow,
|
||||
double aStartTime,
|
||||
double aEndTime,
|
||||
const nsAString& aText,
|
||||
HTMLTrackElement* aTrackElement,
|
||||
ErrorResult& aRv)
|
||||
: mText(aText)
|
||||
: DOMEventTargetHelper(aOwnerWindow)
|
||||
, mText(aText)
|
||||
, mStartTime(aStartTime)
|
||||
, mEndTime(aEndTime)
|
||||
, mTrackElement(aTrackElement)
|
||||
, mReset(false)
|
||||
{
|
||||
SetDefaultCueSettings();
|
||||
MOZ_ASSERT(aGlobal);
|
||||
SetIsDOMBinding();
|
||||
if (NS_FAILED(StashDocument(aGlobal))) {
|
||||
MOZ_ASSERT(aOwnerWindow);
|
||||
if (NS_FAILED(StashDocument())) {
|
||||
aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
|
||||
}
|
||||
}
|
||||
@ -85,9 +85,9 @@ TextTrackCue::TextTrackCue(nsISupports* aGlobal,
|
||||
* keep getting it from our window.
|
||||
*/
|
||||
nsresult
|
||||
TextTrackCue::StashDocument(nsISupports* aGlobal)
|
||||
TextTrackCue::StashDocument()
|
||||
{
|
||||
nsCOMPtr<nsPIDOMWindow> window(do_QueryInterface(aGlobal));
|
||||
nsPIDOMWindow* window = GetOwner();
|
||||
if (!window) {
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
@ -39,24 +39,20 @@ public:
|
||||
const nsAString& aText,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
nsRefPtr<TextTrackCue> ttcue = new TextTrackCue(aGlobal.GetAsSupports(), aStartTime,
|
||||
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aGlobal.GetAsSupports());
|
||||
nsRefPtr<TextTrackCue> ttcue = new TextTrackCue(window, aStartTime,
|
||||
aEndTime, aText, aRv);
|
||||
return ttcue.forget();
|
||||
}
|
||||
TextTrackCue(nsISupports* aGlobal, double aStartTime, double aEndTime,
|
||||
TextTrackCue(nsPIDOMWindow* aGlobal, double aStartTime, double aEndTime,
|
||||
const nsAString& aText, ErrorResult& aRv);
|
||||
|
||||
TextTrackCue(nsISupports* aGlobal, double aStartTime, double aEndTime,
|
||||
TextTrackCue(nsPIDOMWindow* aGlobal, double aStartTime, double aEndTime,
|
||||
const nsAString& aText, HTMLTrackElement* aTrackElement,
|
||||
ErrorResult& aRv);
|
||||
|
||||
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
|
||||
|
||||
nsINode* GetParentObject()
|
||||
{
|
||||
return mDocument;
|
||||
}
|
||||
|
||||
TextTrack* GetTrack() const
|
||||
{
|
||||
return mTrack;
|
||||
@ -334,7 +330,7 @@ public:
|
||||
|
||||
private:
|
||||
void SetDefaultCueSettings();
|
||||
nsresult StashDocument(nsISupports* aGlobal);
|
||||
nsresult StashDocument();
|
||||
|
||||
nsRefPtr<nsIDocument> mDocument;
|
||||
nsString mText;
|
||||
|
@ -13,9 +13,8 @@
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_3(TextTrackList,
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_2(TextTrackList,
|
||||
DOMEventTargetHelper,
|
||||
mGlobal,
|
||||
mTextTracks,
|
||||
mTextTrackManager)
|
||||
|
||||
@ -24,16 +23,16 @@ NS_IMPL_RELEASE_INHERITED(TextTrackList, DOMEventTargetHelper)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(TextTrackList)
|
||||
NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
|
||||
|
||||
TextTrackList::TextTrackList(nsISupports* aGlobal) : mGlobal(aGlobal)
|
||||
TextTrackList::TextTrackList(nsPIDOMWindow* aOwnerWindow)
|
||||
: DOMEventTargetHelper(aOwnerWindow)
|
||||
{
|
||||
SetIsDOMBinding();
|
||||
}
|
||||
|
||||
TextTrackList::TextTrackList(nsISupports* aGlobal, TextTrackManager* aTextTrackManager)
|
||||
: mGlobal(aGlobal)
|
||||
TextTrackList::TextTrackList(nsPIDOMWindow* aOwnerWindow,
|
||||
TextTrackManager* aTextTrackManager)
|
||||
: DOMEventTargetHelper(aOwnerWindow)
|
||||
, mTextTrackManager(aTextTrackManager)
|
||||
{
|
||||
SetIsDOMBinding();
|
||||
}
|
||||
|
||||
void
|
||||
@ -84,7 +83,7 @@ TextTrackList::AddTextTrack(TextTrackKind aKind,
|
||||
TextTrackSource aTextTrackSource,
|
||||
const CompareTextTracks& aCompareTT)
|
||||
{
|
||||
nsRefPtr<TextTrack> track = new TextTrack(mGlobal, this, aKind, aLabel,
|
||||
nsRefPtr<TextTrack> track = new TextTrack(GetOwner(), this, aKind, aLabel,
|
||||
aLanguage, aMode, aReadyState,
|
||||
aTextTrackSource);
|
||||
AddTextTrack(track, aCompareTT);
|
||||
|
@ -26,16 +26,11 @@ public:
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(TextTrackList, DOMEventTargetHelper)
|
||||
|
||||
TextTrackList(nsISupports* aGlobal);
|
||||
TextTrackList(nsISupports* aGlobal, TextTrackManager* aTextTrackManager);
|
||||
TextTrackList(nsPIDOMWindow* aOwnerWindow);
|
||||
TextTrackList(nsPIDOMWindow* aOwnerWindow, TextTrackManager* aTextTrackManager);
|
||||
|
||||
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
|
||||
|
||||
nsISupports* GetParentObject() const
|
||||
{
|
||||
return mGlobal;
|
||||
}
|
||||
|
||||
uint32_t Length() const
|
||||
{
|
||||
return mTextTracks.Length();
|
||||
@ -72,7 +67,6 @@ public:
|
||||
IMPL_EVENT_HANDLER(removetrack)
|
||||
|
||||
private:
|
||||
nsCOMPtr<nsISupports> mGlobal;
|
||||
nsTArray< nsRefPtr<TextTrack> > mTextTracks;
|
||||
nsRefPtr<TextTrackManager> mTextTrackManager;
|
||||
|
||||
|
@ -26,5 +26,5 @@ interface HTMLTrackElement : HTMLElement {
|
||||
const unsigned short ERROR = 3;
|
||||
readonly attribute unsigned short readyState;
|
||||
|
||||
readonly attribute TextTrack track;
|
||||
readonly attribute TextTrack? track;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user