diff options
Diffstat (limited to 'dom/html/HTMLTrackElement.h')
-rw-r--r-- | dom/html/HTMLTrackElement.h | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/dom/html/HTMLTrackElement.h b/dom/html/HTMLTrackElement.h new file mode 100644 index 000000000..566f1e0d3 --- /dev/null +++ b/dom/html/HTMLTrackElement.h @@ -0,0 +1,146 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_HTMLTrackElement_h +#define mozilla_dom_HTMLTrackElement_h + +#include "mozilla/Attributes.h" +#include "mozilla/dom/HTMLMediaElement.h" +#include "mozilla/dom/TextTrack.h" +#include "nsCycleCollectionParticipant.h" +#include "nsGenericHTMLElement.h" +#include "nsGkAtoms.h" +#include "nsIDOMHTMLElement.h" +#include "nsIDOMEventTarget.h" +#include "nsIHttpChannel.h" + +class nsIContent; +class nsIDocument; + +namespace mozilla { +namespace dom { + +class WebVTTListener; +class WindowDestroyObserver; + +class HTMLTrackElement final : public nsGenericHTMLElement +{ +public: + explicit HTMLTrackElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo); + + // nsISupports + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLTrackElement, + nsGenericHTMLElement) + + // HTMLTrackElement WebIDL + void GetKind(DOMString& aKind) const; + void SetKind(const nsAString& aKind, ErrorResult& aError) + { + SetHTMLAttr(nsGkAtoms::kind, aKind, aError); + } + + void GetSrc(DOMString& aSrc) const + { + GetHTMLURIAttr(nsGkAtoms::src, aSrc); + } + + void SetSrc(const nsAString& aSrc, ErrorResult& aError); + + void GetSrclang(DOMString& aSrclang) const + { + GetHTMLAttr(nsGkAtoms::srclang, aSrclang); + } + void GetSrclang(nsAString& aSrclang) const + { + GetHTMLAttr(nsGkAtoms::srclang, aSrclang); + } + void SetSrclang(const nsAString& aSrclang, ErrorResult& aError) + { + SetHTMLAttr(nsGkAtoms::srclang, aSrclang, aError); + } + + void GetLabel(DOMString& aLabel) const + { + GetHTMLAttr(nsGkAtoms::label, aLabel); + } + void GetLabel(nsAString& aLabel) const + { + GetHTMLAttr(nsGkAtoms::label, aLabel); + } + void SetLabel(const nsAString& aLabel, ErrorResult& aError) + { + SetHTMLAttr(nsGkAtoms::label, aLabel, aError); + } + + bool Default() const + { + return GetBoolAttr(nsGkAtoms::_default); + } + void SetDefault(bool aDefault, ErrorResult& aError) + { + SetHTMLBoolAttr(nsGkAtoms::_default, aDefault, aError); + } + + uint16_t ReadyState() const; + void SetReadyState(uint16_t aReadyState); + + TextTrack* GetTrack(); + + virtual nsresult Clone(mozilla::dom::NodeInfo* aNodeInfo, nsINode** aResult) const override; + + // Override ParseAttribute() to convert kind strings to enum values. + virtual bool ParseAttribute(int32_t aNamespaceID, + nsIAtom* aAttribute, + const nsAString& aValue, + nsAttrValue& aResult) override; + + // Override BindToTree() so that we can trigger a load when we become + // the child of a media element. + virtual nsresult BindToTree(nsIDocument* aDocument, + nsIContent* aParent, + nsIContent* aBindingParent, + bool aCompileEventHandlers) override; + virtual void UnbindFromTree(bool aDeep, bool aNullParent) override; + + void DispatchTrackRunnable(const nsString& aEventName); + void DispatchTrustedEvent(const nsAString& aName); + + void DropChannel(); + + void NotifyShutdown(); + +protected: + virtual ~HTMLTrackElement(); + + virtual JSObject* WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; + void OnChannelRedirect(nsIChannel* aChannel, nsIChannel* aNewChannel, + uint32_t aFlags); + // Open a new channel to the HTMLTrackElement's src attribute and call + // mListener's LoadResource(). + void LoadResource(); + + friend class TextTrackCue; + friend class WebVTTListener; + + RefPtr<TextTrack> mTrack; + nsCOMPtr<nsIChannel> mChannel; + RefPtr<HTMLMediaElement> mMediaParent; + RefPtr<WebVTTListener> mListener; + + void CreateTextTrack(); + +private: + void DispatchLoadResource(); + bool mLoadResourceDispatched; + + RefPtr<WindowDestroyObserver> mWindowDestroyObserver; +}; + +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_HTMLTrackElement_h |