bool TCPSocketChild::RecvCallback(const nsString& aType, const CallbackData& aData, const uint32_t& aReadyState) { mSocket->UpdateReadyState(aReadyState); if (aData.type() == CallbackData::Tvoid_t) { mSocket->FireEvent(aType); } else if (aData.type() == CallbackData::TTCPError) { const TCPError& err(aData.get_TCPError()); mSocket->FireErrorEvent(err.name(), err.message()); } else if (aData.type() == CallbackData::TSendableData) { const SendableData& data = aData.get_SendableData(); if (data.type() == SendableData::TArrayOfuint8_t) { mSocket->FireDataArrayEvent(aType, data.get_ArrayOfuint8_t()); } else if (data.type() == SendableData::TnsCString) { mSocket->FireDataStringEvent(aType, data.get_nsCString()); } else { MOZ_CRASH("Invalid callback data type!"); } } else { MOZ_CRASH("Invalid callback type!"); } return true; }
bool TCPSocketChild::RecvCallback(const nsString& aType, const CallbackData& aData, const nsString& aReadyState, const uint32_t& aBuffered) { if (NS_FAILED(mSocket->UpdateReadyStateAndBuffered(aReadyState, aBuffered))) NS_ERROR("Shouldn't fail!"); nsresult rv = NS_ERROR_FAILURE; if (aData.type() == CallbackData::Tvoid_t) { rv = mSocket->CallListenerVoid(aType); } else if (aData.type() == CallbackData::TTCPError) { const TCPError& err(aData.get_TCPError()); rv = mSocket->CallListenerError(aType, err.name()); } else if (aData.type() == CallbackData::TSendableData) { const SendableData& data = aData.get_SendableData(); if (data.type() == SendableData::TArrayOfuint8_t) { JSContext* cx = nsContentUtils::GetSafeJSContext(); JS::Rooted<JS::Value> val(cx); JS::Rooted<JSObject*> window(cx, mWindowObj); bool ok = IPC::DeserializeArrayBuffer(window, data.get_ArrayOfuint8_t(), &val); NS_ENSURE_TRUE(ok, true); rv = mSocket->CallListenerArrayBuffer(aType, val); } else if (data.type() == SendableData::TnsString) { rv = mSocket->CallListenerData(aType, data.get_nsString()); } else { MOZ_CRASH("Invalid callback data type!"); } } else { MOZ_CRASH("Invalid callback type!"); } NS_ENSURE_SUCCESS(rv, true); return true; }