Пример #1
0
NS_IMETHODIMP
MobileMessageCursorParent::NotifyCursorResult(nsISupports** aResults,
        uint32_t aSize)
{
    MOZ_ASSERT(aResults && *aResults && aSize);

    // The child process could die before this asynchronous notification, in which
    // case ActorDestroy() was called and mContinueCallback is now null. Return an
    // error here to avoid sending a message to the dead process.
    NS_ENSURE_TRUE(mContinueCallback, NS_ERROR_FAILURE);

    nsCOMPtr<nsIMobileMessageThread> iThread =
        do_QueryInterface(aResults[0]);
    if (iThread) {
        nsTArray<ThreadData> threads;

        for (uint32_t i = 0; i < aSize; i++) {
            nsCOMPtr<nsIMobileMessageThread> iThread =
                do_QueryInterface(aResults[i]);
            NS_ENSURE_TRUE(iThread, NS_ERROR_FAILURE);

            MobileMessageThreadInternal* thread =
                static_cast<MobileMessageThreadInternal*>(iThread.get());
            threads.AppendElement(thread->GetData());
        }

        return SendNotifyResult(MobileMessageCursorData(ThreadArrayData(threads)))
               ? NS_OK : NS_ERROR_FAILURE;
    }

    ContentParent* parent = static_cast<ContentParent*>(Manager()->Manager());
    nsTArray<MobileMessageData> messages;
    for (uint32_t i = 0; i < aSize; i++) {
        nsCOMPtr<nsISmsMessage> sms = do_QueryInterface(aResults[i]);
        if (sms) {
            messages.AppendElement(
                static_cast<SmsMessageInternal*>(sms.get())->GetData());
            continue;
        }

        nsCOMPtr<nsIMmsMessage> mms = do_QueryInterface(aResults[i]);
        if (mms) {
            MmsMessageData mmsData;
            NS_ENSURE_TRUE(
                static_cast<MmsMessageInternal*>(mms.get())->GetData(parent, mmsData),
                NS_ERROR_FAILURE
            );
            messages.AppendElement(mmsData);
            continue;
        }

        return NS_ERROR_FAILURE;
    }

    return SendNotifyResult(MobileMessageCursorData(MobileMessageArrayData(messages)))
           ? NS_OK : NS_ERROR_FAILURE;
}
Пример #2
0
NS_IMETHODIMP
MobileMessageCursorParent::NotifyCursorResult(nsISupports* aResult)
{
  // The child process could die before this asynchronous notification, in which
  // case ActorDestroy() was called and mContinueCallback is now null. Return an
  // error here to avoid sending a message to the dead process.
  NS_ENSURE_TRUE(mContinueCallback, NS_ERROR_FAILURE);

  nsCOMPtr<nsIDOMMozSmsMessage> iSms = do_QueryInterface(aResult);
  if (iSms) {
    SmsMessage* message = static_cast<SmsMessage*>(aResult);
    return SendNotifyResult(MobileMessageCursorData(message->GetData()))
      ? NS_OK : NS_ERROR_FAILURE;
  }

  nsCOMPtr<nsIDOMMozMmsMessage> iMms = do_QueryInterface(aResult);
  if (iMms) {
    MmsMessage* message = static_cast<MmsMessage*>(aResult);
    ContentParent* parent = static_cast<ContentParent*>(Manager()->Manager());
    MmsMessageData data;
    if (!message->GetData(parent, data)) {
      return NS_ERROR_FAILURE;
    }
    return SendNotifyResult(MobileMessageCursorData(data))
      ? NS_OK : NS_ERROR_FAILURE;
  }

  nsCOMPtr<nsIDOMMozMobileMessageThread> iThread = do_QueryInterface(aResult);
  if (iThread) {
    MobileMessageThread* thread = static_cast<MobileMessageThread*>(aResult);
    return SendNotifyResult(MobileMessageCursorData(thread->GetData()))
      ? NS_OK : NS_ERROR_FAILURE;
  }

  MOZ_NOT_REACHED("Received invalid response parameters!");
  return NS_ERROR_FAILURE;
}