tor-browser

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

MediaEncryptedEvent.cpp (3823B)


      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 file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "MediaEncryptedEvent.h"
      8 
      9 #include "js/ArrayBuffer.h"
     10 #include "jsfriendapi.h"
     11 #include "mozilla/HoldDropJSObjects.h"
     12 #include "mozilla/dom/MediaEncryptedEventBinding.h"
     13 #include "mozilla/dom/MediaKeys.h"
     14 #include "nsContentUtils.h"
     15 #include "nsINode.h"
     16 
     17 namespace mozilla::dom {
     18 
     19 NS_IMPL_CYCLE_COLLECTION_CLASS(MediaEncryptedEvent)
     20 
     21 NS_IMPL_ADDREF_INHERITED(MediaEncryptedEvent, Event)
     22 NS_IMPL_RELEASE_INHERITED(MediaEncryptedEvent, Event)
     23 
     24 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(MediaEncryptedEvent, Event)
     25 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
     26 
     27 NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(MediaEncryptedEvent, Event)
     28  NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK(mInitData)
     29 NS_IMPL_CYCLE_COLLECTION_TRACE_END
     30 
     31 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(MediaEncryptedEvent, Event)
     32  mozilla::DropJSObjects(tmp);
     33 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
     34 
     35 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(MediaEncryptedEvent)
     36 NS_INTERFACE_MAP_END_INHERITING(Event)
     37 
     38 MediaEncryptedEvent::MediaEncryptedEvent(EventTarget* aOwner)
     39    : Event(aOwner, nullptr, nullptr) {
     40  mozilla::HoldJSObjects(this);
     41 }
     42 
     43 MediaEncryptedEvent::~MediaEncryptedEvent() { mozilla::DropJSObjects(this); }
     44 
     45 JSObject* MediaEncryptedEvent::WrapObjectInternal(
     46    JSContext* aCx, JS::Handle<JSObject*> aGivenProto) {
     47  return MediaEncryptedEvent_Binding::Wrap(aCx, this, aGivenProto);
     48 }
     49 
     50 already_AddRefed<MediaEncryptedEvent> MediaEncryptedEvent::Constructor(
     51    EventTarget* aOwner) {
     52  RefPtr<MediaEncryptedEvent> e = new MediaEncryptedEvent(aOwner);
     53  e->InitEvent(u"encrypted"_ns, CanBubble::eNo, Cancelable::eNo);
     54  e->SetTrusted(true);
     55  return e.forget();
     56 }
     57 
     58 already_AddRefed<MediaEncryptedEvent> MediaEncryptedEvent::Constructor(
     59    EventTarget* aOwner, const nsAString& aInitDataType,
     60    const nsTArray<uint8_t>& aInitData) {
     61  RefPtr<MediaEncryptedEvent> e = new MediaEncryptedEvent(aOwner);
     62  e->InitEvent(u"encrypted"_ns, CanBubble::eNo, Cancelable::eNo);
     63  e->mInitDataType = aInitDataType;
     64  e->mRawInitData = aInitData.Clone();
     65  e->SetTrusted(true);
     66  return e.forget();
     67 }
     68 
     69 already_AddRefed<MediaEncryptedEvent> MediaEncryptedEvent::Constructor(
     70    const GlobalObject& aGlobal, const nsAString& aType,
     71    const MediaKeyNeededEventInit& aEventInitDict, ErrorResult& aRv) {
     72  nsCOMPtr<EventTarget> owner = do_QueryInterface(aGlobal.GetAsSupports());
     73  RefPtr<MediaEncryptedEvent> e = new MediaEncryptedEvent(owner);
     74  bool trusted = e->Init(owner);
     75  e->InitEvent(aType, aEventInitDict.mBubbles, aEventInitDict.mCancelable);
     76  e->mInitDataType = aEventInitDict.mInitDataType;
     77  if (!aEventInitDict.mInitData.IsNull()) {
     78    JS::Rooted<JSObject*> buffer(aGlobal.Context(),
     79                                 aEventInitDict.mInitData.Value().Obj());
     80    e->mInitData = JS::CopyArrayBuffer(aGlobal.Context(), buffer);
     81    if (!e->mInitData) {
     82      aRv.NoteJSContextException(aGlobal.Context());
     83      return nullptr;
     84    }
     85  }
     86  e->SetTrusted(trusted);
     87  return e.forget();
     88 }
     89 
     90 void MediaEncryptedEvent::GetInitDataType(nsString& aRetVal) const {
     91  aRetVal = mInitDataType;
     92 }
     93 
     94 void MediaEncryptedEvent::GetInitData(JSContext* cx,
     95                                      JS::MutableHandle<JSObject*> aData,
     96                                      ErrorResult& aRv) {
     97  if (mRawInitData.Length()) {
     98    mInitData = ArrayBuffer::Create(cx, this, mRawInitData, aRv);
     99    if (aRv.Failed()) {
    100      return;
    101    }
    102    mRawInitData.Clear();
    103  }
    104  aData.set(mInitData);
    105 }
    106 
    107 }  // namespace mozilla::dom