summaryrefslogtreecommitdiffstats
path: root/dom/media/webrtc/RTCIdentityProviderRegistrar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/webrtc/RTCIdentityProviderRegistrar.cpp')
-rw-r--r--dom/media/webrtc/RTCIdentityProviderRegistrar.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/dom/media/webrtc/RTCIdentityProviderRegistrar.cpp b/dom/media/webrtc/RTCIdentityProviderRegistrar.cpp
new file mode 100644
index 0000000000..44e4c0d775
--- /dev/null
+++ b/dom/media/webrtc/RTCIdentityProviderRegistrar.cpp
@@ -0,0 +1,70 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "RTCIdentityProviderRegistrar.h"
+#include "mozilla/Attributes.h"
+#include "nsCycleCollectionParticipant.h"
+
+namespace mozilla::dom {
+
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(RTCIdentityProviderRegistrar)
+ NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
+ NS_INTERFACE_MAP_ENTRY(nsISupports)
+NS_INTERFACE_MAP_END
+
+NS_IMPL_CYCLE_COLLECTING_ADDREF(RTCIdentityProviderRegistrar)
+NS_IMPL_CYCLE_COLLECTING_RELEASE(RTCIdentityProviderRegistrar)
+
+NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(RTCIdentityProviderRegistrar, mGlobal,
+ mGenerateAssertionCallback,
+ mValidateAssertionCallback)
+
+RTCIdentityProviderRegistrar::RTCIdentityProviderRegistrar(
+ nsIGlobalObject* aGlobal)
+ : mGlobal(aGlobal),
+ mGenerateAssertionCallback(nullptr),
+ mValidateAssertionCallback(nullptr) {}
+
+RTCIdentityProviderRegistrar::~RTCIdentityProviderRegistrar() = default;
+
+nsIGlobalObject* RTCIdentityProviderRegistrar::GetParentObject() const {
+ return mGlobal;
+}
+
+JSObject* RTCIdentityProviderRegistrar::WrapObject(
+ JSContext* aCx, JS::Handle<JSObject*> aGivenProto) {
+ return RTCIdentityProviderRegistrar_Binding::Wrap(aCx, this, aGivenProto);
+}
+
+void RTCIdentityProviderRegistrar::Register(const RTCIdentityProvider& aIdp) {
+ mGenerateAssertionCallback = aIdp.mGenerateAssertion;
+ mValidateAssertionCallback = aIdp.mValidateAssertion;
+}
+
+bool RTCIdentityProviderRegistrar::HasIdp() const {
+ return mGenerateAssertionCallback && mValidateAssertionCallback;
+}
+
+already_AddRefed<Promise> RTCIdentityProviderRegistrar::GenerateAssertion(
+ const nsAString& aContents, const nsAString& aOrigin,
+ const RTCIdentityProviderOptions& aOptions, ErrorResult& aRv) {
+ if (!mGenerateAssertionCallback) {
+ aRv.Throw(NS_ERROR_NOT_INITIALIZED);
+ return nullptr;
+ }
+ RefPtr<GenerateAssertionCallback> callback(mGenerateAssertionCallback);
+ return callback->Call(aContents, aOrigin, aOptions, aRv);
+}
+already_AddRefed<Promise> RTCIdentityProviderRegistrar::ValidateAssertion(
+ const nsAString& aAssertion, const nsAString& aOrigin, ErrorResult& aRv) {
+ if (!mValidateAssertionCallback) {
+ aRv.Throw(NS_ERROR_NOT_INITIALIZED);
+ return nullptr;
+ }
+ RefPtr<ValidateAssertionCallback> callback(mValidateAssertionCallback);
+ return callback->Call(aAssertion, aOrigin, aRv);
+}
+
+} // namespace mozilla::dom