Web Audio: Don't create unnecessary DelayNode object.

We can check maxDelayTime argument in the factory to avoid unnecessary DelayNode
creation.

This CL doesn't change user-visible behavior.

BUG=

Review URL: https://codereview.chromium.org/1026663002

git-svn-id: svn://svn.chromium.org/blink/trunk@192303 bbb929c8-8fbe-4397-9dbb-9b2b20218538
diff --git a/Source/modules/webaudio/DelayNode.cpp b/Source/modules/webaudio/DelayNode.cpp
index 65b6a88..53b18f0 100644
--- a/Source/modules/webaudio/DelayNode.cpp
+++ b/Source/modules/webaudio/DelayNode.cpp
@@ -35,18 +35,23 @@
 
 const double maximumAllowedDelayTime = 180;
 
-DelayNode::DelayNode(AudioContext* context, float sampleRate, double maxDelayTime, ExceptionState& exceptionState)
+DelayNode::DelayNode(AudioContext* context, float sampleRate, double maxDelayTime)
     : AudioBasicProcessorNode(NodeTypeDelay, context, sampleRate)
 {
+    m_processor = new DelayProcessor(context, sampleRate, 1, maxDelayTime);
+}
+
+DelayNode* DelayNode::create(AudioContext* context, float sampleRate, double maxDelayTime, ExceptionState& exceptionState)
+{
     if (maxDelayTime <= 0 || maxDelayTime >= maximumAllowedDelayTime) {
         exceptionState.throwDOMException(
             NotSupportedError,
             "max delay time (" + String::number(maxDelayTime)
             + ") must be between 0 and " + String::number(maximumAllowedDelayTime)
             + ", exclusive.");
-        return;
+        return nullptr;
     }
-    m_processor = new DelayProcessor(context, sampleRate, 1, maxDelayTime);
+    return new DelayNode(context, sampleRate, maxDelayTime);
 }
 
 AudioParam* DelayNode::delayTime()
diff --git a/Source/modules/webaudio/DelayNode.h b/Source/modules/webaudio/DelayNode.h
index 997d524..5cdd602 100644
--- a/Source/modules/webaudio/DelayNode.h
+++ b/Source/modules/webaudio/DelayNode.h
@@ -37,15 +37,11 @@
 class DelayNode final : public AudioBasicProcessorNode {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static DelayNode* create(AudioContext* context, float sampleRate, double maxDelayTime, ExceptionState& exceptionState)
-    {
-        return new DelayNode(context, sampleRate, maxDelayTime, exceptionState);
-    }
-
+    static DelayNode* create(AudioContext*, float sampleRate, double maxDelayTime, ExceptionState&);
     AudioParam* delayTime();
 
 private:
-    DelayNode(AudioContext*, float sampleRate, double maxDelayTime, ExceptionState&);
+    DelayNode(AudioContext*, float sampleRate, double maxDelayTime);
 
     DelayProcessor* delayProcessor() { return static_cast<DelayProcessor*>(processor()); }
 };