Title: [265266] trunk
Revision
265266
Author
cdu...@apple.com
Date
2020-08-04 16:01:49 -0700 (Tue, 04 Aug 2020)

Log Message

Align AudioListener with the W3C specification
https://bugs.webkit.org/show_bug.cgi?id=215134

Reviewed by Geoffrey Garen.

LayoutTests/imported/w3c:

Rebaseline WPT tests now that more checks are passing.

* web-platform-tests/webaudio/historical-expected.txt:
* web-platform-tests/webaudio/idlharness.https.window-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-automation-position-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/pannernode-basic-expected.txt:

Source/WebCore:

Align AudioListener with the W3C specification:
- https://webaudio.github.io/web-audio-api/#audiolistener

Note that the prefixed API still behaves the way it used to. I have maintained
the old version of the AudioListener API by moving it to a new
WebKitAudioListener interface.

No new tests, rebaselined existing tests.

* CMakeLists.txt:
* DerivedSources-input.xcfilelist:
* DerivedSources-output.xcfilelist:
* DerivedSources.make:
* Modules/webaudio/AudioListener.cpp:
(WebCore::AudioListener::AudioListener):
(WebCore::AudioListener::setPosition):
(WebCore::AudioListener::position const):
(WebCore::AudioListener::setOrientation):
(WebCore::AudioListener::orientation const):
(WebCore::AudioListener::upVector const):
* Modules/webaudio/AudioListener.h:
(WebCore::AudioListener::create):
(WebCore::AudioListener::positionX):
(WebCore::AudioListener::positionY):
(WebCore::AudioListener::positionZ):
(WebCore::AudioListener::forwardX):
(WebCore::AudioListener::forwardY):
(WebCore::AudioListener::forwardZ):
(WebCore::AudioListener::upX):
(WebCore::AudioListener::upY):
(WebCore::AudioListener::upZ):
* Modules/webaudio/AudioListener.idl:
* Modules/webaudio/BaseAudioContext.cpp:
(WebCore::BaseAudioContext::constructCommon):
* Modules/webaudio/PannerNode.cpp:
(WebCore::PannerNode::dopplerRate):
* Modules/webaudio/WebKitAudioContext.h:
(WebCore::WebKitAudioContext::listener):
* Modules/webaudio/WebKitAudioContext.idl:
* Modules/webaudio/WebKitAudioListener.h: Copied from Source/WebCore/Modules/webaudio/AudioListener.h.
* Modules/webaudio/WebKitAudioListener.idl: Copied from Source/WebCore/Modules/webaudio/AudioListener.idl.
* Modules/webaudio/WebKitAudioPannerNode.cpp:
(WebCore::WebKitAudioPannerNode::listener):
* Modules/webaudio/WebKitAudioPannerNode.h:
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/WebCoreBuiltinNames.h:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (265265 => 265266)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2020-08-04 23:01:49 UTC (rev 265266)
@@ -1,5 +1,21 @@
 2020-08-04  Chris Dumez  <cdu...@apple.com>
 
+        Align AudioListener with the W3C specification
+        https://bugs.webkit.org/show_bug.cgi?id=215134
+
+        Reviewed by Geoffrey Garen.
+
+        Rebaseline WPT tests now that more checks are passing.
+
+        * web-platform-tests/webaudio/historical-expected.txt:
+        * web-platform-tests/webaudio/idlharness.https.window-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-automation-position-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/pannernode-basic-expected.txt:
+
+2020-08-04  Chris Dumez  <cdu...@apple.com>
+
         Align AudioBufferSourceNode's start() / stop() with the specification
         https://bugs.webkit.org/show_bug.cgi?id=215130
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/historical-expected.txt (265265 => 265266)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/historical-expected.txt	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/historical-expected.txt	2020-08-04 23:01:49 UTC (rev 265266)
@@ -2,8 +2,8 @@
 FAIL webkitAudioContext interface should not exist assert_false: expected false got true
 FAIL webkitAudioPannerNode interface should not exist assert_false: expected false got true
 FAIL webkitOfflineAudioContext interface should not exist assert_false: expected false got true
-FAIL dopplerFactor member should not exist on the AudioListener. assert_false: expected false got true
-FAIL speedOfSound member should not exist on the AudioListener. assert_false: expected false got true
-FAIL setVelocity member should not exist on the AudioListener. assert_false: expected false got true
+PASS dopplerFactor member should not exist on the AudioListener. 
+PASS speedOfSound member should not exist on the AudioListener. 
+PASS setVelocity member should not exist on the AudioListener. 
 PASS setVelocity should not exist on PannerNodes. 
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/idlharness.https.window-expected.txt (265265 => 265266)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/idlharness.https.window-expected.txt	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/idlharness.https.window-expected.txt	2020-08-04 23:01:49 UTC (rev 265266)
@@ -406,28 +406,28 @@
 PASS AudioListener interface: existence and properties of interface prototype object 
 PASS AudioListener interface: existence and properties of interface prototype object's "constructor" property 
 PASS AudioListener interface: existence and properties of interface prototype object's @@unscopables property 
-FAIL AudioListener interface: attribute positionX assert_true: The prototype object must have a property "positionX" expected true got false
-FAIL AudioListener interface: attribute positionY assert_true: The prototype object must have a property "positionY" expected true got false
-FAIL AudioListener interface: attribute positionZ assert_true: The prototype object must have a property "positionZ" expected true got false
-FAIL AudioListener interface: attribute forwardX assert_true: The prototype object must have a property "forwardX" expected true got false
-FAIL AudioListener interface: attribute forwardY assert_true: The prototype object must have a property "forwardY" expected true got false
-FAIL AudioListener interface: attribute forwardZ assert_true: The prototype object must have a property "forwardZ" expected true got false
-FAIL AudioListener interface: attribute upX assert_true: The prototype object must have a property "upX" expected true got false
-FAIL AudioListener interface: attribute upY assert_true: The prototype object must have a property "upY" expected true got false
-FAIL AudioListener interface: attribute upZ assert_true: The prototype object must have a property "upZ" expected true got false
+PASS AudioListener interface: attribute positionX 
+PASS AudioListener interface: attribute positionY 
+PASS AudioListener interface: attribute positionZ 
+PASS AudioListener interface: attribute forwardX 
+PASS AudioListener interface: attribute forwardY 
+PASS AudioListener interface: attribute forwardZ 
+PASS AudioListener interface: attribute upX 
+PASS AudioListener interface: attribute upY 
+PASS AudioListener interface: attribute upZ 
 PASS AudioListener interface: operation setPosition(float, float, float) 
 PASS AudioListener interface: operation setOrientation(float, float, float, float, float, float) 
 PASS AudioListener must be primary interface of context.listener 
 PASS Stringification of context.listener 
