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

Unified Diff: third_party/WebKit/LayoutTests/media/mediasession/mojo/resources/mediasessionservice-mock.js

Issue 2401013002: Make MediaSession per frame as an attribute of Navigator (Closed)
Patch Set: split mojo tests Created 4 years, 2 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: 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);
+ });

Powered by Google App Engine
This is Rietveld 408576698