1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim:set ts=2 sw=2 sts=2 et cindent: */ 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_MediaKeySystemAccess_h 8 #define mozilla_dom_MediaKeySystemAccess_h 9 10 #include "mozilla/Attributes.h" 11 #include "mozilla/ErrorResult.h" 12 #include "nsCycleCollectionParticipant.h" 13 #include "nsWrapperCache.h" 14 15 #include "mozilla/dom/Promise.h" 16 #include "mozilla/dom/MediaKeySystemAccessBinding.h" 17 #include "mozilla/dom/MediaKeysRequestStatusBinding.h" 18 19 #include "js/TypeDecls.h" 20 21 namespace mozilla { 22 23 class DecoderDoctorDiagnostics; 24 25 namespace dom { 26 27 class MediaKeySystemAccess final : public nsISupports, public nsWrapperCache { 28 public: 29 NS_DECL_CYCLE_COLLECTING_ISUPPORTS 30 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MediaKeySystemAccess) 31 32 public: 33 explicit MediaKeySystemAccess(nsPIDOMWindowInner* aParent, 34 const nsAString& aKeySystem, 35 const MediaKeySystemConfiguration& aConfig); 36 37 protected: 38 ~MediaKeySystemAccess(); 39 40 public: 41 nsPIDOMWindowInner* GetParentObject() const; 42 43 JSObject* WrapObject(JSContext* aCx, 44 JS::Handle<JSObject*> aGivenProto) override; 45 46 void GetKeySystem(nsString& aRetVal) const; 47 48 void GetConfiguration(MediaKeySystemConfiguration& aConfig); 49 50 already_AddRefed<Promise> CreateMediaKeys(ErrorResult& aRv); 51 52 static MediaKeySystemStatus GetKeySystemStatus( 53 const nsAString& aKeySystem, nsACString& aOutExceptionMessage); 54 55 static bool IsSupported(const nsAString& aKeySystem, 56 const Sequence<MediaKeySystemConfiguration>& aConfigs, 57 DecoderDoctorDiagnostics* aDiagnostics); 58 59 static void NotifyObservers(nsPIDOMWindowInner* aWindow, 60 const nsAString& aKeySystem, 61 MediaKeySystemStatus aStatus); 62 63 static bool GetSupportedConfig( 64 const nsAString& aKeySystem, 65 const Sequence<MediaKeySystemConfiguration>& aConfigs, 66 MediaKeySystemConfiguration& aOutConfig, 67 DecoderDoctorDiagnostics* aDiagnostics, bool aIsPrivateBrowsing, 68 const std::function<void(const char*)>& aDeprecationLogFn); 69 70 static bool KeySystemSupportsInitDataType(const nsAString& aKeySystem, 71 const nsAString& aInitDataType); 72 73 static nsCString ToCString( 74 const Sequence<MediaKeySystemConfiguration>& aConfig); 75 76 private: 77 nsCOMPtr<nsPIDOMWindowInner> mParent; 78 const nsString mKeySystem; 79 const MediaKeySystemConfiguration mConfig; 80 }; 81 82 } // namespace dom 83 } // namespace mozilla 84 85 #endif // mozilla_dom_MediaKeySystemAccess_h 86