bool MobileConnectionRequestChild::DoReply(const MobileConnectionReplySuccessMmi& aReply) { nsAutoString serviceCode(aReply.serviceCode()); nsAutoString statusMessage(aReply.statusMessage()); AdditionalInformation info(aReply.additionalInformation()); nsRefPtr<MobileConnectionCallback> callback = static_cast<MobileConnectionCallback*>(mRequestCallback.get()); // Handle union types switch (info.type()) { case AdditionalInformation::Tvoid_t: return NS_SUCCEEDED(callback->NotifySendCancelMmiSuccess(serviceCode, statusMessage)); case AdditionalInformation::Tuint16_t: return NS_SUCCEEDED(callback->NotifySendCancelMmiSuccess(serviceCode, statusMessage, info.get_uint16_t())); case AdditionalInformation::TArrayOfnsString: return NS_SUCCEEDED(callback->NotifySendCancelMmiSuccess(serviceCode, statusMessage, info.get_ArrayOfnsString())); case AdditionalInformation::TArrayOfMozCallForwardingOptions: return NS_SUCCEEDED(callback->NotifySendCancelMmiSuccess(serviceCode, statusMessage, info.get_ArrayOfMozCallForwardingOptions())); default: MOZ_CRASH("Received invalid type!"); } return false; }
bool MobileConnectionRequestChild::DoReply(const MobileConnectionReplySuccessMmi& aReply) { nsAutoString serviceCode(aReply.serviceCode()); nsAutoString statusMessage(aReply.statusMessage()); AdditionalInformation info(aReply.additionalInformation()); // Handle union types switch (info.type()) { case AdditionalInformation::Tvoid_t: return NS_SUCCEEDED(mRequestCallback->NotifySendCancelMmiSuccess(serviceCode, statusMessage)); case AdditionalInformation::Tuint16_t: return NS_SUCCEEDED(mRequestCallback->NotifySendCancelMmiSuccessWithInteger( serviceCode, statusMessage, info.get_uint16_t())); case AdditionalInformation::TArrayOfnsString: { uint32_t count = info.get_ArrayOfnsString().Length(); const nsTArray<nsString>& additionalInformation = info.get_ArrayOfnsString(); nsAutoArrayPtr<const char16_t*> additionalInfoPtrs(new const char16_t*[count]); for (size_t i = 0; i < count; ++i) { additionalInfoPtrs[i] = additionalInformation[i].get(); } return NS_SUCCEEDED(mRequestCallback->NotifySendCancelMmiSuccessWithStrings( serviceCode, statusMessage, count, additionalInfoPtrs)); } case AdditionalInformation::TArrayOfnsMobileCallForwardingOptions: { uint32_t count = info.get_ArrayOfnsMobileCallForwardingOptions().Length(); nsTArray<nsCOMPtr<nsIMobileCallForwardingOptions>> results; for (uint32_t i = 0; i < count; i++) { // Use dont_AddRef here because these instances are already AddRef-ed in // MobileConnectionIPCSerializer.h nsCOMPtr<nsIMobileCallForwardingOptions> item = dont_AddRef( info.get_ArrayOfnsMobileCallForwardingOptions()[i]); results.AppendElement(item); } return NS_SUCCEEDED(mRequestCallback->NotifySendCancelMmiSuccessWithCallForwardingOptions( serviceCode, statusMessage, count, const_cast<nsIMobileCallForwardingOptions**>(info.get_ArrayOfnsMobileCallForwardingOptions().Elements()))); } default: MOZ_CRASH("Received invalid type!"); } return false; }