Chromium Code Reviews| Index: Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp |
| diff --git a/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp b/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp |
| index 5e7fd020a86f6056034fe76be2c43acdd12b5c62..47cf9ab16abc892a2fda18485eda2891a4d17800 100644 |
| --- a/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp |
| +++ b/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp |
| @@ -8,6 +8,7 @@ |
| #include "bindings/core/v8/ScriptPromiseResolver.h" |
| #include "bindings/core/v8/ScriptState.h" |
| #include "core/dom/ExecutionContext.h" |
| +#include "modules/audio_output_devices/SetSinkIdCallbacks.h" |
| #include "platform/Logging.h" |
| namespace blink { |
| @@ -24,10 +25,24 @@ String HTMLMediaElementAudioOutputDevice::sinkId(HTMLMediaElement& element) |
| return aodElement.m_sinkId; |
| } |
| -ScriptPromise HTMLMediaElementAudioOutputDevice::setSinkId(ScriptState* scriptState, HTMLMediaElement& element, const String& newSinkId) |
| +ScriptPromise HTMLMediaElementAudioOutputDevice::setSinkId(ScriptState* scriptState, HTMLMediaElement& element, const String& sinkId) |
| { |
| WTF_LOG(Media, __FUNCTION__); |
| - return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(NotSupportedError, "Operation not supported")); |
| + WebMediaPlayer* webMediaPlayer = element.webMediaPlayer(); |
| + if (!webMediaPlayer) |
| + return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(AbortError, "No media player available")); |
| + |
| + // According to spec, "id-multimedia" is equivalent to "" |
| + String newSinkId = (sinkId == "id-multimedia") ? "" : sinkId; |
|
Mike West
2015/06/17 11:44:37
The spec isn't terribly clear here. https://w3c.gi
Guido Urdaneta
2015/06/17 12:25:15
You are right. I just removed support for id-multi
|
| + RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
| + ScriptPromise promise = resolver->promise(); |
|
Mike West
2015/06/17 11:44:37
Nit: Could you just return `resolver->promise()` r
Guido Urdaneta
2015/06/17 12:25:15
Done.
|
| + HTMLMediaElementAudioOutputDevice& aodElement = HTMLMediaElementAudioOutputDevice::from(element); |
| + if (newSinkId == aodElement.m_sinkId) |
| + resolver->resolve(); |
| + else |
| + webMediaPlayer->setSinkId(newSinkId, new SetSinkIdCallbacks(resolver, element, newSinkId)); |
| + |
| + return promise; |
| } |
| const char* HTMLMediaElementAudioOutputDevice::supplementName() |