Changeset 265028 in webkit
- Timestamp:
- Jul 28, 2020 10:18:35 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 15 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r265026 r265028 1 2020-07-28 Chris Dumez <cdumez@apple.com> 2 3 Move non standard OscillatorNode API to new WebKitOscillatorNode interface 4 https://bugs.webkit.org/show_bug.cgi?id=214902 5 6 Reviewed by Darin Adler. 7 8 Add layout test coverage. 9 10 * webaudio/oscillatornode-legacy-api-expected.txt: Added. 11 * webaudio/oscillatornode-legacy-api.html: Added. 12 1 13 2020-07-28 Karl Rackler <rackler@apple.com> 2 14 -
trunk/Source/WebCore/CMakeLists.txt
r265002 r265028 494 494 Modules/webaudio/WebKitAudioPannerNode.idl 495 495 Modules/webaudio/WebKitOfflineAudioContext.idl 496 Modules/webaudio/WebKitOscillatorNode.idl 496 497 497 498 Modules/webauthn/AttestationConveyancePreference.idl -
trunk/Source/WebCore/ChangeLog
r265026 r265028 1 2020-07-28 Chris Dumez <cdumez@apple.com> 2 3 Move non standard OscillatorNode API to new webKitOscillatorNode interface 4 https://bugs.webkit.org/show_bug.cgi?id=214902 5 6 Reviewed by Darin Adler. 7 8 Move non standard OscillatorNode API to new webKitOscillatorNode interface: 9 https://webaudio.github.io/web-audio-api/#oscillatornode 10 11 Namely, the playbackState attribute and its associated constants are now exposed 12 on the prefixed webKitOscillatorNode interface instead of the unprefixed 13 OscillatorNode. This way, this API is still available to apps using the prefixed 14 API but we do not support this legacy API if the app is using the modern unprefixed 15 API. 16 17 Test: webaudio/oscillatornode-legacy-api.html 18 19 * CMakeLists.txt: 20 * DerivedSources-input.xcfilelist: 21 * DerivedSources-output.xcfilelist: 22 * DerivedSources.make: 23 * Modules/webaudio/OscillatorNode.cpp: 24 (WebCore::OscillatorNode::create): 25 (WebCore::OscillatorNode::setType): 26 (WebCore::OscillatorNode::setPeriodicWave): 27 * Modules/webaudio/OscillatorNode.h: 28 * Modules/webaudio/OscillatorNode.idl: 29 * Modules/webaudio/WebKitAudioContext.cpp: 30 (WebCore::WebKitAudioContext::createWebKitOscillator): 31 * Modules/webaudio/WebKitAudioContext.h: 32 * Modules/webaudio/WebKitAudioContext.idl: 33 * Modules/webaudio/WebKitOscillatorNode.h: Copied from Source/WebCore/Modules/webaudio/OscillatorNode.idl. 34 (WebCore::WebKitOscillatorNode::create): 35 (WebCore::WebKitOscillatorNode::setWebKitPeriodicWave): 36 (WebCore::WebKitOscillatorNode::WebKitOscillatorNode): 37 * Modules/webaudio/WebKitOscillatorNode.idl: Copied from Source/WebCore/Modules/webaudio/OscillatorNode.idl. 38 * Sources.txt: 39 * WebCore.xcodeproj/project.pbxproj: 40 * bindings/js/WebCoreBuiltinNames.h: 41 1 42 2020-07-28 Karl Rackler <rackler@apple.com> 2 43 -
trunk/Source/WebCore/DerivedSources-input.xcfilelist
r265002 r265028 343 343 $(PROJECT_DIR)/Modules/webaudio/WebKitAudioPannerNode.idl 344 344 $(PROJECT_DIR)/Modules/webaudio/WebKitOfflineAudioContext.idl 345 $(PROJECT_DIR)/Modules/webaudio/WebKitOscillatorNode.idl 345 346 $(PROJECT_DIR)/Modules/webauthn/AttestationConveyancePreference.idl 346 347 $(PROJECT_DIR)/Modules/webauthn/AuthenticationExtensionsClientInputs.idl -
trunk/Source/WebCore/DerivedSources-output.xcfilelist
r265002 r265028 2137 2137 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitOfflineAudioContext.cpp 2138 2138 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitOfflineAudioContext.h 2139 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitOscillatorNode.cpp 2140 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitOscillatorNode.h 2139 2141 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitPlaybackTargetAvailabilityEvent.cpp 2140 2142 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWebKitPlaybackTargetAvailabilityEvent.h -
trunk/Source/WebCore/DerivedSources.make
r265002 r265028 426 426 $(WebCore)/Modules/webaudio/WebKitAudioPannerNode.idl \ 427 427 $(WebCore)/Modules/webaudio/WebKitOfflineAudioContext.idl \ 428 $(WebCore)/Modules/webaudio/WebKitOscillatorNode.idl \ 428 429 $(WebCore)/Modules/webauthn/AttestationConveyancePreference.idl \ 429 430 $(WebCore)/Modules/webauthn/AuthenticationExtensionsClientInputs.idl \ -
trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp
r264941 r265028 65 65 return result.releaseException(); 66 66 67 if (options.periodicWave .get())68 oscillator->setPeriodicWave( options.periodicWave.get());67 if (options.periodicWave) 68 oscillator->setPeriodicWave(*options.periodicWave); 69 69 else { 70 70 result = oscillator->setType(options.type); … … 126 126 } 127 127 128 setPeriodicWave( periodicWave);128 setPeriodicWave(*periodicWave); 129 129 m_type = type; 130 130 … … 315 315 } 316 316 317 void OscillatorNode::setPeriodicWave(PeriodicWave *periodicWave)318 { 319 ALWAYS_LOG(LOGIDENTIFIER, "sample rate = ", periodicWave ? periodicWave->sampleRate() : 0, ", wave size = ", periodicWave ? periodicWave->periodicWaveSize() : 0, ", rate scale = ", periodicWave ? periodicWave->rateScale() : 0);317 void OscillatorNode::setPeriodicWave(PeriodicWave& periodicWave) 318 { 319 ALWAYS_LOG(LOGIDENTIFIER, "sample rate = ", periodicWave.sampleRate(), ", wave size = ", periodicWave.periodicWaveSize(), ", rate scale = ", periodicWave.rateScale()); 320 320 ASSERT(isMainThread()); 321 321 322 322 // This synchronizes with process(). 323 323 auto locker = holdLock(m_processMutex); 324 m_periodicWave = periodicWave;324 m_periodicWave = &periodicWave; 325 325 m_type = OscillatorType::Custom; 326 326 } -
trunk/Source/WebCore/Modules/webaudio/OscillatorNode.h
r264941 r265028 36 36 // OscillatorNode is an audio generator of periodic waveforms. 37 37 38 class OscillatorNode final: public AudioScheduledSourceNode {38 class OscillatorNode : public AudioScheduledSourceNode { 39 39 WTF_MAKE_ISO_ALLOCATED(OscillatorNode); 40 40 public: … … 51 51 AudioParam* detune() { return m_detune.get(); } 52 52 53 void setPeriodicWave(PeriodicWave*); 53 void setPeriodicWave(PeriodicWave&); 54 55 protected: 56 explicit OscillatorNode(BaseAudioContext&, const OscillatorOptions& = { }); 54 57 55 58 private: 56 explicit OscillatorNode(BaseAudioContext&, const OscillatorOptions& = { });57 58 59 void process(size_t framesToProcess) final; 59 60 void reset() final; -
trunk/Source/WebCore/Modules/webaudio/OscillatorNode.idl
r264941 r265028 1 1 /* 2 2 * Copyright (C) 2012, Google Inc. All rights reserved. 3 * Copyright (C) 2016 , Apple Inc. All rights reserved.3 * Copyright (C) 2016-2020, Apple Inc. All rights reserved. 4 4 * 5 5 * Redistribution and use in source and binary forms, with or without … … 28 28 JSGenerateToJSObject, 29 29 ActiveDOMObject, 30 EnabledBySetting=ModernUnprefixedWebAudio 30 31 ] interface OscillatorNode : AudioScheduledSourceNode { 31 [MayThrowException , EnabledBySetting=ModernUnprefixedWebAudio] constructor (BaseAudioContext context, optional OscillatorOptions options);32 [MayThrowException] constructor (BaseAudioContext context, optional OscillatorOptions options); 32 33 33 34 attribute OscillatorType type; 34 35 // Playback state constants.36 const unsigned short UNSCHEDULED_STATE = 0;37 const unsigned short SCHEDULED_STATE = 1;38 const unsigned short PLAYING_STATE = 2;39 const unsigned short FINISHED_STATE = 3;40 41 readonly attribute unsigned short playbackState;42 35 43 36 readonly attribute AudioParam frequency; // in Hertz 44 37 readonly attribute AudioParam detune; // in Cents 45 38 46 void setPeriodicWave(PeriodicWave ? wave); // FIXME: The parameter should not be nullable.39 void setPeriodicWave(PeriodicWave wave); 47 40 }; -
trunk/Source/WebCore/Modules/webaudio/WebKitAudioContext.cpp
r264782 r265028 33 33 #include "PeriodicWave.h" 34 34 #include "WebKitAudioPannerNode.h" 35 #include "WebKitOscillatorNode.h" 35 36 #include <wtf/IsoMallocInlines.h> 36 37 … … 171 172 } 172 173 174 ExceptionOr<Ref<WebKitOscillatorNode>> WebKitAudioContext::createWebKitOscillator() 175 { 176 ALWAYS_LOG(LOGIDENTIFIER); 177 178 ASSERT(isMainThread()); 179 if (isStopped()) 180 return Exception { InvalidStateError }; 181 182 lazyInitialize(); 183 184 auto node = WebKitOscillatorNode::create(*this); 185 if (node.hasException()) 186 return node.releaseException(); 187 188 // Because this is an AudioScheduledSourceNode, the context keeps a reference until it has finished playing. 189 // When this happens, AudioScheduledSourceNode::finish() calls BaseAudioContext::notifyNodeFinishedProcessing(). 190 auto nodeValue = node.releaseReturnValue(); 191 refNode(nodeValue); 192 return nodeValue; 193 } 194 173 195 ExceptionOr<Ref<PeriodicWave>> WebKitAudioContext::createPeriodicWave(Float32Array& real, Float32Array& imaginary) 174 196 { -
trunk/Source/WebCore/Modules/webaudio/WebKitAudioContext.h
r264782 r265028 39 39 class PeriodicWave; 40 40 class WebKitAudioPannerNode; 41 class WebKitOscillatorNode; 41 42 42 43 // AudioContext is the cornerstone of the web audio API and all AudioNodes are created from it. … … 62 63 #endif 63 64 ExceptionOr<Ref<WebKitAudioPannerNode>> createWebKitPanner(); 65 ExceptionOr<Ref<WebKitOscillatorNode>> createWebKitOscillator(); 64 66 ExceptionOr<Ref<PeriodicWave>> createPeriodicWave(Float32Array& real, Float32Array& imaginary); 65 67 -
trunk/Source/WebCore/Modules/webaudio/WebKitAudioContext.idl
r263410 r265028 80 80 [MayThrowException] AnalyserNode createAnalyser(); 81 81 [MayThrowException] ScriptProcessorNode createScriptProcessor(optional unsigned long bufferSize = 0, optional unsigned long numberOfInputChannels = 2, optional unsigned long numberOfOutputChannels = 2); 82 [MayThrowException ]OscillatorNode createOscillator();82 [MayThrowException, ImplementedAs=createWebKitOscillator] WebKitOscillatorNode createOscillator(); 83 83 [MayThrowException] PeriodicWave createPeriodicWave(Float32Array real, Float32Array imag); 84 84 -
trunk/Source/WebCore/Modules/webaudio/WebKitOscillatorNode.h
r265027 r265028 1 1 /* 2 2 * Copyright (C) 2012, Google Inc. All rights reserved. 3 * Copyright (C) 20 16, Apple Inc. All rights reserved.3 * Copyright (C) 2020, Apple Inc. All rights reserved. 4 4 * 5 5 * Redistribution and use in source and binary forms, with or without … … 23 23 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 24 */ 25 26 [27 Conditional=WEB_AUDIO,28 JSGenerateToJSObject,29 ActiveDOMObject,30 ] interface OscillatorNode : AudioScheduledSourceNode {31 [MayThrowException, EnabledBySetting=ModernUnprefixedWebAudio] constructor (BaseAudioContext context, optional OscillatorOptions options);32 25 33 attribute OscillatorType type; 26 #pragma once 34 27 35 // Playback state constants. 36 const unsigned short UNSCHEDULED_STATE = 0; 37 const unsigned short SCHEDULED_STATE = 1; 38 const unsigned short PLAYING_STATE = 2; 39 const unsigned short FINISHED_STATE = 3; 28 #include "OscillatorNode.h" 40 29 41 readonly attribute unsigned short playbackState; 30 namespace WebCore { 42 31 43 readonly attribute AudioParam frequency; // in Hertz 44 readonly attribute AudioParam detune; // in Cents 32 class WebKitOscillatorNode final : public OscillatorNode { 33 public: 34 static ExceptionOr<Ref<WebKitOscillatorNode>> create(WebKitAudioContext& context) 35 { 36 return adoptRef(*new WebKitOscillatorNode(context)); 37 } 45 38 46 void setPeriodicWave(PeriodicWave? wave); // FIXME: The parameter should not be nullable. 39 void setWebKitPeriodicWave(PeriodicWave* wave) 40 { 41 if (!wave) 42 return; 43 setPeriodicWave(*wave); 44 } 45 46 private: 47 explicit WebKitOscillatorNode(WebKitAudioContext& context) 48 : OscillatorNode(context) 49 { 50 setType(OscillatorType::Sine); 51 } 52 53 const char* activeDOMObjectName() const final { return "WebKitOscillatorNode"; } 47 54 }; 55 56 } // namespace WebCore -
trunk/Source/WebCore/Modules/webaudio/WebKitOscillatorNode.idl
r265027 r265028 1 1 /* 2 2 * Copyright (C) 2012, Google Inc. All rights reserved. 3 * Copyright (C) 2016 , Apple Inc. All rights reserved.3 * Copyright (C) 2016-2020, Apple Inc. All rights reserved. 4 4 * 5 5 * Redistribution and use in source and binary forms, with or without … … 23 23 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 24 */ 25 25 26 26 [ 27 ActiveDOMObject, 27 28 Conditional=WEB_AUDIO, 29 EnabledBySetting=WebAudio&PrefixedWebAudio, 28 30 JSGenerateToJSObject, 29 ActiveDOMObject, 30 ] interface OscillatorNode : AudioScheduledSourceNode { 31 [MayThrowException, EnabledBySetting=ModernUnprefixedWebAudio] constructor (BaseAudioContext context, optional OscillatorOptions options); 32 31 InterfaceName=webkitOscillatorNode, 32 ] interface WebKitOscillatorNode : AudioScheduledSourceNode { 33 33 attribute OscillatorType type; 34 34 … … 44 44 readonly attribute AudioParam detune; // in Cents 45 45 46 void setPeriodicWave(PeriodicWave? wave); // FIXME: The parameter should not be nullable.46 [ImplementedAs=setWebKitPeriodicWave] void setPeriodicWave(PeriodicWave? wave); 47 47 }; -
trunk/Source/WebCore/Sources.txt
r265002 r265028 3570 3570 JSWebKitNamespace.cpp 3571 3571 JSWebKitOfflineAudioContext.cpp 3572 JSWebKitOscillatorNode.cpp 3572 3573 JSWebKitPlaybackTargetAvailabilityEvent.cpp 3573 3574 JSWebKitPoint.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r265002 r265028 2436 2436 833B9E361F508D8500E0E428 /* JSFileSystemFileEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 833B9E2C1F508D8000E0E428 /* JSFileSystemFileEntry.h */; }; 2437 2437 83407FC11E8D9C1700E048D3 /* VisibilityChangeClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 83407FC01E8D9C1200E048D3 /* VisibilityChangeClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2438 8343D98424D0DEE9009ABD49 /* WebKitOscillatorNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8343D98124D0DEA9009ABD49 /* WebKitOscillatorNode.h */; }; 2438 2439 834476EF1DA5BC5E002B5EB0 /* JSScrollLogicalPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = 83E9B3011DA5A51E00FFD8D4 /* JSScrollLogicalPosition.h */; }; 2439 2440 834476EF1DA5BC5E002B5EC1 /* JSScrollIntoViewOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 83E9B3011DA5A51E00FFD8E5 /* JSScrollIntoViewOptions.h */; }; … … 10413 10414 833CF70F20DB3F5F00141BCC /* JSPerformanceObserverCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPerformanceObserverCustom.cpp; sourceTree = "<group>"; }; 10414 10415 83407FC01E8D9C1200E048D3 /* VisibilityChangeClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VisibilityChangeClient.h; sourceTree = "<group>"; }; 10416 8343D98124D0DEA9009ABD49 /* WebKitOscillatorNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebKitOscillatorNode.h; sourceTree = "<group>"; }; 10417 8343D98324D0DEA9009ABD49 /* WebKitOscillatorNode.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = WebKitOscillatorNode.idl; sourceTree = "<group>"; }; 10415 10418 8348BFA91B85729500912F36 /* ClassCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClassCollection.cpp; sourceTree = "<group>"; }; 10416 10419 8348BFAA1B85729500912F36 /* ClassCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClassCollection.h; sourceTree = "<group>"; }; … … 29574 29577 831B61752499A59D00C07C79 /* WebKitOfflineAudioContext.h */, 29575 29578 831B61722499A59A00C07C79 /* WebKitOfflineAudioContext.idl */, 29579 8343D98124D0DEA9009ABD49 /* WebKitOscillatorNode.h */, 29580 8343D98324D0DEA9009ABD49 /* WebKitOscillatorNode.idl */, 29576 29581 ); 29577 29582 path = webaudio; … … 34006 34011 7A22732120C9FAFE00DB1DEF /* WebKitNSImageExtras.h in Headers */, 34007 34012 831B61772499A5BF00C07C79 /* WebKitOfflineAudioContext.h in Headers */, 34013 8343D98424D0DEE9009ABD49 /* WebKitOscillatorNode.h in Headers */, 34008 34014 A5DEBDA416FB908700836FE0 /* WebKitPlaybackTargetAvailabilityEvent.h in Headers */, 34009 34015 494BD7950F55C8EE00747828 /* WebKitPoint.h in Headers */, -
trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h
r263999 r265028 171 171 macro(OffscreenCanvas) \ 172 172 macro(OffscreenCanvasRenderingContext2D) \ 173 macro(OscillatorNode) \ 173 174 macro(PaintRenderingContext2D) \ 174 175 macro(PannerNode) \ … … 403 404 macro(webkitIndexedDB) \ 404 405 macro(webkitOfflineAudioContext) \ 406 macro(webkitOscillatorNode) \ 405 407 macro(window) \ 406 408 macro(writing) \
Note: See TracChangeset
for help on using the changeset viewer.