gecko-dev/dom/presentation/ipc/PresentationBuilderParent.cpp
Sylvestre Ledru 265e672179 Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset

--HG--
extra : amend_source : 4d301d3b0b8711c4692392aa76088ba7fd7d1022
2018-11-30 11:46:48 +01:00

229 lines
6.4 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "DCPresentationChannelDescription.h"
#include "PresentationBuilderParent.h"
#include "PresentationSessionInfo.h"
namespace mozilla {
namespace dom {
namespace {
class PresentationSessionTransportIPC final
: public nsIPresentationSessionTransport {
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIPRESENTATIONSESSIONTRANSPORT
PresentationSessionTransportIPC(PresentationParent* aParent,
const nsAString& aSessionId, uint8_t aRole)
: mParent(aParent), mSessionId(aSessionId), mRole(aRole) {
MOZ_ASSERT(mParent);
}
private:
virtual ~PresentationSessionTransportIPC() = default;
RefPtr<PresentationParent> mParent;
nsString mSessionId;
uint8_t mRole;
};
NS_IMPL_ISUPPORTS(PresentationSessionTransportIPC,
nsIPresentationSessionTransport)
NS_IMETHODIMP
PresentationSessionTransportIPC::GetCallback(
nsIPresentationSessionTransportCallback** aCallback) {
return NS_OK;
}
NS_IMETHODIMP
PresentationSessionTransportIPC::SetCallback(
nsIPresentationSessionTransportCallback* aCallback) {
if (aCallback) {
aCallback->NotifyTransportReady();
}
return NS_OK;
}
NS_IMETHODIMP
PresentationSessionTransportIPC::GetSelfAddress(nsINetAddr** aSelfAddress) {
MOZ_ASSERT(false, "Not expected.");
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP
PresentationSessionTransportIPC::EnableDataNotification() { return NS_OK; }
NS_IMETHODIMP
PresentationSessionTransportIPC::Send(const nsAString& aData) { return NS_OK; }
NS_IMETHODIMP
PresentationSessionTransportIPC::SendBinaryMsg(const nsACString& aData) {
return NS_OK;
}
NS_IMETHODIMP
PresentationSessionTransportIPC::SendBlob(Blob* aBlob) { return NS_OK; }
NS_IMETHODIMP
PresentationSessionTransportIPC::Close(nsresult aReason) {
if (NS_WARN_IF(!mParent->SendNotifyCloseSessionTransport(mSessionId, mRole,
aReason))) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}
} // anonymous namespace
NS_IMPL_ISUPPORTS(PresentationBuilderParent,
nsIPresentationSessionTransportBuilder,
nsIPresentationDataChannelSessionTransportBuilder)
PresentationBuilderParent::PresentationBuilderParent(
PresentationParent* aParent)
: mParent(aParent) {}
PresentationBuilderParent::~PresentationBuilderParent() {
if (mNeedDestroyActor) {
Unused << NS_WARN_IF(!Send__delete__(this));
}
}
NS_IMETHODIMP
PresentationBuilderParent::BuildDataChannelTransport(
uint8_t aRole, mozIDOMWindow* aWindow, /* unused */
nsIPresentationSessionTransportBuilderListener* aListener) {
mBuilderListener = aListener;
RefPtr<PresentationSessionInfo> info =
static_cast<PresentationSessionInfo*>(aListener);
nsAutoString sessionId(info->GetSessionId());
if (NS_WARN_IF(!mParent->SendPPresentationBuilderConstructor(this, sessionId,
aRole))) {
return NS_ERROR_FAILURE;
}
mIPCSessionTransport =
new PresentationSessionTransportIPC(mParent, sessionId, aRole);
mNeedDestroyActor = true;
mParent = nullptr;
return NS_OK;
}
NS_IMETHODIMP
PresentationBuilderParent::OnIceCandidate(const nsAString& aCandidate) {
if (NS_WARN_IF(!SendOnIceCandidate(nsString(aCandidate)))) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}
NS_IMETHODIMP
PresentationBuilderParent::OnOffer(
nsIPresentationChannelDescription* aDescription) {
nsAutoString SDP;
nsresult rv = aDescription->GetDataChannelSDP(SDP);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
if (NS_WARN_IF(!SendOnOffer(SDP))) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}
NS_IMETHODIMP
PresentationBuilderParent::OnAnswer(
nsIPresentationChannelDescription* aDescription) {
nsAutoString SDP;
nsresult rv = aDescription->GetDataChannelSDP(SDP);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
if (NS_WARN_IF(!SendOnAnswer(SDP))) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}
NS_IMETHODIMP
PresentationBuilderParent::NotifyDisconnected(nsresult aReason) {
return NS_OK;
}
void PresentationBuilderParent::ActorDestroy(ActorDestroyReason aWhy) {
mNeedDestroyActor = false;
mParent = nullptr;
mBuilderListener = nullptr;
}
mozilla::ipc::IPCResult PresentationBuilderParent::RecvSendOffer(
const nsString& aSDP) {
RefPtr<DCPresentationChannelDescription> description =
new DCPresentationChannelDescription(aSDP);
if (NS_WARN_IF(!mBuilderListener ||
NS_FAILED(mBuilderListener->SendOffer(description)))) {
return IPC_FAIL_NO_REASON(this);
}
return IPC_OK();
}
mozilla::ipc::IPCResult PresentationBuilderParent::RecvSendAnswer(
const nsString& aSDP) {
RefPtr<DCPresentationChannelDescription> description =
new DCPresentationChannelDescription(aSDP);
if (NS_WARN_IF(!mBuilderListener ||
NS_FAILED(mBuilderListener->SendAnswer(description)))) {
return IPC_FAIL_NO_REASON(this);
}
return IPC_OK();
}
mozilla::ipc::IPCResult PresentationBuilderParent::RecvSendIceCandidate(
const nsString& aCandidate) {
if (NS_WARN_IF(!mBuilderListener ||
NS_FAILED(mBuilderListener->SendIceCandidate(aCandidate)))) {
return IPC_FAIL_NO_REASON(this);
}
return IPC_OK();
}
mozilla::ipc::IPCResult PresentationBuilderParent::RecvClose(
const nsresult& aReason) {
if (NS_WARN_IF(!mBuilderListener ||
NS_FAILED(mBuilderListener->Close(aReason)))) {
return IPC_FAIL_NO_REASON(this);
}
return IPC_OK();
}
// Delegate to nsIPresentationSessionTransportBuilderListener
mozilla::ipc::IPCResult PresentationBuilderParent::RecvOnSessionTransport() {
RefPtr<PresentationBuilderParent> kungFuDeathGrip = this;
Unused << NS_WARN_IF(
!mBuilderListener ||
NS_FAILED(mBuilderListener->OnSessionTransport(mIPCSessionTransport)));
return IPC_OK();
}
mozilla::ipc::IPCResult PresentationBuilderParent::RecvOnSessionTransportError(
const nsresult& aReason) {
if (NS_WARN_IF(!mBuilderListener ||
NS_FAILED(mBuilderListener->OnError(aReason)))) {
return IPC_FAIL_NO_REASON(this);
}
return IPC_OK();
}
} // namespace dom
} // namespace mozilla