-FAIL AudioListener interface: context.listener must inherit property "positionX" with the proper type assert_inherits: property "positionX" not found in prototype chain
-FAIL AudioListener interface: context.listener must inherit property "positionY" with the proper type assert_inherits: property "positionY" not found in prototype chain
-FAIL AudioListener interface: context.listener must inherit property "positionZ" with the proper type assert_inherits: property "positionZ" not found in prototype chain
-FAIL AudioListener interface: context.listener must inherit property "forwardX" with the proper type assert_inherits: property "forwardX" not found in prototype chain
-FAIL AudioListener interface: context.listener must inherit property "forwardY" with the proper type assert_inherits: property "forwardY" not found in prototype chain
-FAIL AudioListener interface: context.listener must inherit property "forwardZ" with the proper type assert_inherits: property "forwardZ" not found in prototype chain
-FAIL AudioListener interface: context.listener must inherit property "upX" with the proper type assert_inherits: property "upX" not found in prototype chain
-FAIL AudioListener interface: context.listener must inherit property "upY" with the proper type assert_inherits: property "upY" not found in prototype chain
-FAIL AudioListener interface: context.listener must inherit property "upZ" with the proper type assert_inherits: property "upZ" not found in prototype chain
+PASS AudioListener interface: context.listener must inherit property "positionX" with the proper type 
+PASS AudioListener interface: context.listener must inherit property "positionY" with the proper type 
+PASS AudioListener interface: context.listener must inherit property "positionZ" with the proper type 
+PASS AudioListener interface: context.listener must inherit property "forwardX" with the proper type 
+PASS AudioListener interface: context.listener must inherit property "forwardY" with the proper type 
+PASS AudioListener interface: context.listener must inherit property "forwardZ" with the proper type 
+PASS AudioListener interface: context.listener must inherit property "upX" with the proper type 
+PASS AudioListener interface: context.listener must inherit property "upY" with the proper type 
+PASS AudioListener interface: context.listener must inherit property "upZ" with the proper type 
 PASS AudioListener interface: context.listener must inherit property "setPosition(float, float, float)" with the proper type 
 PASS AudioListener interface: calling setPosition(float, float, float) on context.listener with too few arguments must throw TypeError 
 PASS AudioListener interface: context.listener must inherit property "setOrientation(float, float, float, float, float, float)" with the proper type 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner-expected.txt (265265 => 265266)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner-expected.txt	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner-expected.txt	2020-08-04 23:01:49 UTC (rev 265266)
@@ -2,7 +2,7 @@
 PASS # AUDIT TASK RUNNER STARTED. 
 PASS Executing "initialize" 
 PASS Executing "invalid constructor" 
-FAIL Executing "default constructor" promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'context.listener[item.name].value')"
+PASS Executing "default constructor" 
 PASS Executing "test AudioNodeOptions" 
 PASS Executing "constructor with options" 
 PASS Audit report 
@@ -36,6 +36,16 @@
 PASS   node0.coneInnerAngle is equal to 360. 
 PASS   node0.coneOuterAngle is equal to 360. 
 PASS   node0.coneOuterGain is equal to 0. 
+PASS   context.listener.positionX.value is equal to 0. 
+PASS   context.listener.positionY.value is equal to 0. 
+PASS   context.listener.positionZ.value is equal to 0. 
+PASS   context.listener.forwardX.value is equal to 0. 
+PASS   context.listener.forwardY.value is equal to 0. 
+PASS   context.listener.forwardZ.value is equal to -1. 
+PASS   context.listener.upX.value is equal to 0. 
+PASS   context.listener.upY.value is equal to 1. 
+PASS   context.listener.upZ.value is equal to 0. 
+PASS < [default constructor] All assertions passed. (total 30 assertions) 
 PASS > [test AudioNodeOptions]  
 PASS   node1 = new PannerNode(c, {"channelCount":1}) did not throw an exception. 
 PASS   node1.channelCount is equal to 1. 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic-expected.txt (265265 => 265266)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic-expected.txt	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-automation-basic-expected.txt	2020-08-04 23:01:49 UTC (rev 265266)
@@ -8,12 +8,12 @@
 PASS Executing "Mono panner.positionY" 
 PASS Executing "Stereo panner.positionZ" 
 PASS Executing "Mono panner.positionZ" 
-FAIL Executing "Stereo listener.positionX" promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'pannerSetter.value = 1')"
-FAIL Executing "Mono listener.positionX" promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'pannerSetter.value = 1')"
-FAIL Executing "Stereo listener.positionY" promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'pannerSetter.value = 1')"
-FAIL Executing "Mono listener.positionY" promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'pannerSetter.value = 1')"
-FAIL Executing "Stereo listener.positionZ" promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'pannerSetter.value = 1')"
-FAIL Executing "Mono listener.positionZ" promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'pannerSetter.value = 1')"
+PASS Executing "Stereo listener.positionX" 
+PASS Executing "Mono listener.positionX" 
+PASS Executing "Stereo listener.positionY" 
+PASS Executing "Mono listener.positionY" 
+PASS Executing "Stereo listener.positionZ" 
+PASS Executing "Mono listener.positionZ" 
 PASS Executing "setPosition" 
 PASS Executing "orientation setter" 
 PASS Executing "forward setter" 
@@ -68,11 +68,53 @@
 FAIL X Mono panner.positionZ: Output at frame 128 channel 1 should not be equal to 0. Got 0. assert_true: expected true got false
 FAIL < [Mono panner.positionZ] 2 out of 6 assertions were failed. assert_true: expected true got false
 PASS > [Stereo listener.positionX]  
+PASS   Stereo listener.positionX.value frame [0, 128) channel 0 contains only the constant 0. 
+PASS   Stereo listener.positionX.value frame [0, 128) channel 1 contains only the constant 0. 
+PASS   Stereo listener.positionX.value frame [128, 256) channel 0 contains only the constant 0. 
+PASS   Stereo listener.positionX.value frame [128, 256) channel 1 contains only the constant 0. 
+FAIL X Stereo listener.positionX: Output at frame 128 channel 0 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL X Stereo listener.positionX: Output at frame 128 channel 1 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL < [Stereo listener.positionX] 2 out of 6 assertions were failed. assert_true: expected true got false
 PASS > [Mono listener.positionX]  
+PASS   Mono listener.positionX.value frame [0, 128) channel 0 contains only the constant 0. 
+PASS   Mono listener.positionX.value frame [0, 128) channel 1 contains only the constant 0. 
+PASS   Mono listener.positionX.value frame [128, 256) channel 0 contains only the constant 0. 
+PASS   Mono listener.positionX.value frame [128, 256) channel 1 contains only the constant 0. 
+FAIL X Mono listener.positionX: Output at frame 128 channel 0 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL X Mono listener.positionX: Output at frame 128 channel 1 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL < [Mono listener.positionX] 2 out of 6 assertions were failed. assert_true: expected true got false
 PASS > [Stereo listener.positionY]  
+PASS   Stereo listener.positionY.value frame [0, 128) channel 0 contains only the constant 0. 
+PASS   Stereo listener.positionY.value frame [0, 128) channel 1 contains only the constant 0. 
+PASS   Stereo listener.positionY.value frame [128, 256) channel 0 contains only the constant 0. 
+PASS   Stereo listener.positionY.value frame [128, 256) channel 1 contains only the constant 0. 
+FAIL X Stereo listener.positionY: Output at frame 128 channel 0 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL X Stereo listener.positionY: Output at frame 128 channel 1 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL < [Stereo listener.positionY] 2 out of 6 assertions were failed. assert_true: expected true got false
 PASS > [Mono listener.positionY]  
+PASS   Mono listener.positionY.value frame [0, 128) channel 0 contains only the constant 0. 
+PASS   Mono listener.positionY.value frame [0, 128) channel 1 contains only the constant 0. 
+PASS   Mono listener.positionY.value frame [128, 256) channel 0 contains only the constant 0. 
+PASS   Mono listener.positionY.value frame [128, 256) channel 1 contains only the constant 0. 
+FAIL X Mono listener.positionY: Output at frame 128 channel 0 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL X Mono listener.positionY: Output at frame 128 channel 1 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL < [Mono listener.positionY] 2 out of 6 assertions were failed. assert_true: expected true got false
 PASS > [Stereo listener.positionZ]  
