1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 #include "RTCIdentityProviderRegistrar.h"
7 #include "mozilla/Attributes.h"
8 #include "nsCycleCollectionParticipant.h"
9
10 namespace mozilla {
11 namespace dom {
12
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(RTCIdentityProviderRegistrar)13 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(RTCIdentityProviderRegistrar)
14 NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
15 NS_INTERFACE_MAP_ENTRY(nsISupports)
16 NS_INTERFACE_MAP_END
17
18 NS_IMPL_CYCLE_COLLECTING_ADDREF(RTCIdentityProviderRegistrar)
19 NS_IMPL_CYCLE_COLLECTING_RELEASE(RTCIdentityProviderRegistrar)
20
21 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(RTCIdentityProviderRegistrar,
22 mGlobal,
23 mGenerateAssertionCallback,
24 mValidateAssertionCallback)
25
26 RTCIdentityProviderRegistrar::RTCIdentityProviderRegistrar(
27 nsIGlobalObject* aGlobal)
28 : mGlobal(aGlobal)
29 , mGenerateAssertionCallback(nullptr)
30 , mValidateAssertionCallback(nullptr)
31 {
32 MOZ_COUNT_CTOR(RTCIdentityProviderRegistrar);
33 }
34
~RTCIdentityProviderRegistrar()35 RTCIdentityProviderRegistrar::~RTCIdentityProviderRegistrar()
36 {
37 MOZ_COUNT_DTOR(RTCIdentityProviderRegistrar);
38 }
39
40 nsIGlobalObject*
GetParentObject() const41 RTCIdentityProviderRegistrar::GetParentObject() const
42 {
43 return mGlobal;
44 }
45
46 JSObject*
WrapObject(JSContext * aCx,JS::Handle<JSObject * > aGivenProto)47 RTCIdentityProviderRegistrar::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
48 {
49 return RTCIdentityProviderRegistrarBinding::Wrap(aCx, this, aGivenProto);
50 }
51
52 void
Register(const RTCIdentityProvider & aIdp)53 RTCIdentityProviderRegistrar::Register(const RTCIdentityProvider& aIdp)
54 {
55 mGenerateAssertionCallback = aIdp.mGenerateAssertion;
56 mValidateAssertionCallback = aIdp.mValidateAssertion;
57 }
58
59 bool
HasIdp() const60 RTCIdentityProviderRegistrar::HasIdp() const
61 {
62 return mGenerateAssertionCallback && mValidateAssertionCallback;
63 }
64
65 already_AddRefed<Promise>
GenerateAssertion(const nsAString & aContents,const nsAString & aOrigin,const Optional<nsAString> & aUsernameHint,ErrorResult & aRv)66 RTCIdentityProviderRegistrar::GenerateAssertion(
67 const nsAString& aContents, const nsAString& aOrigin,
68 const Optional<nsAString>& aUsernameHint, ErrorResult& aRv)
69 {
70 if (!mGenerateAssertionCallback) {
71 aRv.Throw(NS_ERROR_NOT_INITIALIZED);
72 return nullptr;
73 }
74 return mGenerateAssertionCallback->Call(aContents, aOrigin, aUsernameHint, aRv);
75 }
76 already_AddRefed<Promise>
ValidateAssertion(const nsAString & aAssertion,const nsAString & aOrigin,ErrorResult & aRv)77 RTCIdentityProviderRegistrar::ValidateAssertion(
78 const nsAString& aAssertion, const nsAString& aOrigin, ErrorResult& aRv)
79 {
80 if (!mValidateAssertionCallback) {
81 aRv.Throw(NS_ERROR_NOT_INITIALIZED);
82 return nullptr;
83 }
84 return mValidateAssertionCallback->Call(aAssertion, aOrigin, aRv);
85 }
86
87
88
89 } // namespace dom
90 } // namespace mozilla
91