bool nsIContentParent::RecvAsyncMessage(const nsString& aMsg, const ClonedMessageData& aData, InfallibleTArray<CpowEntry>&& aCpows, const IPC::Principal& aPrincipal) { // FIXME Permission check in Content process nsIPrincipal* principal = aPrincipal; if (IsContentParent()) { ContentParent* parent = AsContentParent(); if (!ContentParent::IgnoreIPCPrincipal() && parent && principal && !AssertAppPrincipal(parent, principal)) { return false; } } RefPtr<nsFrameMessageManager> ppm = mMessageManager; if (ppm) { ipc::StructuredCloneData data; ipc::UnpackClonedMessageDataForParent(aData, data); CrossProcessCpowHolder cpows(this, aCpows); ppm->ReceiveMessage(static_cast<nsIContentFrameMessageManager*>(ppm.get()), nullptr, aMsg, false, &data, &cpows, aPrincipal, nullptr); } return true; }
bool nsIContentParent::AnswerRpcMessage(const nsString& aMsg, const ClonedMessageData& aData, const InfallibleTArray<CpowEntry>& aCpows, const IPC::Principal& aPrincipal, InfallibleTArray<nsString>* aRetvals) { // FIXME Permission check in Content process nsIPrincipal* principal = aPrincipal; if (IsContentParent()) { ContentParent* parent = AsContentParent(); if (!ContentParent::IgnoreIPCPrincipal() && parent && principal && !AssertAppPrincipal(parent, principal)) { return false; } } nsRefPtr<nsFrameMessageManager> ppm = mMessageManager; if (ppm) { StructuredCloneData cloneData = ipc::UnpackClonedMessageDataForParent(aData); CpowIdHolder cpows(GetCPOWManager(), aCpows); ppm->ReceiveMessage(static_cast<nsIContentFrameMessageManager*>(ppm.get()), aMsg, true, &cloneData, &cpows, aPrincipal, aRetvals); } return true; }