tenfourfox/mobile/android/tests/browser/chrome/test_video_discovery.html
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

155 lines
5.8 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=953381
Migrated from Robocop: https://bugzilla.mozilla.org/show_bug.cgi?id=1184186
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 953381</title>
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="chrome://global/skin"/>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
<script type="application/javascript;version=1.7">
"use strict";
/*globals SimpleServiceDiscovery */
const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/SimpleServiceDiscovery.jsm");
// The chrome window
let chromeWin;
// Track the <browser> where the tests are happening
let browser;
function middle(element) {
let rect = element.getBoundingClientRect();
let x = (rect.right - rect.left) / 2 + rect.left;
let y = (rect.bottom - rect.top) / 2 + rect.top;
return [x, y];
}
// We must register a device and make a "mock" service for the device
var testDevice = {
id: "test:dummy",
target: "test:service",
factory: function(service) { /* dummy */ },
types: ["video/mp4", "video/webm"],
extensions: ["mp4", "webm"]
};
function setup_browser() {
chromeWin = Services.wm.getMostRecentWindow("navigator:browser");
let BrowserApp = chromeWin.BrowserApp;
SimpleTest.registerCleanupFunction(function cleanup() {
BrowserApp.closeTab(BrowserApp.getTabForBrowser(browser));
SimpleServiceDiscovery.unregisterDevice(testDevice);
});
// We need to register a device or processService will ignore us
SimpleServiceDiscovery.registerDevice(testDevice);
// Create a pretend service
let service = {
location: "http://mochi.test:8888/chrome/mobile/android/tests/browser/chrome/simpleservice.xml",
target: "test:service"
};
dump("Force a detailed ping from a pretend service");
// Poke the service directly to get the discovery to happen
SimpleServiceDiscovery._processService(service);
// Load our test web page with <video> elements
let url = "http://mochi.test:8888/chrome/mobile/android/tests/browser/chrome/video_discovery.html";
browser = BrowserApp.addTab(url, { selected: true, parentId: BrowserApp.selectedTab.id }).browser;
browser.addEventListener("load", function startTests(event) {
browser.removeEventListener("load", startTests, true);
Services.tm.mainThread.dispatch(test_video, Ci.nsIThread.DISPATCH_NORMAL);
}, true);
}
let videoDiscoveryTests = [
{ id: "simple-mp4", source: "http://mochi.test:8888/simple.mp4", poster: "http://mochi.test:8888/simple.png", text: "simple video with mp4 src" },
{ id: "simple-fail", pass: false, text: "simple video with no mp4 src" },
{ id: "with-sources-mp4", source: "http://mochi.test:8888/simple.mp4", text: "video with mp4 extension source child" },
{ id: "with-sources-webm", source: "http://mochi.test:8888/simple.webm", text: "video with webm extension source child" },
{ id: "with-sources-fail", pass: false, text: "video with no mp4 extension source child" },
{ id: "with-sources-mimetype-mp4", source: "http://mochi.test:8888/simple-video-mp4", text: "video with mp4 mimetype source child" },
{ id: "with-sources-mimetype-webm", source: "http://mochi.test:8888/simple-video-webm", text: "video with webm mimetype source child" },
{ id: "simple-fetch-pass", source: "http://mochi.test:8888/chrome/mobile/android/tests/browser/chrome/video_discovery.sjs?type=video/mp4", text: "simple video with mp4 mimetype fetched from server" },
{ id: "simple-fetch-fail", pass: false, text: "simple video with non-video mimetype fetched from server" },
{ id: "video-overlay", source: "http://mochi.test:8888/simple.mp4", text: "div overlay covering a simple video with mp4 src" }
];
let expectedTests = videoDiscoveryTests.length;
function execute_video_test(test) {
let element = browser.contentDocument.getElementById(test.id);
if (element) {
let [x, y] = middle(element);
dump("Starting to getVideo");
chromeWin.CastingApps.getVideo(element, x, y, (video) => {
dump("Completed getVideo");
if (video) {
dump("video source: " + video.source);
let matchPoster = (test.poster == video.poster);
let matchSource = (test.source == video.source);
ok(matchPoster && matchSource && test.pass, test.text);
} else {
ok(!test.pass, test.text);
}
expectedTests--;
if (expectedTests == 0) {
SimpleTest.finish();
}
});
} else {
ok(false, "test element not found: [" + test.id + "]");
SimpleTest.finish();
}
}
function test_video() {
let videoTest;
while ((videoTest = videoDiscoveryTests.shift())) {
if (!("poster" in videoTest)) {
videoTest.poster = "";
}
if (!("pass" in videoTest)) {
videoTest.pass = true;
}
execute_video_test(videoTest);
}
}
SimpleTest.waitForExplicitFinish();
// On debug runs, 10 assertions typically observed; 5 each of:
// - ASSERTION: cancel with non-failure status code: 'NS_FAILED(status)'
// - ASSERTION: OnDataAvailable implementation consumed no data: 'Error'
SimpleTest.expectAssertions(0,10);
setup_browser();
</script>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=953381">Mozilla Bug 953381</a>
<br>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1184186">Migrated from Robocop testVideoDiscovery</a>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
</pre>
</body>
</html>