+PASS   Stereo listener.positionZ.value frame [0, 128) channel 0 contains only the constant 0. 
+PASS   Stereo listener.positionZ.value frame [0, 128) channel 1 contains only the constant 0. 
+PASS   Stereo listener.positionZ.value frame [128, 256) channel 0 contains only the constant 0. 
+PASS   Stereo listener.positionZ.value frame [128, 256) channel 1 contains only the constant 0. 
+FAIL X Stereo listener.positionZ: Output at frame 128 channel 0 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL X Stereo listener.positionZ: Output at frame 128 channel 1 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL < [Stereo listener.positionZ] 2 out of 6 assertions were failed. assert_true: expected true got false
 PASS > [Mono listener.positionZ]  
+PASS   Mono listener.positionZ.value frame [0, 128) channel 0 contains only the constant 0. 
+PASS   Mono listener.positionZ.value frame [0, 128) channel 1 contains only the constant 0. 
+PASS   Mono listener.positionZ.value frame [128, 256) channel 0 contains only the constant 0. 
+PASS   Mono listener.positionZ.value frame [128, 256) channel 1 contains only the constant 0. 
+FAIL X Mono listener.positionZ: Output at frame 128 channel 0 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL X Mono listener.positionZ: Output at frame 128 channel 1 should not be equal to 0. Got 0. assert_true: expected true got false
+FAIL < [Mono listener.positionZ] 2 out of 6 assertions were failed. assert_true: expected true got false
 PASS > [setPosition]  
 PASS   setPosition.value frame [0, 128) channel 0 contains only the constant 0. 
 PASS   setPosition.value frame [0, 128) channel 1 contains only the constant 0. 
@@ -105,5 +147,5 @@
 FAIL X listener.up{XYZ}: Output at frame 128 channel 0 should not be equal to 0. Got 0. assert_true: expected true got false
 FAIL X listener.up{XYZ}: Output at frame 128 channel 1 should not be equal to 0. Got 0. assert_true: expected true got false
 FAIL < [up setter] 2 out of 6 assertions were failed. assert_true: expected true got false
-FAIL # AUDIT TASK RUNNER FINISHED: 10 out of 16 tasks were failed. assert_true: expected true got false
+FAIL # AUDIT TASK RUNNER FINISHED: 16 out of 16 tasks were failed. assert_true: expected true got false
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-automation-position-expected.txt (265265 => 265266)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-automation-position-expected.txt	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-automation-position-expected.txt	2020-08-04 23:01:49 UTC (rev 265266)
@@ -1,16 +1,85 @@
-CONSOLE MESSAGE: Unhandled Promise Rejection: TypeError: undefined is not an object (evaluating 'context.listener.positionX.value')
 
-Harness Error (FAIL), message = Unhandled rejection: undefined is not an object (evaluating 'context.listener.positionX.value')
-
 PASS # AUDIT TASK RUNNER STARTED. 
-TIMEOUT Executing "0: 1-channel inverse rolloff: 1" Test timed out
-NOTRUN Executing "0: 2-channel inverse rolloff: 1" 
-NOTRUN Executing "1: 1-channel inverse rolloff: 1" 
-NOTRUN Executing "1: 2-channel inverse rolloff: 1" 
-NOTRUN Executing "2: 1-channel exponential rolloff: 1.5" 
-NOTRUN Executing "2: 2-channel exponential rolloff: 1.5" 
-NOTRUN Executing "3: 1-channel linear rolloff: 1" 
-NOTRUN Executing "3: 2-channel linear rolloff: 1" 
-NOTRUN Audit report 
+PASS Executing "0: 1-channel inverse rolloff: 1" 
+PASS Executing "0: 2-channel inverse rolloff: 1" 
+PASS Executing "1: 1-channel inverse rolloff: 1" 
+PASS Executing "1: 2-channel inverse rolloff: 1" 
+PASS Executing "2: 1-channel exponential rolloff: 1.5" 
+PASS Executing "2: 2-channel exponential rolloff: 1.5" 
+PASS Executing "3: 1-channel linear rolloff: 1" 
+PASS Executing "3: 2-channel linear rolloff: 1" 
+PASS Audit report 
 PASS > [0: 1-channel inverse rolloff: 1]  
