Index: third_party/WebKit/LayoutTests/media/mediasession/mojo/resources/mediasessionservice-mock.js |
diff --git a/third_party/WebKit/LayoutTests/media/mediasession/mojo/resources/mediasessionservice-mock.js b/third_party/WebKit/LayoutTests/media/mediasession/mojo/resources/mediasessionservice-mock.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..833db371d64361a2c46db7508c08f616902aad6b |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/media/mediasession/mojo/resources/mediasessionservice-mock.js |
@@ -0,0 +1,72 @@ |
+/* |
+ * mediasessionservice-mock contains a mock implementation of MediaSessionService. |
+ */ |
+ |
+"use strict"; |
+ |
+function mojoString16ToJS(mojoString16) { |
+ return String.fromCharCode.apply(null, mojoString16.data); |
+} |
+ |
+function mojoImageToJS(mojoImage) { |
+ var src = mojoImage.src.url; |
+ var type = mojoString16ToJS(mojoImage.type); |
+ var sizes = ""; |
+ for (var i = 0; i < mojoImage.sizes.length; i++) { |
+ if (i > 0) |
+ sizes += " "; |
+ |
+ var mojoSize = mojoImage.sizes[i]; |
+ sizes += mojoSize.width.toString() + "x" + mojoSize.height.toString(); |
+ } |
+ return { src: src, type: type, sizes: sizes }; |
+} |
+ |
+function mojoMetadataToJS(mojoMetadata) { |
+ if (mojoMetadata == null) |
+ return null; |
+ |
+ var title = mojoString16ToJS(mojoMetadata.title); |
+ var artist = mojoString16ToJS(mojoMetadata.artist); |
+ var album = mojoString16ToJS(mojoMetadata.album); |
+ var artwork = []; |
+ for (var i = 0; i < mojoMetadata.artwork.length; i++) |
+ artwork.push(mojoImageToJS(mojoMetadata.artwork[i])); |
+ |
+ return new MediaMetadata({title: title, artist: artist, album: album, artwork: artwork}); |
+} |
+ |
+let mediaSessionServiceMock = loadMojoModules( |
+ 'mediaSessionServiceMock', |
+ ['third_party/WebKit/public/platform/modules/mediasession/media_session.mojom', |
+ 'mojo/public/js/router', |
+ ]).then(mojo => { |
+ let [mediaSessionService, router] = mojo.modules; |
+ |
+ class MediaSessionServiceMock { |
+ constructor(interfaceProvider) { |
+ interfaceProvider.addInterfaceOverrideForTesting( |
+ mediaSessionService.MediaSessionService.name, |
+ handle => this.connectMediaSessionService_(handle)); |
+ this.interfaceProvider_ = interfaceProvider; |
+ this.pendingResponse_ = null; |
+ } |
+ |
+ connectMediaSessionService_(handle) { |
+ this.mediaSessionServiceStub_ = new mediaSessionService.MediaSessionService.stubClass(this); |
+ this.mediaSessionServiceRouter_ = new router.Router(handle); |
+ this.mediaSessionServiceRouter_.setIncomingReceiver(this.mediaSessionServiceStub_); |
+ } |
+ |
+ setMetadata(metadata) { |
+ if (!!this.metadataCallback_) |
+ this.metadataCallback_(mojoMetadataToJS(metadata)); |
+ } |
+ |
+ setMetadataCallback(callback) { |
+ this.metadataCallback_ = callback; |
+ } |
+ } |
+ |
+ return new MediaSessionServiceMock(mojo.frameInterfaces); |
+ }); |