AudioNode.connect(): First parameter should not be nullable
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 21 Oct 2016 16:09:28 +0000 (16:09 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 21 Oct 2016 16:09:28 +0000 (16:09 +0000)
https://bugs.webkit.org/show_bug.cgi?id=163773

Reviewed by Darin Adler.

Source/WebCore:

AudioNode.connect()'s first parameter should not be nullable:
- https://webaudio.github.io/web-audio-api/#idl-def-AudioNode.

We were throwing a SYNTAX_ERR when passing null, we now throw
a TypeError instead.

No new tests, updated existing test.

* Modules/webaudio/AudioBasicInspectorNode.cpp:
(WebCore::AudioBasicInspectorNode::connect):
* Modules/webaudio/AudioBasicInspectorNode.h:
* Modules/webaudio/AudioNode.cpp:
(WebCore::AudioNode::connect):
* Modules/webaudio/AudioNode.h:
* Modules/webaudio/AudioNode.idl:

LayoutTests:

Improve test coverage.

* webaudio/audionode-expected.txt:
* webaudio/audionode.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@207672 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/webaudio/audionode-expected.txt
LayoutTests/webaudio/audionode.html
Source/WebCore/ChangeLog
Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.cpp
Source/WebCore/Modules/webaudio/AudioBasicInspectorNode.h
Source/WebCore/Modules/webaudio/AudioNode.cpp
Source/WebCore/Modules/webaudio/AudioNode.h
Source/WebCore/Modules/webaudio/AudioNode.idl

index dced0ae..5ca6f3f 100644 (file)
@@ -1,3 +1,15 @@
+2016-10-21  Chris Dumez  <cdumez@apple.com>
+
+        AudioNode.connect(): First parameter should not be nullable
+        https://bugs.webkit.org/show_bug.cgi?id=163773
+
+        Reviewed by Darin Adler.
+
+        Improve test coverage.
+
+        * webaudio/audionode-expected.txt:
+        * webaudio/audionode.html:
+
 2016-10-21  Wenson Hsieh  <wenson_hsieh@apple.com>
 
         Implement InputEvent.getTargetRanges() for the input events spec
index cb33cf3..6ca4e34 100644 (file)
@@ -6,7 +6,8 @@ PASS Source AudioNode has no inputs.
 PASS Source AudioNode has one output.
 PASS Destination AudioNode has one input.
 PASS Destination AudioNode has no outputs.
-PASS connect() exception thrown for illegal destination AudioNode.
+PASS audioNode.connect(0, 0, 0) threw exception TypeError: Argument 1 ('destination') to AudioNode.connect must be an instance of AudioNode.
+PASS audioNode.connect(null, 0, 0) threw exception TypeError: Argument 1 ('destination') to AudioNode.connect must be an instance of AudioNode.
 PASS connect() exception thrown for illegal output index.
 PASS connect() exception thrown for illegal input index.
 PASS audioNode.connect(context.destination) succeeded.
index 4b714fc..c2939fc 100644 (file)
@@ -51,12 +51,8 @@ function runTest() {
 
     // Try calling connect() method with illegal values.
 
-    try {
-        audioNode.connect(0, 0, 0);
-        testFailed("connect() exception should be thrown for illegal destination AudioNode.");
-    } catch(e) {
-        testPassed("connect() exception thrown for illegal destination AudioNode.");
-    }
+    shouldThrowErrorName("audioNode.connect(0, 0, 0)", "TypeError");
+    shouldThrowErrorName("audioNode.connect(null, 0, 0)", "TypeError");
 
     try {
         audioNode.connect(context.destination, 5, 0);
index 3baefcb..4fc170d 100644 (file)
@@ -1,3 +1,26 @@
+2016-10-21  Chris Dumez  <cdumez@apple.com>
+
+        AudioNode.connect(): First parameter should not be nullable
+        https://bugs.webkit.org/show_bug.cgi?id=163773
+
+        Reviewed by Darin Adler.
+
+        AudioNode.connect()'s first parameter should not be nullable:
+        - https://webaudio.github.io/web-audio-api/#idl-def-AudioNode.
+
+        We were throwing a SYNTAX_ERR when passing null, we now throw
+        a TypeError instead.
+
+        No new tests, updated existing test.
+
+        * Modules/webaudio/AudioBasicInspectorNode.cpp:
+        (WebCore::AudioBasicInspectorNode::connect):
+        * Modules/webaudio/AudioBasicInspectorNode.h:
+        * Modules/webaudio/AudioNode.cpp:
+        (WebCore::AudioNode::connect):
+        * Modules/webaudio/AudioNode.h:
+        * Modules/webaudio/AudioNode.idl:
+
 2016-10-21  Wenson Hsieh  <wenson_hsieh@apple.com>
 
         Implement InputEvent.getTargetRanges() for the input events spec
index 9fa423d..27e56c4 100644 (file)
@@ -49,7 +49,7 @@ void AudioBasicInspectorNode::pullInputs(size_t framesToProcess)
     input(0)->pull(output(0)->bus(), framesToProcess);
 }
 
-ExceptionOr<void> AudioBasicInspectorNode::connect(AudioNode* destination, unsigned outputIndex, unsigned inputIndex)
+ExceptionOr<void> AudioBasicInspectorNode::connect(AudioNode& destination, unsigned outputIndex, unsigned inputIndex)
 {
     ASSERT(isMainThread());
 
index 85ca241..b86f1a3 100644 (file)
@@ -37,7 +37,7 @@ public:
 
 private:
     void pullInputs(size_t framesToProcess) override;
-    ExceptionOr<void> connect(AudioNode*, unsigned outputIndex, unsigned inputIndex) override;
+    ExceptionOr<void> connect(AudioNode&, unsigned outputIndex, unsigned inputIndex) override;
     ExceptionOr<void> disconnect(unsigned outputIndex) override;
     void checkNumberOfChannelsForInput(AudioNodeInput*) override;
 
index 2faa033..d0d4233 100644 (file)
@@ -123,25 +123,22 @@ AudioNodeOutput* AudioNode::output(unsigned i)
     return nullptr;
 }
 
-ExceptionOr<void> AudioNode::connect(AudioNode* destination, unsigned outputIndex, unsigned inputIndex)
+ExceptionOr<void> AudioNode::connect(AudioNode& destination, unsigned outputIndex, unsigned inputIndex)
 {
     ASSERT(isMainThread()); 
     AudioContext::AutoLocker locker(context());
 
-    if (!destination)
-        return Exception { SYNTAX_ERR };
-
     // Sanity check input and output indices.
     if (outputIndex >= numberOfOutputs())
         return Exception { INDEX_SIZE_ERR };
 
-    if (destination && inputIndex >= destination->numberOfInputs())
+    if (inputIndex >= destination.numberOfInputs())
         return Exception { INDEX_SIZE_ERR };
 
-    if (context() != destination->context())
+    if (context() != destination.context())
         return Exception { SYNTAX_ERR };
 
-    auto* input = destination->input(inputIndex);
+    auto* input = destination.input(inputIndex);
     auto* output = this->output(outputIndex);
     input->connect(output);
 
@@ -151,22 +148,19 @@ ExceptionOr<void> AudioNode::connect(AudioNode* destination, unsigned outputInde
     return { };
 }
 
-ExceptionOr<void> AudioNode::connect(AudioParam* param, unsigned outputIndex)
+ExceptionOr<void> AudioNode::connect(AudioParam& param, unsigned outputIndex)
 {
     ASSERT(isMainThread());
     AudioContext::AutoLocker locker(context());
 
-    if (!param)
-        return Exception { SYNTAX_ERR };
-
     if (outputIndex >= numberOfOutputs())
         return Exception { INDEX_SIZE_ERR };
 
-    if (context() != param->context())
+    if (context() != param.context())
         return Exception { SYNTAX_ERR };
 
     auto* output = this->output(outputIndex);
-    param->connect(output);
+    param.connect(output);
 
     return { };
 }
index 95e6b29..72f8a4a 100644 (file)
@@ -121,8 +121,8 @@ public:
     AudioNodeOutput* output(unsigned);
 
     // Called from main thread by corresponding JavaScript methods.
-    virtual ExceptionOr<void> connect(AudioNode*, unsigned outputIndex, unsigned inputIndex);
-    ExceptionOr<void> connect(AudioParam*, unsigned outputIndex);
+    virtual ExceptionOr<void> connect(AudioNode&, unsigned outputIndex, unsigned inputIndex);
+    ExceptionOr<void> connect(AudioParam&, unsigned outputIndex);
     virtual ExceptionOr<void> disconnect(unsigned outputIndex);
 
     virtual float sampleRate() const { return m_sampleRate; }
index e6418ee..2ba0500 100644 (file)
@@ -34,7 +34,7 @@
     [SetterMayThrowException] attribute DOMString channelCountMode;
     [SetterMayThrowException] attribute DOMString channelInterpretation;
 
-    [MayThrowException] void connect(AudioNode? destination, optional unsigned long output = 0, optional unsigned long input = 0);
-    [MayThrowException] void connect(AudioParam? destination, optional unsigned long output = 0);
+    [MayThrowException] void connect(AudioNode destination, optional unsigned long output = 0, optional unsigned long input = 0);
+    [MayThrowException] void connect(AudioParam destination, optional unsigned long output = 0);
     [MayThrowException] void disconnect(optional unsigned long output = 0);
 };