File: TrackDefaultList.cpp

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (78 lines) | stat: -rw-r--r-- 2,898 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "config.h"

#include "modules/mediasource/TrackDefaultList.h"

#include "bindings/core/v8/ExceptionState.h"
#include "core/dom/ExceptionCode.h"
#include "wtf/text/AtomicStringHash.h"
#include "wtf/text/StringHash.h"

namespace blink {

TrackDefaultList* TrackDefaultList::create()
{
    return new TrackDefaultList();
}

TrackDefaultList* TrackDefaultList::create(const HeapVector<Member<TrackDefault>>& trackDefaults, ExceptionState& exceptionState)
{
    // Per 11 Dec 2014 Editor's Draft
    // https://w3c.github.io/media-source/#trackdefaultlist
    // When this method is invoked, the user agent must run the following steps:
    // 1. If |trackDefaults| contains two or more TrackDefault objects with the
    //    same type and the same byteStreamTrackID, then throw an
    //    InvalidAccessError and abort these steps.
    //    Note: This also applies when byteStreamTrackID contains an empty
    //    string and ensures that there is only one "byteStreamTrackID
    //    independent" default for each TrackDefaultType value.
    using TypeAndID = std::pair<AtomicString, String>;
    using TypeAndIDToTrackDefaultMap = HeapHashMap<TypeAndID, Member<TrackDefault>>;
    TypeAndIDToTrackDefaultMap typeAndIDToTrackDefaultMap;

    for (const auto& trackDefault : trackDefaults) {
        TypeAndID key = TypeAndID(trackDefault->type(), trackDefault->byteStreamTrackID());
        if (!typeAndIDToTrackDefaultMap.add(key, trackDefault).isNewEntry) {
            exceptionState.throwDOMException(InvalidAccessError, "Duplicate TrackDefault type (" + key.first + ") and byteStreamTrackID (" + key.second + ")");
            return nullptr;
        }
    }

    // 2. Store a shallow copy of |trackDefaults| in this new object so the values can
    //    be returned by the accessor methods.
    // This step is done in constructor initializer.
    return new TrackDefaultList(trackDefaults);
}

TrackDefault* TrackDefaultList::item(unsigned index) const
{
    // Per 11 Dec 2014 Editor's Draft
    // https://w3c.github.io/media-source/#trackdefaultlist
    // When this method is invoked, the user agent must run the following steps:
    // 1. If |index| is greater than or equal to the length attribute then
    //    return undefined and abort these steps.
    if (index >= m_trackDefaults.size())
        return 0;

    // 2. Return the |index|'th TrackDefault object in the list.
    return m_trackDefaults[index].get();
}

TrackDefaultList::TrackDefaultList()
{
}

TrackDefaultList::TrackDefaultList(const HeapVector<Member<TrackDefault>>& trackDefaults)
    : m_trackDefaults(trackDefaults)
{
}

void TrackDefaultList::trace(Visitor* visitor)
{
    visitor->trace(m_trackDefaults);
}

} // namespace blink