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