Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1621)

Unified Diff: Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp

Issue 1188203002: Implementation of setSinkId() for HTMLMediaElement. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix missing #include and broken previous upload Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()

Powered by Google App Engine
This is Rietveld 408576698