Index: third_party/WebKit/Source/modules/media_capabilities/MediaCapabilities.cpp |
diff --git a/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilities.cpp b/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilities.cpp |
index c3a22e1bcc060035bb1086ce3fd72ac3fb577d50..73f13ae144a7cab3458eb4125fce76450b3a855a 100644 |
--- a/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilities.cpp |
+++ b/third_party/WebKit/Source/modules/media_capabilities/MediaCapabilities.cpp |
@@ -4,14 +4,88 @@ |
#include "modules/media_capabilities/MediaCapabilities.h" |
+#include "bindings/core/v8/CallbackPromiseAdapter.h" |
#include "bindings/core/v8/ScriptPromise.h" |
#include "bindings/core/v8/ScriptPromiseResolver.h" |
#include "bindings/core/v8/ScriptState.h" |
#include "modules/media_capabilities/MediaConfiguration.h" |
#include "modules/media_capabilities/MediaDecodingAbility.h" |
+#include "public/platform/Platform.h" |
+#include "public/platform/modules/media_capabilities/WebMediaCapabilitiesClient.h" |
+#include "public/platform/modules/media_capabilities/WebMediaConfiguration.h" |
+#include "public/platform/modules/media_capabilities/WebMediaDecodingAbility.h" |
namespace blink { |
+namespace { |
+ |
+WebAudioConfiguration toWebAudioConfiguration( |
+ const AudioConfiguration& configuration) { |
+ WebAudioConfiguration webConfiguration; |
+ |
+ // contentType is mandatory. |
+ DCHECK(configuration.hasContentType()); |
+ webConfiguration.contentType = configuration.contentType(); |
+ |
+ // channels is optional and will be set to a null WebString if not present. |
+ webConfiguration.channels = configuration.hasChannels() |
+ ? WebString(configuration.channels()) |
+ : WebString(); |
+ |
+ if (configuration.hasBitrate()) |
+ webConfiguration.bitrate = configuration.bitrate(); |
+ |
+ if (configuration.hasSamplerate()) |
+ webConfiguration.samplerate = configuration.samplerate(); |
+ |
+ return webConfiguration; |
+} |
+ |
+WebVideoConfiguration toWebVideoConfiguration( |
+ const VideoConfiguration& configuration) { |
+ WebVideoConfiguration webConfiguration; |
+ |
+ // All the properties are mandatory. |
+ DCHECK(configuration.hasContentType()); |
+ webConfiguration.contentType = configuration.contentType(); |
+ |
+ DCHECK(configuration.hasWidth()); |
+ webConfiguration.width = configuration.width(); |
+ |
+ DCHECK(configuration.hasHeight()); |
+ webConfiguration.height = configuration.height(); |
+ |
+ DCHECK(configuration.hasBitrate()); |
+ webConfiguration.bitrate = configuration.bitrate(); |
+ |
+ DCHECK(configuration.hasFramerate()); |
+ webConfiguration.framerate = configuration.framerate(); |
+ |
+ return webConfiguration; |
+} |
+ |
+WebMediaConfiguration toWebMediaConfiguration( |
+ const MediaConfiguration& configuration) { |
+ WebMediaConfiguration webConfiguration; |
+ |
+ // type is mandatory. |
+ DCHECK(configuration.hasType()); |
+ |
+ if (configuration.hasAudio()) { |
+ webConfiguration.audioConfiguration = |
+ toWebAudioConfiguration(configuration.audio()); |
+ } |
+ |
+ if (configuration.hasVideo()) { |
+ webConfiguration.videoConfiguration = |
+ toWebVideoConfiguration(configuration.video()); |
+ } |
+ |
+ return webConfiguration; |
+} |
+ |
+} // anonymous namespace |
+ |
MediaCapabilities::MediaCapabilities() = default; |
ScriptPromise MediaCapabilities::query( |
@@ -19,7 +93,12 @@ ScriptPromise MediaCapabilities::query( |
const MediaConfiguration& configuration) { |
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
ScriptPromise promise = resolver->promise(); |
- resolver->resolve(new MediaDecodingAbility()); |
+ |
+ Platform::current()->mediaCapabilitiesClient()->query( |
+ toWebMediaConfiguration(configuration), |
+ WTF::makeUnique<CallbackPromiseAdapter<MediaDecodingAbility, void>>( |
+ resolver)); |
+ |
return promise; |
} |