Chromium Code Reviews| 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; |
|
hongchan
2016/09/12 18:56:32
return nullptr;
|
| + |
| + 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); |