1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/telephony/Telephony.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,206 @@ 1.4 +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ 1.6 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.9 + 1.10 +#ifndef mozilla_dom_telephony_telephony_h__ 1.11 +#define mozilla_dom_telephony_telephony_h__ 1.12 + 1.13 +#include "mozilla/dom/BindingDeclarations.h" 1.14 +#include "mozilla/dom/Promise.h" 1.15 +#include "mozilla/dom/telephony/TelephonyCommon.h" 1.16 + 1.17 +#include "nsITelephonyProvider.h" 1.18 + 1.19 +// Need to include TelephonyCall.h because we have inline methods that 1.20 +// assume they see the definition of TelephonyCall. 1.21 +#include "TelephonyCall.h" 1.22 + 1.23 +class nsPIDOMWindow; 1.24 + 1.25 +namespace mozilla { 1.26 +namespace dom { 1.27 + 1.28 +class OwningTelephonyCallOrTelephonyCallGroup; 1.29 + 1.30 +class Telephony MOZ_FINAL : public DOMEventTargetHelper 1.31 +{ 1.32 + /** 1.33 + * Class Telephony doesn't actually inherit nsITelephonyListener. 1.34 + * Instead, it owns an nsITelephonyListener derived instance mListener 1.35 + * and passes it to nsITelephonyProvider. The onreceived events are first 1.36 + * delivered to mListener and then forwarded to its owner, Telephony. See 1.37 + * also bug 775997 comment #51. 1.38 + */ 1.39 + class Listener; 1.40 + 1.41 + class Callback; 1.42 + friend class Callback; 1.43 + 1.44 + class EnumerationAck; 1.45 + friend class EnumerationAck; 1.46 + 1.47 + nsCOMPtr<nsITelephonyProvider> mProvider; 1.48 + nsRefPtr<Listener> mListener; 1.49 + 1.50 + TelephonyCall* mActiveCall; 1.51 + nsTArray<nsRefPtr<TelephonyCall> > mCalls; 1.52 + nsRefPtr<CallsList> mCallsList; 1.53 + 1.54 + nsRefPtr<TelephonyCallGroup> mGroup; 1.55 + 1.56 + bool mEnumerated; 1.57 + 1.58 +public: 1.59 + NS_DECL_ISUPPORTS_INHERITED 1.60 + NS_DECL_NSITELEPHONYLISTENER 1.61 + NS_REALLY_FORWARD_NSIDOMEVENTTARGET(DOMEventTargetHelper) 1.62 + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(Telephony, 1.63 + DOMEventTargetHelper) 1.64 + 1.65 + nsPIDOMWindow* 1.66 + GetParentObject() const 1.67 + { 1.68 + return GetOwner(); 1.69 + } 1.70 + 1.71 + // WrapperCache 1.72 + virtual JSObject* 1.73 + WrapObject(JSContext* aCx) MOZ_OVERRIDE; 1.74 + 1.75 + // WebIDL 1.76 + already_AddRefed<Promise> 1.77 + Dial(const nsAString& aNumber, const Optional<uint32_t>& aServiceId); 1.78 + 1.79 + already_AddRefed<Promise> 1.80 + DialEmergency(const nsAString& aNumber, const Optional<uint32_t>& aServiceId); 1.81 + 1.82 + void 1.83 + StartTone(const nsAString& aDTMFChar, const Optional<uint32_t>& aServiceId, 1.84 + ErrorResult& aRv); 1.85 + 1.86 + void 1.87 + StopTone(const Optional<uint32_t>& aServiceId, ErrorResult& aRv); 1.88 + 1.89 + bool 1.90 + GetMuted(ErrorResult& aRv) const; 1.91 + 1.92 + void 1.93 + SetMuted(bool aMuted, ErrorResult& aRv); 1.94 + 1.95 + bool 1.96 + GetSpeakerEnabled(ErrorResult& aRv) const; 1.97 + 1.98 + void 1.99 + SetSpeakerEnabled(bool aEnabled, ErrorResult& aRv); 1.100 + 1.101 + void 1.102 + GetActive(Nullable<OwningTelephonyCallOrTelephonyCallGroup>& aValue); 1.103 + 1.104 + already_AddRefed<CallsList> 1.105 + Calls() const; 1.106 + 1.107 + already_AddRefed<TelephonyCallGroup> 1.108 + ConferenceGroup() const; 1.109 + 1.110 + IMPL_EVENT_HANDLER(incoming) 1.111 + IMPL_EVENT_HANDLER(callschanged) 1.112 + IMPL_EVENT_HANDLER(remoteheld) 1.113 + IMPL_EVENT_HANDLER(remoteresumed) 1.114 + 1.115 + static already_AddRefed<Telephony> 1.116 + Create(nsPIDOMWindow* aOwner, ErrorResult& aRv); 1.117 + 1.118 + void 1.119 + AddCall(TelephonyCall* aCall) 1.120 + { 1.121 + NS_ASSERTION(!mCalls.Contains(aCall), "Already know about this one!"); 1.122 + mCalls.AppendElement(aCall); 1.123 + UpdateActiveCall(aCall, IsActiveState(aCall->CallState())); 1.124 + NotifyCallsChanged(aCall); 1.125 + } 1.126 + 1.127 + void 1.128 + RemoveCall(TelephonyCall* aCall) 1.129 + { 1.130 + NS_ASSERTION(mCalls.Contains(aCall), "Didn't know about this one!"); 1.131 + mCalls.RemoveElement(aCall); 1.132 + UpdateActiveCall(aCall, false); 1.133 + NotifyCallsChanged(aCall); 1.134 + } 1.135 + 1.136 + nsITelephonyProvider* 1.137 + Provider() const 1.138 + { 1.139 + return mProvider; 1.140 + } 1.141 + 1.142 + const nsTArray<nsRefPtr<TelephonyCall> >& 1.143 + CallsArray() const 1.144 + { 1.145 + return mCalls; 1.146 + } 1.147 + 1.148 + virtual void EventListenerAdded(nsIAtom* aType) MOZ_OVERRIDE; 1.149 + 1.150 +private: 1.151 + Telephony(nsPIDOMWindow* aOwner); 1.152 + ~Telephony(); 1.153 + 1.154 + void 1.155 + Shutdown(); 1.156 + 1.157 + static bool 1.158 + IsValidNumber(const nsAString& aNumber); 1.159 + 1.160 + static uint32_t 1.161 + GetNumServices(); 1.162 + 1.163 + static bool 1.164 + IsValidServiceId(uint32_t aServiceId); 1.165 + 1.166 + static bool 1.167 + IsActiveState(uint16_t aCallState); 1.168 + 1.169 + uint32_t 1.170 + ProvidedOrDefaultServiceId(const Optional<uint32_t>& aServiceId); 1.171 + 1.172 + bool 1.173 + HasDialingCall(); 1.174 + 1.175 + bool 1.176 + MatchActiveCall(TelephonyCall* aCall); 1.177 + 1.178 + already_AddRefed<Promise> 1.179 + DialInternal(uint32_t aServiceId, const nsAString& aNumber, bool isEmergency); 1.180 + 1.181 + already_AddRefed<TelephonyCall> 1.182 + CreateNewDialingCall(uint32_t aServiceId, const nsAString& aNumber); 1.183 + 1.184 + nsresult 1.185 + NotifyCallsChanged(TelephonyCall* aCall); 1.186 + 1.187 + nsresult 1.188 + DispatchCallEvent(const nsAString& aType, TelephonyCall* aCall); 1.189 + 1.190 + void 1.191 + EnqueueEnumerationAck(); 1.192 + 1.193 + void 1.194 + UpdateActiveCall(TelephonyCall* aCall, bool aIsActive); 1.195 + 1.196 + already_AddRefed<TelephonyCall> 1.197 + GetCall(uint32_t aServiceId, uint32_t aCallIndex); 1.198 + 1.199 + already_AddRefed<TelephonyCall> 1.200 + GetOutgoingCall(); 1.201 + 1.202 + already_AddRefed<TelephonyCall> 1.203 + GetCallFromEverywhere(uint32_t aServiceId, uint32_t aCallIndex); 1.204 +}; 1.205 + 1.206 +} // namespace dom 1.207 +} // namespace mozilla 1.208 + 1.209 +#endif // mozilla_dom_telephony_telephony_h__