bug 1223670 replace public constructors with fallible factory methods r=baku

--HG--
extra : rebase_source : ae9bc2fbaf1fd547c7355b642b45b9ef062cff25
This commit is contained in:
Karl Tomlinson 2015-12-10 11:25:54 -05:00
Родитель 74f3948a2b
Коммит 4c7f0b9c22
7 изменённых файлов: 52 добавлений и 32 удалений

Просмотреть файл

@ -365,9 +365,7 @@ AudioContext::CreateMediaElementSource(HTMLMediaElement& aMediaElement,
if (aRv.Failed()) {
return nullptr;
}
RefPtr<MediaElementAudioSourceNode> mediaElementAudioSourceNode =
new MediaElementAudioSourceNode(this, stream);
return mediaElementAudioSourceNode.forget();
return MediaElementAudioSourceNode::Create(this, stream, aRv);
}
already_AddRefed<MediaStreamAudioSourceNode>
@ -383,9 +381,7 @@ AudioContext::CreateMediaStreamSource(DOMMediaStream& aMediaStream,
return nullptr;
}
RefPtr<MediaStreamAudioSourceNode> mediaStreamAudioSourceNode =
new MediaStreamAudioSourceNode(this, &aMediaStream);
return mediaStreamAudioSourceNode.forget();
return MediaStreamAudioSourceNode::Create(this, &aMediaStream, aRv);
}
already_AddRefed<GainNode>

Просмотреть файл

@ -54,9 +54,6 @@ AudioNode::AudioNode(AudioContext* aContext,
, mChannelInterpretation(aChannelInterpretation)
, mId(gId++)
, mPassThrough(false)
#ifdef DEBUG
, mDemiseNotified(false)
#endif
{
MOZ_ASSERT(aContext);
DOMEventTargetHelper::BindToOwner(aContext->GetParentObject());
@ -68,10 +65,8 @@ AudioNode::~AudioNode()
MOZ_ASSERT(mInputNodes.IsEmpty());
MOZ_ASSERT(mOutputNodes.IsEmpty());
MOZ_ASSERT(mOutputParams.IsEmpty());
#ifdef DEBUG
MOZ_ASSERT(mDemiseNotified,
MOZ_ASSERT(!mStream,
"The webaudio-node-demise notification must have been sent");
#endif
if (mContext) {
mContext->UnregisterNode(this);
}
@ -390,9 +385,6 @@ AudioNode::DestroyMediaStream()
id.AppendPrintf("%u", mId);
obs->NotifyObservers(nullptr, "webaudio-node-demise", id.get());
}
#ifdef DEBUG
mDemiseNotified = true;
#endif
}
}

Просмотреть файл

@ -256,11 +256,6 @@ private:
// Whether the node just passes through its input. This is a devtools API that
// only works for some node types.
bool mPassThrough;
#ifdef DEBUG
// In debug builds, check to make sure that the node demise notification has
// been properly sent before the node is destroyed.
bool mDemiseNotified;
#endif
};
} // namespace dom

Просмотреть файл

@ -10,12 +10,26 @@
namespace mozilla {
namespace dom {
MediaElementAudioSourceNode::MediaElementAudioSourceNode(AudioContext* aContext,
DOMMediaStream* aStream)
: MediaStreamAudioSourceNode(aContext, aStream)
MediaElementAudioSourceNode::MediaElementAudioSourceNode(AudioContext* aContext)
: MediaStreamAudioSourceNode(aContext)
{
}
/* static */ already_AddRefed<MediaElementAudioSourceNode>
MediaElementAudioSourceNode::Create(AudioContext* aContext,
DOMMediaStream* aStream, ErrorResult& aRv)
{
RefPtr<MediaElementAudioSourceNode> node =
new MediaElementAudioSourceNode(aContext);
node->Init(aStream, aRv);
if (aRv.Failed()) {
return nullptr;
}
return node.forget();
}
JSObject*
MediaElementAudioSourceNode::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
{

Просмотреть файл

@ -15,8 +15,8 @@ namespace dom {
class MediaElementAudioSourceNode final : public MediaStreamAudioSourceNode
{
public:
MediaElementAudioSourceNode(AudioContext* aContext,
DOMMediaStream* aStream);
static already_AddRefed<MediaElementAudioSourceNode>
Create(AudioContext* aContext, DOMMediaStream* aStream, ErrorResult& aRv);
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
@ -29,6 +29,8 @@ public:
{
return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf);
}
private:
explicit MediaElementAudioSourceNode(AudioContext* aContext);
};
} // namespace dom

Просмотреть файл

@ -31,16 +31,35 @@ NS_INTERFACE_MAP_END_INHERITING(AudioNode)
NS_IMPL_ADDREF_INHERITED(MediaStreamAudioSourceNode, AudioNode)
NS_IMPL_RELEASE_INHERITED(MediaStreamAudioSourceNode, AudioNode)
MediaStreamAudioSourceNode::MediaStreamAudioSourceNode(AudioContext* aContext,
DOMMediaStream* aMediaStream)
MediaStreamAudioSourceNode::MediaStreamAudioSourceNode(AudioContext* aContext)
: AudioNode(aContext,
2,
ChannelCountMode::Max,
ChannelInterpretation::Speakers),
mInputStream(aMediaStream)
ChannelInterpretation::Speakers)
{
}
/* static */ already_AddRefed<MediaStreamAudioSourceNode>
MediaStreamAudioSourceNode::Create(AudioContext* aContext,
DOMMediaStream* aStream, ErrorResult& aRv)
{
RefPtr<MediaStreamAudioSourceNode> node =
new MediaStreamAudioSourceNode(aContext);
node->Init(aStream, aRv);
if (aRv.Failed()) {
return nullptr;
}
return node.forget();
}
void
MediaStreamAudioSourceNode::Init(DOMMediaStream* aMediaStream, ErrorResult& aRv)
{
mInputStream = aMediaStream;
AudioNodeEngine* engine = new MediaStreamAudioSourceNodeEngine(this);
mStream = AudioNodeExternalInputStream::Create(aContext->Graph(), engine);
mStream = AudioNodeExternalInputStream::Create(Context()->Graph(), engine);
ProcessedMediaStream* outputStream = static_cast<ProcessedMediaStream*>(mStream.get());
mInputPort = outputStream->AllocateInputPort(aMediaStream->GetPlaybackStream());
mInputStream->AddConsumerToKeepAlive(static_cast<nsIDOMEventTarget*>(this));

Просмотреть файл

@ -44,8 +44,8 @@ class MediaStreamAudioSourceNode : public AudioNode,
public DOMMediaStream::PrincipalChangeObserver
{
public:
MediaStreamAudioSourceNode(AudioContext* aContext,
DOMMediaStream* aMediaStream);
static already_AddRefed<MediaStreamAudioSourceNode>
Create(AudioContext* aContext, DOMMediaStream* aStream, ErrorResult& aRv);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MediaStreamAudioSourceNode, AudioNode)
@ -67,6 +67,8 @@ public:
virtual void PrincipalChanged(DOMMediaStream* aMediaStream) override;
protected:
explicit MediaStreamAudioSourceNode(AudioContext* aContext);
void Init(DOMMediaStream* aMediaStream, ErrorResult& aRv);
virtual ~MediaStreamAudioSourceNode();
private: