| Index: third_party/WebKit/Source/modules/webaudio/AudioContext.cpp | 
| diff --git a/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp b/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp | 
| index 920678225ca55b9c22d8908fa4de6b3d7bce0f17..519458f7256948bf092bf4a30e7c9aecf6edb73d 100644 | 
| --- a/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp | 
| +++ b/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp | 
| @@ -11,8 +11,11 @@ | 
| #include "core/dom/ExceptionCode.h" | 
| #include "core/frame/UseCounter.h" | 
| #include "modules/webaudio/AudioBufferCallback.h" | 
| +#include "modules/webaudio/AudioContextOptions.h" | 
| +#include "modules/webaudio/DefaultAudioDestinationNode.h" | 
| #include "platform/Histogram.h" | 
| #include "platform/audio/AudioUtilities.h" | 
| +#include "public/platform/WebAudioLatencyHint.h" | 
|  | 
| #if DEBUG_AUDIONODE_REFERENCES | 
| #include <stdio.h> | 
| @@ -27,6 +30,7 @@ static unsigned s_hardwareContextCount = 0; | 
| static unsigned s_contextId = 0; | 
|  | 
| AudioContext* AudioContext::create(Document& document, | 
| +                                   const AudioContextOptions& contextOptions, | 
| ExceptionState& exceptionState) { | 
| DCHECK(isMainThread()); | 
|  | 
| @@ -41,7 +45,14 @@ AudioContext* AudioContext::create(Document& document, | 
| return nullptr; | 
| } | 
|  | 
| -  AudioContext* audioContext = new AudioContext(document); | 
| +  WebAudioLatencyHint latencyHint(WebAudioLatencyHint::CategoryInteractive); | 
| +  if (contextOptions.latencyHint().isAudioContextLatencyCategory()) { | 
| +    latencyHint = WebAudioLatencyHint( | 
| +        contextOptions.latencyHint().getAsAudioContextLatencyCategory()); | 
| +  } | 
| +  // TODO: add support for latencyHint().isDouble() | 
| + | 
| +  AudioContext* audioContext = new AudioContext(document, latencyHint); | 
| audioContext->suspendIfNeeded(); | 
|  | 
| if (!AudioUtilities::isValidAudioBufferSampleRate( | 
| @@ -83,8 +94,12 @@ AudioContext* AudioContext::create(Document& document, | 
| return audioContext; | 
| } | 
|  | 
| -AudioContext::AudioContext(Document& document) | 
| -    : BaseAudioContext(&document), m_contextId(s_contextId++) {} | 
| +AudioContext::AudioContext(Document& document, | 
| +                           const WebAudioLatencyHint& latencyHint) | 
| +    : BaseAudioContext(&document), m_contextId(s_contextId++) { | 
| +  m_destinationNode = DefaultAudioDestinationNode::create(this, latencyHint); | 
| +  initialize(); | 
| +} | 
|  | 
| AudioContext::~AudioContext() { | 
| #if DEBUG_AUDIONODE_REFERENCES | 
| @@ -205,4 +220,8 @@ void AudioContext::stopRendering() { | 
| } | 
| } | 
|  | 
| +double AudioContext::baseLatency() const { | 
| +  return framesPerBuffer() * 2 / static_cast<double>(sampleRate()); | 
| +} | 
| + | 
| }  // namespace blink | 
|  |