blob: a0b82a4dc371694aa263d8e6a03fd4bab0591db2 [file] [log] [blame]
// Copyright 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef COBALT_DOM_TRACK_DEFAULT_LIST_H_
#define COBALT_DOM_TRACK_DEFAULT_LIST_H_
#include <set>
#include <string>
#include <utility>
#include "base/compiler_specific.h"
#include "cobalt/dom/dom_exception.h"
#include "cobalt/dom/track_default.h"
#include "cobalt/script/exception_state.h"
#include "cobalt/script/sequence.h"
#include "cobalt/script/wrappable.h"
namespace cobalt {
namespace dom {
// The TrackDefaultList is a simple container object for TrackDefault objects.
// https://www.w3.org/TR/2016/CR-media-source-20160705/#trackdefaultlist
class TrackDefaultList : public script::Wrappable {
public:
// Web API: TrackDefaultList
//
explicit TrackDefaultList(script::ExceptionState* exception_state) {
UNREFERENCED_PARAMETER(exception_state);
}
TrackDefaultList(
const script::Sequence<scoped_refptr<TrackDefault> >& track_defaults,
script::ExceptionState* exception_state) {
// |track_defaults| shouldn't contain two or more TrackDefault objects with
// the same |type| and the same |byte_stream_track_id|.
typedef std::pair<TrackDefault::TrackDefaultType, std::string> TypeAndId;
std::set<TypeAndId> type_and_ids;
for (script::Sequence<scoped_refptr<TrackDefault> >::size_type i = 0;
i < track_defaults.size(); ++i) {
scoped_refptr<TrackDefault> track_default = track_defaults.at(i);
TypeAndId type_and_id(track_default->type(),
track_default->byte_stream_track_id());
if (!type_and_ids.insert(type_and_id).second) {
DOMException::Raise(DOMException::kInvalidAccessErr, exception_state);
return;
}
}
track_defaults_ = track_defaults;
}
uint32 length() const { return static_cast<uint32>(track_defaults_.size()); }
scoped_refptr<TrackDefault> AnonymousIndexedGetter(uint32 index) const {
if (index < length()) {
return track_defaults_.at(index);
}
return NULL;
}
DEFINE_WRAPPABLE_TYPE(TrackDefaultList);
private:
script::Sequence<scoped_refptr<TrackDefault> > track_defaults_;
};
} // namespace dom
} // namespace cobalt
#endif // COBALT_DOM_TRACK_DEFAULT_LIST_H_