| Index: third_party/WebKit/Source/modules/webaudio/OscillatorNode.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webaudio/OscillatorNode.cpp b/third_party/WebKit/Source/modules/webaudio/OscillatorNode.cpp
|
| index 4e0ec6a716d5fe19ac0c3d765c3dda4942182e3a..ebcc655ca99e312cb08ab6f0a0b4b8a56c543fa9 100644
|
| --- a/third_party/WebKit/Source/modules/webaudio/OscillatorNode.cpp
|
| +++ b/third_party/WebKit/Source/modules/webaudio/OscillatorNode.cpp
|
| @@ -354,6 +354,48 @@ OscillatorNode* OscillatorNode::create(BaseAudioContext& context, ExceptionState
|
| return new OscillatorNode(context);
|
| }
|
|
|
| +OscillatorNode* OscillatorNode::create(BaseAudioContext* context, const OscillatorOptions& options, ExceptionState& exceptionState)
|
| +{
|
| + OscillatorNode* node = create(*context, exceptionState);
|
| +
|
| + if (!node)
|
| + return node;
|
| +
|
| + node->handleChannelOptions(options, exceptionState);
|
| +
|
| + if (options.hasType()) {
|
| + if (options.type() == "custom" && !options.hasPeriodicWave()) {
|
| + exceptionState.throwDOMException(
|
| + InvalidStateError,
|
| + "'type' cannot be set to 'custom' without also specifying 'periodicWave'");
|
| + return nullptr;
|
| + }
|
| + if (options.type() != "custom" && options.hasPeriodicWave()) {
|
| + exceptionState.throwDOMException(
|
| + InvalidStateError,
|
| + "'type' MUST be 'custom' instead of '"
|
| + + options.type()
|
| + + "' if 'periodicWave' is also given");
|
| + return nullptr;
|
| + }
|
| +
|
| + // At this both type and periodicWave are consistently defined. In that
|
| + // case, don't set the type if periodicWave is specified because that
|
| + // will cause an (incorrect) error to be signaled.
|
| + if (options.type() != "custom")
|
| + node->setType(options.type(), exceptionState);
|
| + }
|
| + if (options.hasDetune())
|
| + node->detune()->setValue(options.detune());
|
| + if (options.hasFrequency())
|
| + node->frequency()->setValue(options.frequency());
|
| +
|
| + if (options.hasPeriodicWave())
|
| + node->setPeriodicWave(options.periodicWave());
|
| +
|
| + return node;
|
| +}
|
| +
|
| DEFINE_TRACE(OscillatorNode)
|
| {
|
| visitor->trace(m_frequency);
|
|
|