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