+FAIL X 1-channel [0, 0, 1] -> [0, 0, 10000]: distanceModel: inverse, rolloff: 1, left channel does not equal [-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}.
+	Index	Actual			Expected		AbsError		RelError		Test threshold
+	[0]	7.0710676908493042e-1	-7.0710676908493042e-1	1.4142135381698608e+0	2.0000000000000000e+0	0.0000000000000000e+0
+	[1]	7.0710676908493042e-1	-7.0710676908493042e-1	1.4142135381698608e+0	2.0000000000000000e+0	0.0000000000000000e+0
+	[2]	7.0710676908493042e-1	-7.0710676908493042e-1	1.4142135381698608e+0	2.0000000000000000e+0	0.0000000000000000e+0
+	[3]	7.0710676908493042e-1	-7.0710676908493042e-1	1.4142135381698608e+0	2.0000000000000000e+0	0.0000000000000000e+0
+	[4]	7.0710676908493042e-1	-7.0710676908493042e-1	1.4142135381698608e+0	2.0000000000000000e+0	0.0000000000000000e+0
+	...and 251 more errors.
+	Max AbsError of 1.4142135381698608e+0 at index of 0.
+	Max RelError of 2.0000000000000000e+0 at index of 0.
+ assert_true: expected true got false
+FAIL X 1-channel [0, 0, 1] -> [0, 0, 10000]: distanceModel: inverse, rolloff: 1, right channel does not equal [0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}.
+	Index	Actual			Expected		AbsError		RelError		Test threshold
+	[128]	1.0606071009533480e-4	7.0710676908493042e-1	7.0700070837483509e-1	9.9985000750278119e-1	0.0000000000000000e+0
+	[129]	1.0606071009533480e-4	7.0710676908493042e-1	7.0700070837483509e-1	9.9985000750278119e-1	0.0000000000000000e+0
+	[130]	1.0606071009533480e-4	7.0710676908493042e-1	7.0700070837483509e-1	9.9985000750278119e-1	0.0000000000000000e+0
+	[131]	1.0606071009533480e-4	7.0710676908493042e-1	7.0700070837483509e-1	9.9985000750278119e-1	0.0000000000000000e+0
+	[132]	1.0606071009533480e-4	7.0710676908493042e-1	7.0700070837483509e-1	9.9985000750278119e-1	0.0000000000000000e+0
+	...and 123 more errors.
+	Max AbsError of 7.0700070837483509e-1 at index of 128.
+	Max RelError of 9.9985000750278119e-1 at index of 128.
+ assert_true: expected true got false
+FAIL < [0: 1-channel inverse rolloff: 1] 2 out of 2 assertions were failed. assert_true: expected true got false
+PASS > [0: 2-channel inverse rolloff: 1]  
+FAIL X 2-channel [0, 0, 1] -> [0, 0, 10000]: distanceModel: inverse, rolloff: 1, left channel does not equal [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}.
+	Index	Actual			Expected		AbsError		RelError		Test threshold
+	[0]	1.0000001192092896e+0	-1.0000000000000000e+0	2.0000001192092896e+0	2.0000001192092896e+0	0.0000000000000000e+0
+	[1]	1.0000001192092896e+0	-1.0000000000000000e+0	2.0000001192092896e+0	2.0000001192092896e+0	0.0000000000000000e+0
+	[2]	1.0000001192092896e+0	-1.0000000000000000e+0	2.0000001192092896e+0	2.0000001192092896e+0	0.0000000000000000e+0
+	[3]	1.0000001192092896e+0	-1.0000000000000000e+0	2.0000001192092896e+0	2.0000001192092896e+0	0.0000000000000000e+0
+	[4]	1.0000001192092896e+0	-1.0000000000000000e+0	2.0000001192092896e+0	2.0000001192092896e+0	0.0000000000000000e+0
+	...and 251 more errors.
+	Max AbsError of 2.0000001192092896e+0 at index of 0.
+	Max RelError of 2.0000001192092896e+0 at index of 0.
+ assert_true: expected true got false
+FAIL X 2-channel [0, 0, 1] -> [0, 0, 10000]: distanceModel: inverse, rolloff: 1, right channel does not equal [2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}.
+	Index	Actual			Expected		AbsError		RelError		Test threshold
+	[0]	2.0000000000000000e+0	2.4492937051703357e-16	1.9999999999999998e+0	8.1656193202885410e+15	0.0000000000000000e+0
+	[1]	2.0000000000000000e+0	2.4492937051703357e-16	1.9999999999999998e+0	8.1656193202885410e+15	0.0000000000000000e+0
+	[2]	2.0000000000000000e+0	2.4492937051703357e-16	1.9999999999999998e+0	8.1656193202885410e+15	0.0000000000000000e+0
+	[3]	2.0000000000000000e+0	2.4492937051703357e-16	1.9999999999999998e+0	8.1656193202885410e+15	0.0000000000000000e+0
+	[4]	2.0000000000000000e+0	2.4492937051703357e-16	1.9999999999999998e+0	8.1656193202885410e+15	0.0000000000000000e+0
+	...and 251 more errors.
+	Max AbsError of 1.9999999999999998e+0 at index of 0.
+	Max RelError of 8.1656193202885410e+15 at index of 0.
+ assert_true: expected true got false
+FAIL < [0: 2-channel inverse rolloff: 1] 2 out of 2 assertions were failed. assert_true: expected true got false
+PASS > [1: 1-channel inverse rolloff: 1]  
+PASS   1-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: inverse, rolloff: 1, left channel equals [-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":4.8124e-7},"relativeThreshold":0}. 
+PASS   1-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: inverse, rolloff: 1, right channel equals [0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":4.8124e-7},"relativeThreshold":0}. 
+PASS < [1: 1-channel inverse rolloff: 1] All assertions passed. (total 2 assertions) 
+PASS > [1: 2-channel inverse rolloff: 1]  
+PASS   2-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: inverse, rolloff: 1, left channel equals [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":4.3267e-7},"relativeThreshold":0}. 
+PASS   2-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: inverse, rolloff: 1, right channel equals [2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":4.3267e-7},"relativeThreshold":0}. 
+PASS < [1: 2-channel inverse rolloff: 1] All assertions passed. (total 2 assertions) 
+PASS > [2: 1-channel exponential rolloff: 1.5]  
+PASS   1-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: exponential, rolloff: 1.5, left channel equals [-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":5.0783e-7},"relativeThreshold":0}. 
+PASS   1-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: exponential, rolloff: 1.5, right channel equals [0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":5.0783e-7},"relativeThreshold":0}. 
+PASS < [2: 1-channel exponential rolloff: 1.5] All assertions passed. (total 2 assertions) 
+PASS > [2: 2-channel exponential rolloff: 1.5]  
+PASS   2-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: exponential, rolloff: 1.5, left channel equals [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":5.218e-7},"relativeThreshold":0}. 
+PASS   2-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: exponential, rolloff: 1.5, right channel equals [2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":5.218e-7},"relativeThreshold":0}. 
+PASS < [2: 2-channel exponential rolloff: 1.5] All assertions passed. (total 2 assertions) 
+PASS > [3: 1-channel linear rolloff: 1]  
+PASS   1-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: linear, rolloff: 1, left channel equals [-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304,-0.7071067690849304...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":0.0000065324},"relativeThreshold":0}. 
+PASS   1-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: linear, rolloff: 1, right channel equals [0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304,0.7071067690849304...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":0.0000065324},"relativeThreshold":0}. 
+PASS < [3: 1-channel linear rolloff: 1] All assertions passed. (total 2 assertions) 
+PASS > [3: 2-channel linear rolloff: 1]  
+PASS   2-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: linear, rolloff: 1, left channel equals [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":0.0000065756},"relativeThreshold":0}. 
+PASS   2-channel [0, 0, 1] -> [20000, 30000, 10000]: distanceModel: linear, rolloff: 1, right channel equals [2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16,2.4492937051703357e-16...] with an element-wise tolerance of {"absoluteThreshold":{"relativeThreshold":0.0000065756},"relativeThreshold":0}. 
+PASS < [3: 2-channel linear rolloff: 1] All assertions passed. (total 2 assertions) 
+FAIL # AUDIT TASK RUNNER FINISHED: 2 out of 8 tasks were failed. assert_true: expected true got false
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/pannernode-basic-expected.txt (265265 => 265266)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/pannernode-basic-expected.txt	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/pannernode-basic-expected.txt	2020-08-04 23:01:49 UTC (rev 265266)
@@ -2,7 +2,7 @@
 PASS # AUDIT TASK RUNNER STARTED. 
 PASS Executing "initialize" 
 PASS Executing "basic" 
-FAIL Executing "listener" promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'context.listener.positionX.value')"
+PASS Executing "listener" 
 PASS Executing "panning models" 
 PASS Executing "distance models" 
 PASS Audit report 
@@ -34,6 +34,16 @@
 PASS   panner.orientationZ is equal to 0. 
 PASS < [basic] All assertions passed. (total 22 assertions) 
 PASS > [listener]  
+PASS   listener.positionX is equal to 0. 
+PASS   listener.positionY is equal to 0. 
+PASS   listener.positionZ is equal to 0. 
+PASS   listener.forwardX is equal to 0. 
+PASS   listener.forwardY is equal to 0. 
+PASS   listener.forwardZ is equal to -1. 
+PASS   listener.upX is equal to 0. 
+PASS   listener.upY is equal to 1. 
+PASS   listener.upZ is equal to 0. 
+PASS < [listener] All assertions passed. (total 9 assertions) 
 PASS > [panning models]  
 PASS   Set panner.panningModel = "equalpower" did not throw an exception. 
 PASS   panner.panningModel = "equalpower" is equal to equalpower. 

Modified: trunk/Source/WebCore/CMakeLists.txt (265265 => 265266)


--- trunk/Source/WebCore/CMakeLists.txt	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/CMakeLists.txt	2020-08-04 23:01:49 UTC (rev 265266)
@@ -500,6 +500,7 @@
     Modules/webaudio/WaveShaperOptions.idl
     Modules/webaudio/WebKitAudioBufferSourceNode.idl
     Modules/webaudio/WebKitAudioContext.idl
+    Modules/webaudio/WebKitAudioListener.idl
     Modules/webaudio/WebKitAudioPannerNode.idl
     Modules/webaudio/WebKitOfflineAudioContext.idl
     Modules/webaudio/WebKitOscillatorNode.idl

Modified: trunk/Source/WebCore/ChangeLog (265265 => 265266)


--- trunk/Source/WebCore/ChangeLog	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/ChangeLog	2020-08-04 23:01:49 UTC (rev 265266)
@@ -1,3 +1,58 @@
+2020-08-04  Chris Dumez  <cdu...@apple.com>
+
+        Align AudioListener with the W3C specification
+        https://bugs.webkit.org/show_bug.cgi?id=215134
+
+        Reviewed by Geoffrey Garen.
+
+        Align AudioListener with the W3C specification:
+        - https://webaudio.github.io/web-audio-api/#audiolistener
+
+        Note that the prefixed API still behaves the way it used to. I have maintained
+        the old version of the AudioListener API by moving it to a new
+        WebKitAudioListener interface.
+
+        No new tests, rebaselined existing tests.
+
+        * CMakeLists.txt:
+        * DerivedSources-input.xcfilelist:
+        * DerivedSources-output.xcfilelist:
+        * DerivedSources.make:
+        * Modules/webaudio/AudioListener.cpp:
+        (WebCore::AudioListener::AudioListener):
+        (WebCore::AudioListener::setPosition):
+        (WebCore::AudioListener::position const):
+        (WebCore::AudioListener::setOrientation):
+        (WebCore::AudioListener::orientation const):
+        (WebCore::AudioListener::upVector const):
+        * Modules/webaudio/AudioListener.h:
+        (WebCore::AudioListener::create):
+        (WebCore::AudioListener::positionX):
+        (WebCore::AudioListener::positionY):
+        (WebCore::AudioListener::positionZ):
+        (WebCore::AudioListener::forwardX):
+        (WebCore::AudioListener::forwardY):
+        (WebCore::AudioListener::forwardZ):
+        (WebCore::AudioListener::upX):
+        (WebCore::AudioListener::upY):
+        (WebCore::AudioListener::upZ):
+        * Modules/webaudio/AudioListener.idl:
+        * Modules/webaudio/BaseAudioContext.cpp:
+        (WebCore::BaseAudioContext::constructCommon):
+        * Modules/webaudio/PannerNode.cpp:
+        (WebCore::PannerNode::dopplerRate):
+        * Modules/webaudio/WebKitAudioContext.h:
+        (WebCore::WebKitAudioContext::listener):
+        * Modules/webaudio/WebKitAudioContext.idl:
+        * Modules/webaudio/WebKitAudioListener.h: Copied from Source/WebCore/Modules/webaudio/AudioListener.h.
+        * Modules/webaudio/WebKitAudioListener.idl: Copied from Source/WebCore/Modules/webaudio/AudioListener.idl.
+        * Modules/webaudio/WebKitAudioPannerNode.cpp:
+        (WebCore::WebKitAudioPannerNode::listener):
+        * Modules/webaudio/WebKitAudioPannerNode.h:
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * bindings/js/WebCoreBuiltinNames.h:
+
 2020-08-04  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         Add glyph origins member to GlyphBuffer

Modified: trunk/Source/WebCore/DerivedSources-input.xcfilelist (265265 => 265266)


--- trunk/Source/WebCore/DerivedSources-input.xcfilelist	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/DerivedSources-input.xcfilelist	2020-08-04 23:01:49 UTC (rev 265266)
@@ -349,6 +349,7 @@
 $(PROJECT_DIR)/Modules/webaudio/WaveShaperOptions.idl
 $(PROJECT_DIR)/Modules/webaudio/WebKitAudioBufferSourceNode.idl
 $(PROJECT_DIR)/Modules/webaudio/WebKitAudioContext.idl
+$(PROJECT_DIR)/Modules/webaudio/WebKitAudioListener.idl
 $(PROJECT_DIR)/Modules/webaudio/WebKitAudioPannerNode.idl
 $(PROJECT_DIR)/Modules/webaudio/WebKitOfflineAudioContext.idl
 $(PROJECT_DIR)/Modules/webaudio/WebKitOscillatorNode.idl

Modified: trunk/Source/WebCore/DerivedSources-output.xcfilelist (265265 => 265266)


--- trunk/Source/WebCore/DerivedSources-output.xcfilelist	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/DerivedSources-output.xcfilelist	2020-08-04 23:01:49 UTC (rev 265266)
@@ -2134,6 +2134,8 @@
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitAudioBufferSourceNode.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitAudioContext.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitAudioContext.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitAudioListener.cpp
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitAudioListener.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitAudioPannerNode.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitAudioPannerNode.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitCSSMatrix.cpp

Modified: trunk/Source/WebCore/DerivedSources.make (265265 => 265266)


--- trunk/Source/WebCore/DerivedSources.make	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/DerivedSources.make	2020-08-04 23:01:49 UTC (rev 265266)
@@ -432,6 +432,7 @@
     $(WebCore)/Modules/webaudio/WaveShaperOptions.idl \
     $(WebCore)/Modules/webaudio/WebKitAudioBufferSourceNode.idl \
     $(WebCore)/Modules/webaudio/WebKitAudioContext.idl \
+    $(WebCore)/Modules/webaudio/WebKitAudioListener.idl \
     $(WebCore)/Modules/webaudio/WebKitAudioPannerNode.idl \
     $(WebCore)/Modules/webaudio/WebKitOfflineAudioContext.idl \
     $(WebCore)/Modules/webaudio/WebKitOscillatorNode.idl \

Modified: trunk/Source/WebCore/Modules/webaudio/AudioListener.cpp (265265 => 265266)


--- trunk/Source/WebCore/Modules/webaudio/AudioListener.cpp	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/Modules/webaudio/AudioListener.cpp	2020-08-04 23:01:49 UTC (rev 265266)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -31,21 +32,59 @@
 #if ENABLE(WEB_AUDIO)
 
 #include "AudioListener.h"
+#include "AudioParam.h"
 
 #include "AudioBus.h"
 
 namespace WebCore {
 
-AudioListener::AudioListener()
-    : m_position(0, 0, 0)
-    , m_orientation(0, 0, -1)
-    , m_upVector(0, 1, 0)
-    , m_velocity(0, 0, 0)
-    , m_dopplerFactor(1)
-    , m_speedOfSound(343.3)
+AudioListener::AudioListener(BaseAudioContext& context)
+    : m_positionX(AudioParam::create(context, "positionX", 0.0, -FLT_MAX, FLT_MAX))
+    , m_positionY(AudioParam::create(context, "positionY", 0.0, -FLT_MAX, FLT_MAX))
+    , m_positionZ(AudioParam::create(context, "positionZ", 0.0, -FLT_MAX, FLT_MAX))
+    , m_forwardX(AudioParam::create(context, "forwardX", 0.0, -FLT_MAX, FLT_MAX))
+    , m_forwardY(AudioParam::create(context, "forwardY", 0.0, -FLT_MAX, FLT_MAX))
+    , m_forwardZ(AudioParam::create(context, "forwardZ", -1.0, -FLT_MAX, FLT_MAX))
+    , m_upX(AudioParam::create(context, "upX", 0.0, -FLT_MAX, FLT_MAX))
+    , m_upY(AudioParam::create(context, "upY", 1.0, -FLT_MAX, FLT_MAX))
+    , m_upZ(AudioParam::create(context, "upZ", 0.0, -FLT_MAX, FLT_MAX))
 {
 }
 
+AudioListener::~AudioListener() = default;
+
+void AudioListener::setPosition(float x, float y, float z)
+{
+    m_positionX->setValue(x);
+    m_positionY->setValue(y);
+    m_positionZ->setValue(z);
+}
+
+FloatPoint3D AudioListener::position() const
+{
+    return FloatPoint3D { m_positionX->value(), m_positionY->value(), m_positionZ->value() };
+}
+
+void AudioListener::setOrientation(float x, float y, float z, float upX, float upY, float upZ)
+{
+    m_forwardX->setValue(x);
+    m_forwardY->setValue(y);
+    m_forwardZ->setValue(z);
+    m_upX->setValue(upX);
+    m_upY->setValue(upY);
+    m_upZ->setValue(upZ);
+}
+
+FloatPoint3D AudioListener::orientation() const
+{
+    return FloatPoint3D { m_forwardX->value(), m_forwardY->value(), m_forwardZ->value() };
+}
+
+FloatPoint3D AudioListener::upVector() const
+{
+    return FloatPoint3D { m_upX->value(), m_upY->value(), m_upZ->value() };
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(WEB_AUDIO)

Modified: trunk/Source/WebCore/Modules/webaudio/AudioListener.h (265265 => 265266)


--- trunk/Source/WebCore/Modules/webaudio/AudioListener.h	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/Modules/webaudio/AudioListener.h	2020-08-04 23:01:49 UTC (rev 265266)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -34,58 +35,51 @@
 
 namespace WebCore {
 
+class AudioParam;
+
 // AudioListener maintains the state of the listener in the audio scene as defined in the OpenAL specification.
 
-class AudioListener final : public RefCounted<AudioListener> {
+class AudioListener : public RefCounted<AudioListener> {
 public:
-    static Ref<AudioListener> create()
+    static Ref<AudioListener> create(BaseAudioContext& context)
     {
-        return adoptRef(*new AudioListener);
+        return adoptRef(*new AudioListener(context));
     }
+    ~AudioListener();
 
+    AudioParam& positionX() { return m_positionX.get(); }
+    AudioParam& positionY() { return m_positionY.get(); }
+    AudioParam& positionZ() { return m_positionZ.get(); }
+    AudioParam& forwardX() { return m_forwardX.get(); }
+    AudioParam& forwardY() { return m_forwardY.get(); }
+    AudioParam& forwardZ() { return m_forwardZ.get(); }
+    AudioParam& upX() { return m_upX.get(); }
+    AudioParam& upY() { return m_upY.get(); }
+    AudioParam& upZ() { return m_upZ.get(); }
+
     // Position
-    void setPosition(float x, float y, float z) { setPosition(FloatPoint3D(x, y, z)); }
-    void setPosition(const FloatPoint3D &position) { m_position = position; }
-    const FloatPoint3D& position() const { return m_position; }
+    void setPosition(float x, float y, float z);
+    FloatPoint3D position() const;
 
     // Orientation
-    void setOrientation(float x, float y, float z, float upX, float upY, float upZ)
-    {
-        setOrientation(FloatPoint3D(x, y, z));
-        setUpVector(FloatPoint3D(upX, upY, upZ));
-    }
-    void setOrientation(const FloatPoint3D &orientation) { m_orientation = orientation; }
-    const FloatPoint3D& orientation() const { return m_orientation; }
+    void setOrientation(float x, float y, float z, float upX, float upY, float upZ);
+    FloatPoint3D orientation() const;
 
-    // Up-vector
-    void setUpVector(const FloatPoint3D &upVector) { m_upVector = upVector; }
-    const FloatPoint3D& upVector() const { return m_upVector; }
+    FloatPoint3D upVector() const;
 
-    // Velocity
-    void setVelocity(float x, float y, float z) { setVelocity(FloatPoint3D(x, y, z)); }
-    void setVelocity(const FloatPoint3D &velocity) { m_velocity = velocity; }
-    const FloatPoint3D& velocity() const { return m_velocity; }
+protected:
+    explicit AudioListener(BaseAudioContext&);
 
-    // Doppler factor
-    void setDopplerFactor(double dopplerFactor) { m_dopplerFactor = dopplerFactor; }
-    double dopplerFactor() const { return m_dopplerFactor; }
-
-    // Speed of sound
-    void setSpeedOfSound(double speedOfSound) { m_speedOfSound = speedOfSound; }
-    double speedOfSound() const { return m_speedOfSound; }
-
 private:
-    AudioListener();
-
-    // Position / Orientation
-    FloatPoint3D m_position;
-    FloatPoint3D m_orientation;
-    FloatPoint3D m_upVector;
-
-    FloatPoint3D m_velocity;
-
-    double m_dopplerFactor;
-    double m_speedOfSound;
+    Ref<AudioParam> m_positionX;
+    Ref<AudioParam> m_positionY;
+    Ref<AudioParam> m_positionZ;
+    Ref<AudioParam> m_forwardX;
+    Ref<AudioParam> m_forwardY;
+    Ref<AudioParam> m_forwardZ;
+    Ref<AudioParam> m_upX;
+    Ref<AudioParam> m_upY;
+    Ref<AudioParam> m_upZ;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/webaudio/AudioListener.idl (265265 => 265266)


--- trunk/Source/WebCore/Modules/webaudio/AudioListener.idl	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/Modules/webaudio/AudioListener.idl	2020-08-04 23:01:49 UTC (rev 265266)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,11 +30,18 @@
 [
     Conditional=WEB_AUDIO,
     ImplementationLacksVTable,
+    EnabledBySetting=ModernUnprefixedWebAudio,
 ] interface AudioListener {
-    attribute unrestricted float dopplerFactor;  // same as OpenAL (default 1.0)
-    attribute unrestricted float speedOfSound;   // in meters / second (default 343.3)
+    readonly attribute AudioParam positionX;
+    readonly attribute AudioParam positionY;
+    readonly attribute AudioParam positionZ;
+    readonly attribute AudioParam forwardX;
+    readonly attribute AudioParam forwardY;
+    readonly attribute AudioParam forwardZ;
+    readonly attribute AudioParam upX;
+    readonly attribute AudioParam upY;
+    readonly attribute AudioParam upZ;
 
-    void setPosition(unrestricted float x, unrestricted float y, unrestricted float z);
-    void setOrientation(unrestricted float x, unrestricted float y, unrestricted float z, unrestricted float xUp, unrestricted float yUp, unrestricted float zUp);
-    void setVelocity(unrestricted float x, unrestricted float y, unrestricted float z);
+    void setPosition(float x, float y, float z);
+    void setOrientation(float x, float y, float z, float xUp, float yUp, float zUp);
 };

Modified: trunk/Source/WebCore/Modules/webaudio/BaseAudioContext.cpp (265265 => 265266)


--- trunk/Source/WebCore/Modules/webaudio/BaseAudioContext.cpp	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/Modules/webaudio/BaseAudioContext.cpp	2020-08-04 23:01:49 UTC (rev 265266)
@@ -72,6 +72,7 @@
 #include "ScriptController.h"
 #include "ScriptProcessorNode.h"
 #include "WaveShaperNode.h"
+#include "WebKitAudioListener.h"
 #include <_javascript_Core/ScriptCallStack.h>
 #include <wtf/Scope.h>
 
@@ -159,7 +160,10 @@
 {
     FFTFrame::initialize();
     
-    m_listener = AudioListener::create();
+    if (isWebKitAudioContext())
+        m_listener = WebKitAudioListener::create(*this);
+    else
+        m_listener = AudioListener::create(*this);
 
     ASSERT(document());
     if (document()->audioPlaybackRequiresUserGesture())

Modified: trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp (265265 => 265266)


--- trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp	2020-08-04 23:01:49 UTC (rev 265266)
@@ -391,45 +391,7 @@
 
 float PannerNode::dopplerRate()
 {
-    double dopplerShift = 1.0;
-
-    // FIXME: optimize for case when neither source nor listener has changed...
-    double dopplerFactor = listener()->dopplerFactor();
-
-    if (dopplerFactor > 0.0) {
-        double speedOfSound = listener()->speedOfSound();
-
-        const FloatPoint3D& listenerVelocity = listener()->velocity();
-
-        // Don't bother if listener has no velocity
-        bool listenerHasVelocity = !listenerVelocity.isZero();
-
-        if (listenerHasVelocity) {
-            // Calculate the source to listener vector
-            FloatPoint3D listenerPosition = listener()->position();
-            FloatPoint3D sourceToListener = position() - listenerPosition;
-
-            double sourceListenerMagnitude = sourceToListener.length();
-
-            double listenerProjection = sourceToListener.dot(listenerVelocity) / sourceListenerMagnitude;
-
-            listenerProjection = -listenerProjection;
-
-            double scaledSpeedOfSound = speedOfSound / dopplerFactor;
-            listenerProjection = std::min(listenerProjection, scaledSpeedOfSound);
-
-            dopplerShift = ((speedOfSound - dopplerFactor * listenerProjection) / speedOfSound);
-            fixNANs(dopplerShift); // avoid illegal values
-
-            // Limit the pitch shifting to 4 octaves up and 3 octaves down.
-            if (dopplerShift > 16.0)
-                dopplerShift = 16.0;
-            else if (dopplerShift < 0.125)
-                dopplerShift = 0.125;   
-        }
-    }
-
-    return static_cast<float>(dopplerShift);
+    return 1.0f;
 }
 
 float PannerNode::distanceConeGain()

Modified: trunk/Source/WebCore/Modules/webaudio/WebKitAudioContext.h (265265 => 265266)


--- trunk/Source/WebCore/Modules/webaudio/WebKitAudioContext.h	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/Modules/webaudio/WebKitAudioContext.h	2020-08-04 23:01:49 UTC (rev 265266)
@@ -26,6 +26,7 @@
 #pragma once
 
 #include "BaseAudioContext.h"
+#include "WebKitAudioListener.h"
 
 namespace WebCore {
 
@@ -54,6 +55,8 @@
 
     void close(DOMPromiseDeferred<void>&&);
 
+    WebKitAudioListener* listener() { return static_cast<WebKitAudioListener*>(BaseAudioContext::listener()); }
+
     // The AudioNode create methods are called on the main thread (from _javascript_).
 #if ENABLE(VIDEO)
     ExceptionOr<Ref<MediaElementAudioSourceNode>> createMediaElementSource(HTMLMediaElement&);

Modified: trunk/Source/WebCore/Modules/webaudio/WebKitAudioContext.idl (265265 => 265266)


--- trunk/Source/WebCore/Modules/webaudio/WebKitAudioContext.idl	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/Modules/webaudio/WebKitAudioContext.idl	2020-08-04 23:01:49 UTC (rev 265266)
@@ -42,7 +42,7 @@
     readonly attribute unrestricted float sampleRate;
 
     // All panning is relative to this listener.
-    readonly attribute AudioListener listener;
+    readonly attribute WebKitAudioListener listener;
 
     [ImplementedAs=suspendRendering] Promise<void> suspend();
     [ImplementedAs=resumeRendering] Promise<void> resume();

Copied: trunk/Source/WebCore/Modules/webaudio/WebKitAudioListener.h (from rev 265265, trunk/Source/WebCore/Modules/webaudio/AudioListener.h) (0 => 265266)


--- trunk/Source/WebCore/Modules/webaudio/WebKitAudioListener.h	                        (rev 0)
+++ trunk/Source/WebCore/Modules/webaudio/WebKitAudioListener.h	2020-08-04 23:01:49 UTC (rev 265266)
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "AudioListener.h"
+
+namespace WebCore {
+
+class WebKitAudioListener final : public AudioListener {
+public:
+    static Ref<WebKitAudioListener> create(BaseAudioContext& context)
+    {
+        return adoptRef(*new WebKitAudioListener(context));
+    }
+
+    // Velocity
+    void setVelocity(float x, float y, float z) { setVelocity(FloatPoint3D(x, y, z)); }
+    void setVelocity(const FloatPoint3D& velocity) { m_velocity = velocity; }
+    const FloatPoint3D& velocity() const { return m_velocity; }
+
+    // Doppler factor
+    void setDopplerFactor(double dopplerFactor) { m_dopplerFactor = dopplerFactor; }
+    double dopplerFactor() const { return m_dopplerFactor; }
+
+    // Speed of sound
+    void setSpeedOfSound(double speedOfSound) { m_speedOfSound = speedOfSound; }
+    double speedOfSound() const { return m_speedOfSound; }
+
+private:
+    WebKitAudioListener(BaseAudioContext& context)
+        : AudioListener(context)
+        , m_velocity(0, 0, 0)
+    { }
+
+    FloatPoint3D m_velocity;
+    double m_dopplerFactor { 1.0 };
+    double m_speedOfSound { 343.3 };
+};
+
+} // namespace WebCore

Copied: trunk/Source/WebCore/Modules/webaudio/WebKitAudioListener.idl (from rev 265265, trunk/Source/WebCore/Modules/webaudio/AudioListener.idl) (0 => 265266)


--- trunk/Source/WebCore/Modules/webaudio/WebKitAudioListener.idl	                        (rev 0)
+++ trunk/Source/WebCore/Modules/webaudio/WebKitAudioListener.idl	2020-08-04 23:01:49 UTC (rev 265266)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+    Conditional=WEB_AUDIO,
+    ImplementationLacksVTable,
+    EnabledBySetting=PrefixedWebAudio,
+    NoInterfaceObject,
+] interface WebKitAudioListener {
+    attribute unrestricted float dopplerFactor;  // same as OpenAL (default 1.0)
+    attribute unrestricted float speedOfSound;   // in meters / second (default 343.3)
+
+    void setPosition(unrestricted float x, unrestricted float y, unrestricted float z);
+    void setOrientation(unrestricted float x, unrestricted float y, unrestricted float z, unrestricted float xUp, unrestricted float yUp, unrestricted float zUp);
+    void setVelocity(unrestricted float x, unrestricted float y, unrestricted float z);
+};

Modified: trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.cpp (265265 => 265266)


--- trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.cpp	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.cpp	2020-08-04 23:01:49 UTC (rev 265266)
@@ -173,7 +173,7 @@
     AudioNode::uninitialize();
 }
 
-AudioListener* WebKitAudioPannerNode::listener()
+WebKitAudioListener* WebKitAudioPannerNode::listener()
 {
     return context().listener();
 }

Modified: trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.h (265265 => 265266)


--- trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.h	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.h	2020-08-04 23:01:49 UTC (rev 265266)
@@ -26,7 +26,6 @@
 
 #if ENABLE(WEB_AUDIO)
 
-#include "AudioListener.h"
 #include "AudioNode.h"
 #include "AudioParam.h"
 #include "Cone.h"
@@ -35,6 +34,7 @@
 #include "Panner.h"
 #include "PannerNode.h"
 #include "WebKitAudioContext.h"
+#include "WebKitAudioListener.h"
 #include <memory>
 #include <wtf/HashSet.h>
 #include <wtf/Lock.h>
@@ -71,7 +71,7 @@
     void uninitialize() override;
 
     // Listener
-    AudioListener* listener();
+    WebKitAudioListener* listener();
 
     // Panning model
     PanningModelType panningModel() const { return m_panningModel; }

Modified: trunk/Source/WebCore/Sources.txt (265265 => 265266)


--- trunk/Source/WebCore/Sources.txt	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/Sources.txt	2020-08-04 23:01:49 UTC (rev 265266)
@@ -3572,6 +3572,7 @@
 JSWebKitAnimationEvent.cpp
 JSWebKitAudioBufferSourceNode.cpp
 JSWebKitAudioContext.cpp
+JSWebKitAudioListener.cpp
 JSWebKitAudioPannerNode.cpp
 JSWebKitCSSMatrix.cpp
 JSWebKitMediaKeyError.cpp

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (265265 => 265266)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2020-08-04 23:01:49 UTC (rev 265266)
@@ -2455,6 +2455,7 @@
 		8348BFAC1B85729800912F36 /* ClassCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 8348BFAA1B85729500912F36 /* ClassCollection.h */; };
 		834DFAD01F7DAE5D00C2725B /* SharedStringHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 834DFACC1F7DAE5600C2725B /* SharedStringHash.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		83520C7E1A71BFCC006BD2AA /* CSSFontFamily.h in Headers */ = {isa = PBXBuildFile; fileRef = 83520C7D1A71BFCC006BD2AA /* CSSFontFamily.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		8356F97F24D9F818006C3E41 /* WebKitAudioListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 8356F97E24D9F809006C3E41 /* WebKitAudioListener.h */; };
 		8358CB701C53277500E0C2D8 /* JSXMLDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F570AD1C53268E007FD6CB /* JSXMLDocument.h */; };
 		835D2D781F5F1FBD00141DED /* HTMLInputElementEntriesAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 835D2D751F5F1FB800141DED /* HTMLInputElementEntriesAPI.h */; };
 		835D363719FF6193004C93AB /* StyleBuilderCustom.h in Headers */ = {isa = PBXBuildFile; fileRef = 835D363619FF6193004C93AB /* StyleBuilderCustom.h */; };
@@ -10480,6 +10481,8 @@
 		8350C3E81DA59B6200356446 /* ScrollToOptions.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ScrollToOptions.idl; sourceTree = "<group>"; };
 		83520C7D1A71BFCC006BD2AA /* CSSFontFamily.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSFontFamily.h; sourceTree = "<group>"; };
 		835657C61ECAB0E800CDE72D /* JSDOMMatrixInit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMMatrixInit.cpp; sourceTree = "<group>"; };
+		8356F97C24D9F808006C3E41 /* WebKitAudioListener.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = WebKitAudioListener.idl; sourceTree = "<group>"; };
+		8356F97E24D9F809006C3E41 /* WebKitAudioListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebKitAudioListener.h; sourceTree = "<group>"; };
 		835B680E1F548BDE0071F7F6 /* JSFileSystemEntryCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSFileSystemEntryCustom.cpp; sourceTree = "<group>"; };
 		835D2D741F5F1FB800141DED /* HTMLInputElementEntriesAPI.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLInputElementEntriesAPI.idl; sourceTree = "<group>"; };
 		835D2D751F5F1FB800141DED /* HTMLInputElementEntriesAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLInputElementEntriesAPI.h; sourceTree = "<group>"; };
@@ -29651,15 +29654,17 @@
 				FD7F298C13D4C0CB00AD9535 /* WaveShaperNode.cpp */,
 				FD7F298D13D4C0CB00AD9535 /* WaveShaperNode.h */,
 				FD7F298E13D4C0CB00AD9535 /* WaveShaperNode.idl */,
-				833D1C7324D8D53300E813DF /* WebKitAudioBufferSourceNode.h */,
-				833D1C7524D8D53300E813DF /* WebKitAudioBufferSourceNode.idl */,
 				8326BF8C24D35C20001F8A85 /* WaveShaperOptions.h */,
 				8326BF8D24D35C21001F8A85 /* WaveShaperOptions.idl */,
 				FD7F298F13D4C0CB00AD9535 /* WaveShaperProcessor.cpp */,
 				FD7F299013D4C0CB00AD9535 /* WaveShaperProcessor.h */,
+				833D1C7324D8D53300E813DF /* WebKitAudioBufferSourceNode.h */,
+				833D1C7524D8D53300E813DF /* WebKitAudioBufferSourceNode.idl */,
 				83003E2B249997A80060AF94 /* WebKitAudioContext.cpp */,
 				83B1A6FF249985D000FE5961 /* WebKitAudioContext.h */,
 				83B1A701249985D000FE5961 /* WebKitAudioContext.idl */,
+				8356F97E24D9F809006C3E41 /* WebKitAudioListener.h */,
+				8356F97C24D9F808006C3E41 /* WebKitAudioListener.idl */,
 				831B61712499A59900C07C79 /* WebKitAudioPannerNode.cpp */,
 				831B61742499A59C00C07C79 /* WebKitAudioPannerNode.h */,
 				831B616F2499A59800C07C79 /* WebKitAudioPannerNode.idl */,
@@ -33600,7 +33605,6 @@
 				B22279900D00BF220071B782 /* SVGAnimateElement.h in Headers */,
 				832B843419D8E55100B26055 /* SVGAnimateElementBase.h in Headers */,
 				B22279930D00BF220071B782 /* SVGAnimateMotionElement.h in Headers */,
-				833D1C7624D8D54F00E813DF /* WebKitAudioBufferSourceNode.h in Headers */,
 				B22279950D00BF220071B782 /* SVGAnimateTransformElement.h in Headers */,
 				B22279980D00BF220071B782 /* SVGAnimationElement.h in Headers */,
 				B222799C0D00BF220071B782 /* SVGCircleElement.h in Headers */,
@@ -34106,7 +34110,9 @@
 				A584FE301864CB8400843B10 /* WebInjectedScriptManager.h in Headers */,
 				F48223111E3869B80066FC79 /* WebItemProviderPasteboard.h in Headers */,
 				31C0FF220E4CEB6E007D6FE5 /* WebKitAnimationEvent.h in Headers */,
+				833D1C7624D8D54F00E813DF /* WebKitAudioBufferSourceNode.h in Headers */,
 				83B1A702249985F000FE5961 /* WebKitAudioContext.h in Headers */,
+				8356F97F24D9F818006C3E41 /* WebKitAudioListener.h in Headers */,
 				831B61762499A5BB00C07C79 /* WebKitAudioPannerNode.h in Headers */,
 				5DFEBAB718592B6D00C75BEB /* WebKitAvailability.h in Headers */,
 				498391590F1E776900C23782 /* WebKitCSSMatrix.h in Headers */,

Modified: trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h (265265 => 265266)


--- trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h	2020-08-04 22:54:08 UTC (rev 265265)
+++ trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h	2020-08-04 23:01:49 UTC (rev 265266)
@@ -51,6 +51,7 @@
     macro(Audio) \
     macro(AudioBufferSourceNode) \
     macro(AudioContext) \
+    macro(AudioListener) \
     macro(AuthenticatorAssertionResponse) \
     macro(AuthenticatorAttestationResponse) \
     macro(AuthenticatorResponse) \
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to