Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/media/MediaTrack.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim:set ts=2 sw=2 et tw=78: */
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_MediaTrack_h
8
#define mozilla_dom_MediaTrack_h
9
10
#include "mozilla/DOMEventTargetHelper.h"
11
12
namespace mozilla {
13
namespace dom {
14
15
class MediaTrackList;
16
class VideoTrack;
17
class AudioTrack;
18
19
/**
20
 * Base class of AudioTrack and VideoTrack. The AudioTrack and VideoTrack
21
 * objects represent specific tracks of a media resource. Each track has aspects
22
 * of an identifier, category, label, and language, even if a track is removed
23
 * from its corresponding track list, those aspects do not change.
24
 *
25
 * When fetching the media resource, an audio/video track is created if the
26
 * media resource is found to have an audio/video track. When the UA has learned
27
 * that an audio/video track has ended, this audio/video track will be removed
28
 * from its corresponding track list.
29
 *
30
 * Although AudioTrack and VideoTrack are not EventTargets, TextTrack is, and
31
 * TextTrack inherits from MediaTrack as well (or is going to).
32
 */
33
class MediaTrack : public DOMEventTargetHelper
34
{
35
public:
36
  MediaTrack(nsIGlobalObject* aOwnerGlobal,
37
             const nsAString& aId,
38
             const nsAString& aKind,
39
             const nsAString& aLabel,
40
             const nsAString& aLanguage);
41
42
  NS_DECL_ISUPPORTS_INHERITED
43
  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MediaTrack, DOMEventTargetHelper)
44
45
  enum {
46
    DEFAULT = 0,
47
    FIRE_NO_EVENTS = 1 << 0,
48
  };
49
  // The default behavior of enabling an audio track or selecting a video track
50
  // fires a change event and notifies its media resource about the changes.
51
  // It should not fire any events when fetching media resource.
52
  virtual void SetEnabledInternal(bool aEnabled, int aFlags) = 0;
53
54
  virtual AudioTrack* AsAudioTrack()
55
0
  {
56
0
    return nullptr;
57
0
  }
58
59
  virtual VideoTrack* AsVideoTrack()
60
0
  {
61
0
    return nullptr;
62
0
  }
63
64
  const nsString& GetId() const
65
0
  {
66
0
    return mId;
67
0
  }
68
69
  // WebIDL
70
  void GetId(nsAString& aId) const
71
  {
72
    aId = mId;
73
  }
74
  void GetKind(nsAString& aKind) const
75
  {
76
    aKind = mKind;
77
  }
78
  void GetLabel(nsAString& aLabel) const
79
  {
80
    aLabel = mLabel;
81
  }
82
  void GetLanguage(nsAString& aLanguage) const
83
  {
84
    aLanguage = mLanguage;
85
  }
86
87
  friend class MediaTrackList;
88
89
protected:
90
  virtual ~MediaTrack();
91
92
  void SetTrackList(MediaTrackList* aList);
93
94
  RefPtr<MediaTrackList> mList;
95
  nsString mId;
96
  nsString mKind;
97
  nsString mLabel;
98
  nsString mLanguage;
99
};
100
101
} // namespace dom
102
} // namespace mozilla
103
104
#endif // mozilla_dom_MediaTrack_h