gecko-dev/dom/media/gmp/GMPAudioDecoderParent.h
Chris Pearce 8b965f3eac Bug 1267918 - Add GMPCrashHelperHolder to automatically disconnect crash helpers on actor destory. r=gerald
Disconnecting the GMPCrashHelpers at the right time is hard, because in the
crashing case we're all shutdown before the GMPCrashHelpers can be invoked to
help handle the crash report. So add a class to help the helpers;
GMPCrashHelperHolder. This composes into the GMP content protocol actors, to
help them disconnect the crash helpers at the right time. See the comment in
GMPCrashHelperHolder for the details.


MozReview-Commit-ID: E5rE6e5Jues

--HG--
extra : rebase_source : f688bf727f23f773eb995611cec6412ebf021029
2016-06-29 11:42:00 +12:00

73 lines
2.2 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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/. */
#ifndef GMPAudioDecoderParent_h_
#define GMPAudioDecoderParent_h_
#include "mozilla/RefPtr.h"
#include "gmp-audio-decode.h"
#include "gmp-audio-codec.h"
#include "mozilla/gmp/PGMPAudioDecoderParent.h"
#include "GMPMessageUtils.h"
#include "GMPAudioDecoderProxy.h"
#include "GMPCrashHelperHolder.h"
namespace mozilla {
namespace gmp {
class GMPContentParent;
class GMPAudioDecoderParent final : public GMPAudioDecoderProxy
, public PGMPAudioDecoderParent
, public GMPCrashHelperHolder
{
public:
NS_INLINE_DECL_REFCOUNTING(GMPAudioDecoderParent)
explicit GMPAudioDecoderParent(GMPContentParent *aPlugin);
nsresult Shutdown();
// GMPAudioDecoderProxy
nsresult InitDecode(GMPAudioCodecType aCodecType,
uint32_t aChannelCount,
uint32_t aBitsPerChannel,
uint32_t aSamplesPerSecond,
nsTArray<uint8_t>& aExtraData,
GMPAudioDecoderCallbackProxy* aCallback) override;
nsresult Decode(GMPAudioSamplesImpl& aInput) override;
nsresult Reset() override;
nsresult Drain() override;
nsresult Close() override;
private:
~GMPAudioDecoderParent();
// PGMPAudioDecoderParent
void ActorDestroy(ActorDestroyReason aWhy) override;
bool RecvDecoded(const GMPAudioDecodedSampleData& aDecoded) override;
bool RecvInputDataExhausted() override;
bool RecvDrainComplete() override;
bool RecvResetComplete() override;
bool RecvError(const GMPErr& aError) override;
bool RecvShutdown() override;
bool Recv__delete__() override;
void UnblockResetAndDrain();
bool mIsOpen;
bool mShuttingDown;
bool mActorDestroyed;
bool mIsAwaitingResetComplete;
bool mIsAwaitingDrainComplete;
RefPtr<GMPContentParent> mPlugin;
GMPAudioDecoderCallbackProxy* mCallback;
};
} // namespace gmp
} // namespace mozilla
#endif // GMPAudioDecoderParent_h_