tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

HTMLTrackElement.h (4599B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef mozilla_dom_HTMLTrackElement_h
      8 #define mozilla_dom_HTMLTrackElement_h
      9 
     10 #include "mozilla/dom/HTMLMediaElement.h"
     11 #include "mozilla/dom/TextTrack.h"
     12 #include "nsCycleCollectionParticipant.h"
     13 #include "nsGenericHTMLElement.h"
     14 #include "nsGkAtoms.h"
     15 
     16 class nsIContent;
     17 
     18 namespace mozilla::dom {
     19 
     20 class WebVTTListener;
     21 class WindowDestroyObserver;
     22 enum class TextTrackReadyState : uint8_t;
     23 
     24 class HTMLTrackElement final : public nsGenericHTMLElement {
     25 public:
     26  explicit HTMLTrackElement(
     27      already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
     28 
     29  // nsISupports
     30  NS_DECL_ISUPPORTS_INHERITED
     31  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLTrackElement,
     32                                           nsGenericHTMLElement)
     33 
     34  // HTMLTrackElement WebIDL
     35  void GetKind(DOMString& aKind) const;
     36  void SetKind(const nsAString& aKind, ErrorResult& aError) {
     37    SetHTMLAttr(nsGkAtoms::kind, aKind, aError);
     38  }
     39 
     40  void GetSrc(DOMString& aSrc) const { GetHTMLURIAttr(nsGkAtoms::src, aSrc); }
     41 
     42  void SetSrc(const nsAString& aSrc, ErrorResult& aError);
     43 
     44  void GetSrclang(DOMString& aSrclang) const {
     45    GetHTMLAttr(nsGkAtoms::srclang, aSrclang);
     46  }
     47  void GetSrclang(nsAString& aSrclang) const {
     48    GetHTMLAttr(nsGkAtoms::srclang, aSrclang);
     49  }
     50  void SetSrclang(const nsAString& aSrclang, ErrorResult& aError) {
     51    SetHTMLAttr(nsGkAtoms::srclang, aSrclang, aError);
     52  }
     53 
     54  void GetLabel(DOMString& aLabel) const {
     55    GetHTMLAttr(nsGkAtoms::label, aLabel);
     56  }
     57  void GetLabel(nsAString& aLabel) const {
     58    GetHTMLAttr(nsGkAtoms::label, aLabel);
     59  }
     60  void SetLabel(const nsAString& aLabel, ErrorResult& aError) {
     61    SetHTMLAttr(nsGkAtoms::label, aLabel, aError);
     62  }
     63 
     64  bool Default() const { return GetBoolAttr(nsGkAtoms::_default); }
     65  void SetDefault(bool aDefault, ErrorResult& aError) {
     66    SetHTMLBoolAttr(nsGkAtoms::_default, aDefault, aError);
     67  }
     68 
     69  TextTrackReadyState ReadyState() const;
     70  uint16_t ReadyStateForBindings() const {
     71    return static_cast<uint16_t>(ReadyState());
     72  }
     73  void SetReadyState(TextTrackReadyState);
     74 
     75  TextTrack* GetTrack();
     76 
     77  virtual nsresult Clone(dom::NodeInfo*, nsINode** aResult) const override;
     78 
     79  // Override ParseAttribute() to convert kind strings to enum values.
     80  virtual bool ParseAttribute(int32_t aNamespaceID, nsAtom* aAttribute,
     81                              const nsAString& aValue,
     82                              nsIPrincipal* aMaybeScriptedPrincipal,
     83                              nsAttrValue& aResult) override;
     84 
     85  // Override BindToTree() so that we can trigger a load when we become
     86  // the child of a media element.
     87  virtual nsresult BindToTree(BindContext&, nsINode& aParent) override;
     88  virtual void UnbindFromTree(UnbindContext&) override;
     89 
     90  virtual void AfterSetAttr(int32_t aNameSpaceID, nsAtom* aName,
     91                            const nsAttrValue* aValue,
     92                            const nsAttrValue* aOldValue,
     93                            nsIPrincipal* aMaybeScriptedPrincipal,
     94                            bool aNotify) override;
     95 
     96  void DispatchTrackRunnable(const nsString& aEventName);
     97  void DispatchTrustedEvent(const nsAString& aName);
     98  void DispatchTestEvent(const nsAString& aName);
     99 
    100  void CancelChannelAndListener(bool aCheckRFP);
    101 
    102  bool ShouldResistFingerprinting(RFPTarget aRfpTarget);
    103 
    104  // Only load resource for the non-disabled track with media parent.
    105  void MaybeDispatchLoadResource();
    106 
    107 protected:
    108  virtual ~HTMLTrackElement();
    109 
    110  virtual JSObject* WrapNode(JSContext* aCx,
    111                             JS::Handle<JSObject*> aGivenProto) override;
    112  void OnChannelRedirect(nsIChannel* aChannel, nsIChannel* aNewChannel,
    113                         uint32_t aFlags);
    114 
    115  friend class TextTrackCue;
    116  friend class WebVTTListener;
    117 
    118  RefPtr<TextTrack> mTrack;
    119  nsCOMPtr<nsIChannel> mChannel;
    120  RefPtr<HTMLMediaElement> mMediaParent;
    121  RefPtr<WebVTTListener> mListener;
    122 
    123  void CreateTextTrack();
    124 
    125 private:
    126  // Open a new channel to the HTMLTrackElement's src attribute and call
    127  // mListener's LoadResource().
    128  void LoadResource(RefPtr<WebVTTListener>&& aWebVTTListener);
    129  bool mLoadResourceDispatched;
    130 
    131  void MaybeClearAllCues();
    132 
    133  RefPtr<WindowDestroyObserver> mWindowDestroyObserver;
    134 };
    135 
    136 }  // namespace mozilla::dom
    137 
    138 #endif  // mozilla_dom_HTMLTrackElement_h