Bug 1218694 - Return the AudioNode connected to when calling AudioNode.connect(). r=smaug

--HG--
extra : rebase_source : c5a58a51f1f43aad2fe64d872009dee88c564503
This commit is contained in:
Paul Adenot 2015-10-28 13:54:35 +09:00
Родитель 2a85ac5257
Коммит b42848e60e
4 изменённых файлов: 13 добавлений и 10 удалений

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

@ -177,25 +177,25 @@ AudioNode::DisconnectFromGraph()
DestroyMediaStream(); DestroyMediaStream();
} }
void AudioNode*
AudioNode::Connect(AudioNode& aDestination, uint32_t aOutput, AudioNode::Connect(AudioNode& aDestination, uint32_t aOutput,
uint32_t aInput, ErrorResult& aRv) uint32_t aInput, ErrorResult& aRv)
{ {
if (aOutput >= NumberOfOutputs() || if (aOutput >= NumberOfOutputs() ||
aInput >= aDestination.NumberOfInputs()) { aInput >= aDestination.NumberOfInputs()) {
aRv.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR); aRv.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR);
return; return nullptr;
} }
if (Context() != aDestination.Context()) { if (Context() != aDestination.Context()) {
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR); aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return; return nullptr;
} }
if (FindIndexOfNodeWithPorts(aDestination.mInputNodes, this, aInput, aOutput) != if (FindIndexOfNodeWithPorts(aDestination.mInputNodes, this, aInput, aOutput) !=
nsTArray<AudioNode::InputNode>::NoIndex) { nsTArray<AudioNode::InputNode>::NoIndex) {
// connection already exists. // connection already exists.
return; return &aDestination;
} }
// The MediaStreamGraph will handle cycle detection. We don't need to do it // The MediaStreamGraph will handle cycle detection. We don't need to do it
@ -220,6 +220,8 @@ AudioNode::Connect(AudioNode& aDestination, uint32_t aOutput,
// This connection may have connected a panner and a source. // This connection may have connected a panner and a source.
Context()->UpdatePannerSource(); Context()->UpdatePannerSource();
return &aDestination;
} }
void void

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

@ -89,8 +89,8 @@ public:
return mContext; return mContext;
} }
virtual void Connect(AudioNode& aDestination, uint32_t aOutput, virtual AudioNode* Connect(AudioNode& aDestination, uint32_t aOutput,
uint32_t aInput, ErrorResult& aRv); uint32_t aInput, ErrorResult& aRv);
virtual void Connect(AudioParam& aDestination, uint32_t aOutput, virtual void Connect(AudioParam& aDestination, uint32_t aOutput,
ErrorResult& aRv); ErrorResult& aRv);

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

@ -33,13 +33,14 @@ public:
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
virtual void Connect(AudioNode& aDestination, uint32_t aOutput, virtual AudioNode* Connect(AudioNode& aDestination, uint32_t aOutput,
uint32_t aInput, ErrorResult& aRv) override uint32_t aInput, ErrorResult& aRv) override
{ {
AudioNode::Connect(aDestination, aOutput, aInput, aRv); AudioNode* node = AudioNode::Connect(aDestination, aOutput, aInput, aRv);
if (!aRv.Failed()) { if (!aRv.Failed()) {
UpdateConnectedStatus(); UpdateConnectedStatus();
} }
return node;
} }
virtual void Connect(AudioParam& aDestination, uint32_t aOutput, virtual void Connect(AudioParam& aDestination, uint32_t aOutput,

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

@ -24,7 +24,7 @@ enum ChannelInterpretation {
interface AudioNode : EventTarget { interface AudioNode : EventTarget {
[Throws] [Throws]
void connect(AudioNode destination, optional unsigned long output = 0, optional unsigned long input = 0); AudioNode connect(AudioNode destination, optional unsigned long output = 0, optional unsigned long input = 0);
[Throws] [Throws]
void connect(AudioParam destination, optional unsigned long output = 0); void connect(AudioParam destination, optional unsigned long output = 0);
[Throws] [Throws]