MediaKeySystemAccessPermissionRequest.cpp (3142B)
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 #include "MediaKeySystemAccessPermissionRequest.h" 8 9 #include "nsGlobalWindowInner.h" 10 11 namespace mozilla::dom { 12 13 NS_IMPL_CYCLE_COLLECTION_INHERITED(MediaKeySystemAccessPermissionRequest, 14 ContentPermissionRequestBase) 15 16 NS_IMPL_ISUPPORTS_CYCLE_COLLECTION_INHERITED_0( 17 MediaKeySystemAccessPermissionRequest, ContentPermissionRequestBase) 18 19 /* static */ 20 already_AddRefed<MediaKeySystemAccessPermissionRequest> 21 MediaKeySystemAccessPermissionRequest::Create(nsPIDOMWindowInner* aWindow) { 22 // Could conceivably be created off main thread then used on main thread 23 // later. If we really need to do that at some point we could relax this 24 // assert. 25 AssertIsOnMainThread(); 26 if (!aWindow) { 27 return nullptr; 28 } 29 30 nsGlobalWindowInner* innerWindow = nsGlobalWindowInner::Cast(aWindow); 31 if (!innerWindow->GetPrincipal()) { 32 return nullptr; 33 } 34 35 RefPtr<MediaKeySystemAccessPermissionRequest> request = 36 new MediaKeySystemAccessPermissionRequest(innerWindow); 37 return request.forget(); 38 } 39 40 MediaKeySystemAccessPermissionRequest::MediaKeySystemAccessPermissionRequest( 41 nsGlobalWindowInner* aWindow) 42 : ContentPermissionRequestBase(aWindow->GetPrincipal(), aWindow, 43 "media.eme.require-app-approval"_ns, 44 "media-key-system-access"_ns) {} 45 46 MediaKeySystemAccessPermissionRequest:: 47 ~MediaKeySystemAccessPermissionRequest() { 48 AssertIsOnMainThread(); 49 // If a request has not been serviced by the time it is destroyed, treat it 50 // as if the request was denied. 51 Cancel(); 52 } 53 54 already_AddRefed<MediaKeySystemAccessPermissionRequest::RequestPromise> 55 MediaKeySystemAccessPermissionRequest::GetPromise() { 56 return mPromiseHolder.Ensure(__func__); 57 } 58 59 nsresult MediaKeySystemAccessPermissionRequest::Start() { 60 // Check test prefs to see if we should short circuit. We want to do this 61 // before checking the cached value so we can have pref changes take effect 62 // without refreshing the page. 63 MediaKeySystemAccessPermissionRequest::PromptResult promptResult = 64 CheckPromptPrefs(); 65 if (promptResult == 66 MediaKeySystemAccessPermissionRequest::PromptResult::Granted) { 67 return Allow(JS::UndefinedHandleValue); 68 } 69 if (promptResult == 70 MediaKeySystemAccessPermissionRequest::PromptResult::Denied) { 71 return Cancel(); 72 } 73 74 return nsContentPermissionUtils::AskPermission(this, mWindow); 75 } 76 77 NS_IMETHODIMP 78 MediaKeySystemAccessPermissionRequest::Allow(JS::Handle<JS::Value> aChoices) { 79 AssertIsOnMainThread(); 80 mPromiseHolder.ResolveIfExists(true, __func__); 81 return NS_OK; 82 } 83 84 NS_IMETHODIMP 85 MediaKeySystemAccessPermissionRequest::Cancel() { 86 AssertIsOnMainThread(); 87 mPromiseHolder.RejectIfExists(false, __func__); 88 return NS_OK; 89 } 90 91 } // namespace mozilla::dom