Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / webaudio / OfflineAudioContext.cpp
index 4cf7947..0378172 100644 (file)
 
 #include "modules/webaudio/OfflineAudioContext.h"
 
-#include "bindings/v8/ExceptionMessages.h"
-#include "bindings/v8/ExceptionState.h"
+#include "bindings/core/v8/ExceptionMessages.h"
+#include "bindings/core/v8/ExceptionState.h"
 #include "core/dom/Document.h"
 #include "core/dom/ExceptionCode.h"
 #include "core/dom/ExecutionContext.h"
+#include "platform/audio/AudioUtilities.h"
 
-namespace WebCore {
+namespace blink {
 
-PassRefPtr<OfflineAudioContext> OfflineAudioContext::create(ExecutionContext* context, unsigned numberOfChannels, size_t numberOfFrames, float sampleRate, ExceptionState& exceptionState)
+OfflineAudioContext* OfflineAudioContext::create(ExecutionContext* context, unsigned numberOfChannels, size_t numberOfFrames, float sampleRate, ExceptionState& exceptionState)
 {
     // FIXME: add support for workers.
     if (!context || !context->isDocument()) {
@@ -53,31 +54,53 @@ PassRefPtr<OfflineAudioContext> OfflineAudioContext::create(ExecutionContext* co
         return 0;
     }
 
-    if (numberOfChannels > 10) {
-        exceptionState.throwDOMException(SyntaxError, "number of channels (" + String::number(numberOfChannels) + ") exceeds maximum (10).");
+    if (numberOfChannels > AudioContext::maxNumberOfChannels()) {
+        exceptionState.throwDOMException(
+            IndexSizeError,
+            ExceptionMessages::indexOutsideRange<unsigned>(
+                "number of channels",
+                numberOfChannels,
+                0,
+                ExceptionMessages::InclusiveBound,
+                AudioContext::maxNumberOfChannels(),
+                ExceptionMessages::InclusiveBound));
         return 0;
     }
 
-    if (!isSampleRateRangeGood(sampleRate)) {
-        exceptionState.throwDOMException(SyntaxError, "sample rate (" + String::number(sampleRate) + ") must be in the range 44100-96000 Hz.");
-        return 0;
+    if (!AudioUtilities::isValidAudioBufferSampleRate(sampleRate)) {
+        exceptionState.throwDOMException(
+            IndexSizeError,
+            ExceptionMessages::indexOutsideRange(
+                "sampleRate", sampleRate,
+                AudioUtilities::minAudioBufferSampleRate(), ExceptionMessages::InclusiveBound,
+                AudioUtilities::maxAudioBufferSampleRate(), ExceptionMessages::InclusiveBound));
+        return nullptr;
+    }
+
+    OfflineAudioContext* audioContext = new OfflineAudioContext(document, numberOfChannels, numberOfFrames, sampleRate);
+
+    if (!audioContext->destination()) {
+        exceptionState.throwDOMException(
+            NotSupportedError,
+            "OfflineAudioContext(" + String::number(numberOfChannels)
+            + ", " + String::number(numberOfFrames)
+            + ", " + String::number(sampleRate)
+            + ")");
     }
 
-    RefPtr<OfflineAudioContext> audioContext(adoptRef(new OfflineAudioContext(document, numberOfChannels, numberOfFrames, sampleRate)));
     audioContext->suspendIfNeeded();
-    return audioContext.release();
+    return audioContext;
 }
 
 OfflineAudioContext::OfflineAudioContext(Document* document, unsigned numberOfChannels, size_t numberOfFrames, float sampleRate)
     : AudioContext(document, numberOfChannels, numberOfFrames, sampleRate)
 {
-    ScriptWrappable::init(this);
 }
 
 OfflineAudioContext::~OfflineAudioContext()
 {
 }
 
-} // namespace WebCore
+} // namespace blink
 
 #endif // ENABLE(WEB_AUDIO)