Backed out changeset 43c2bea152ce (bug 1148033) for test_broadcastchannel_mozbrowser.html failures.

This commit is contained in:
Ryan VanderMeulen 2015-04-02 14:16:30 -04:00
parent b5f48ea500
commit 698be8851c
11 changed files with 31 additions and 463 deletions

View File

@ -56,68 +56,53 @@ GetOrigin(nsIPrincipal* aPrincipal, nsAString& aOrigin, ErrorResult& aRv)
{
MOZ_ASSERT(aPrincipal);
bool unknownAppId;
aRv = aPrincipal->GetUnknownAppId(&unknownAppId);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
uint16_t appStatus = aPrincipal->GetAppStatus();
if (!unknownAppId) {
uint32_t appId;
aRv = aPrincipal->GetAppId(&appId);
if (appStatus == nsIPrincipal::APP_STATUS_NOT_INSTALLED) {
nsAutoString tmp;
aRv = nsContentUtils::GetUTFOrigin(aPrincipal, tmp);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
if (appId != nsIScriptSecurityManager::NO_APP_ID) {
// If we are in "app code", use manifest URL as unique origin since
// multiple apps can share the same origin but not same broadcast
// messages.
nsresult rv;
nsCOMPtr<nsIAppsService> appsService =
do_GetService("@mozilla.org/AppsService;1", &rv);
if (NS_WARN_IF(NS_FAILED(rv))) {
aRv.Throw(rv);
aOrigin = tmp;
if (aOrigin.EqualsASCII("null")) {
nsCOMPtr<nsIURI> uri;
aRv = aPrincipal->GetURI(getter_AddRefs(uri));
if (NS_WARN_IF(aRv.Failed())) {
return;
}
appsService->GetManifestURLByLocalId(appId, aOrigin);
return;
if (NS_WARN_IF(!uri)) {
aRv.Throw(NS_ERROR_FAILURE);
return;
}
nsAutoCString spec;
aRv = uri->GetSpec(spec);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
aOrigin = NS_ConvertUTF8toUTF16(spec);
}
}
nsAutoString tmp;
aRv = nsContentUtils::GetUTFOrigin(aPrincipal, tmp);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
// 'null' means an unknown origin (it can be chrome code or it can be some
// about: page).
uint32_t appId = aPrincipal->GetAppId();
aOrigin = tmp;
if (!aOrigin.EqualsASCII("null")) {
// If we are in "app code", use manifest URL as unique origin since
// multiple apps can share the same origin but not same broadcast messages.
nsresult rv;
nsCOMPtr<nsIAppsService> appsService =
do_GetService("@mozilla.org/AppsService;1", &rv);
if (NS_WARN_IF(NS_FAILED(rv))) {
aRv.Throw(rv);
return;
}
nsCOMPtr<nsIURI> uri;
aRv = aPrincipal->GetURI(getter_AddRefs(uri));
if (NS_WARN_IF(aRv.Failed())) {
return;
}
if (NS_WARN_IF(!uri)) {
aRv.Throw(NS_ERROR_FAILURE);
return;
}
nsAutoCString spec;
aRv = uri->GetSpec(spec);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
aOrigin = NS_ConvertUTF8toUTF16(spec);
appsService->GetManifestURLByLocalId(appId, aOrigin);
}
nsIPrincipal*

View File

@ -1,5 +1,5 @@
[DEFAULT]
skip-if = e10s || buildapp == 'b2g'
skip-if = buildapp == 'b2g'
support-files =
blank.html

View File

@ -1,20 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>MozBrowser iframe</title>
</head>
<body>
<div id="container"></div>
<script type="application/javascript;version=1.7">
var ifr = document.createElement('iframe');
ifr.src = 'http://mochi.test:8888/tests/dom/broadcastchannel/tests/iframe_mozbrowser.html';
ifr.onload = function() { alert('DONE'); }
var domParent = document.getElementById('container');
domParent.appendChild(ifr);
</script>
</body>
</html>

View File

@ -1,21 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>MozBrowser iframe</title>
</head>
<body>
<div id="container"></div>
<script type="application/javascript;version=1.7">
var ifr = document.createElement('iframe');
ifr.setAttribute('mozbrowser', true);
ifr.src = 'http://mochi.test:8888/tests/dom/broadcastchannel/tests/iframe_mozbrowser2.html';
ifr.onload = function() { alert('DONE'); }
var domParent = document.getElementById('container');
domParent.appendChild(ifr);
</script>
</body>
</html>

View File

@ -1,15 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>MozBrowser iframe</title>
</head>
<body>
<script type="application/javascript;version=1.7">
var bc = new BroadcastChannel('foobar');
bc.postMessage('This is wrong!');
</script>
</body>
</html>

View File

@ -1,15 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>MozBrowser iframe</title>
</head>
<body>
<script type="application/javascript;version=1.7">
var bc = new BroadcastChannel('foobar');
bc.postMessage('This is wrong!');
</script>
</body>
</html>

View File

@ -1,6 +0,0 @@
{
"name": "BroadcastChannel",
"description": "BroadcastChannel app",
"launch_path": "/tests/dom/broadcastchannel/tests/TESTTOKEN",
"icons": { "128": "default_icon" }
}

View File

@ -6,12 +6,6 @@ support-files =
broadcastchannel_worker.js
broadcastchannel_worker_alive.js
broadcastchannel_worker_any.js
file_mozbrowser.html
file_mozbrowser2.html
iframe_mozbrowser.html
iframe_mozbrowser2.html
server.sjs
manifest.webapp
[test_broadcastchannel_any.html]
[test_broadcastchannel_basic.html]
@ -21,7 +15,3 @@ support-files =
[test_broadcastchannel_sharedWorker.html]
[test_broadcastchannel_worker.html]
[test_broadcastchannel_worker_alive.html]
[test_broadcastchannel_mozbrowser.html]
skip-if = e10s
[test_broadcastchannel_mozbrowser2.html]
skip-if = e10s

View File

@ -1,56 +0,0 @@
var gBasePath = "tests/dom/broadcastchannel/tests/";
function handleRequest(request, response) {
var query = getQuery(request);
var testToken = '';
if ('testToken' in query) {
testToken = query.testToken;
}
var template = 'manifest.webapp';
if ('template' in query) {
template = query.template;
}
var template = gBasePath + template;
response.setHeader("Content-Type", "application/x-web-app-manifest+json", false);
response.write(readTemplate(template).replace(/TESTTOKEN/g, testToken));
}
// Copy-pasted incantations. There ought to be a better way to synchronously read
// a file into a string, but I guess we're trying to discourage that.
function readTemplate(path) {
var file = Components.classes["@mozilla.org/file/directory_service;1"].
getService(Components.interfaces.nsIProperties).
get("CurWorkD", Components.interfaces.nsILocalFile);
var fis = Components.classes['@mozilla.org/network/file-input-stream;1'].
createInstance(Components.interfaces.nsIFileInputStream);
var cis = Components.classes["@mozilla.org/intl/converter-input-stream;1"].
createInstance(Components.interfaces.nsIConverterInputStream);
var split = path.split("/");
for(var i = 0; i < split.length; ++i) {
file.append(split[i]);
}
fis.init(file, -1, -1, false);
cis.init(fis, "UTF-8", 0, 0);
var data = "";
let str = {};
let read = 0;
do {
read = cis.readString(0xffffffff, str); // read as much as we can and put it in str.value
data += str.value;
} while (read != 0);
cis.close();
return data;
}
function getQuery(request) {
var query = {};
request.queryString.split('&').forEach(function (val) {
var [name, value] = val.split('=');
query[name] = unescape(value);
});
return query;
}

View File

@ -1,137 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Test for BroadcastChannel - iframe mozbrowser</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<div id="container"></div>
<script type="application/javascript">
var gHostedManifestURL = 'http://test/tests/dom/broadcastchannel/tests/server.sjs?testToken=file_mozbrowser.html';
var gApp;
function cbError() {
ok(false, "Error callback invoked");
finish();
}
function createBC() {
var bc = new BroadcastChannel('foobar');
bc.onmessage = function(e) {
is(e.data, "Done!", "A message has been received!");
nextStep();
}
nextStep();
}
function completeOperation() {
var bc = new BroadcastChannel('foobar');
bc.postMessage("Done!");
}
function installApp() {
var request = navigator.mozApps.install(gHostedManifestURL);
request.onerror = cbError;
request.onsuccess = function() {
gApp = request.result;
nextStep();
}
}
function uninstallApp() {
// Uninstall the app.
var request = navigator.mozApps.mgmt.uninstall(gApp);
request.onerror = cbError;
request.onsuccess = function() {
// All done.
info("All done");
nextStep();
}
}
function testApp() {
var ifr = document.createElement('iframe');
ifr.setAttribute('mozbrowser', 'true');
ifr.setAttribute('mozapp', gApp.manifestURL);
ifr.setAttribute('src', gApp.manifest.launch_path);
var domParent = document.getElementById('container');
// Set us up to listen for messages from the app.
var listener = function(e) {
ok(true, "Messaging from app complete");
ifr.removeEventListener('mozbrowsershowmodalprompt', listener);
domParent.removeChild(ifr);
nextStep();
}
// This event is triggered when the app calls "alert".
ifr.addEventListener('mozbrowsershowmodalprompt', listener, false);
domParent.appendChild(ifr);
}
var steps = [
// Permissions
function() {
SpecialPowers.pushPermissions(
[{ "type": "browser", "allow": 1, "context": document },
{ "type": "embed-apps", "allow": 1, "context": document },
{ "type": "webapps-manage", "allow": 1, "context": document }], nextStep);
},
function() {
SpecialPowers.pushPrefEnv({"set": [["dom.broadcastChannel.enabled", true],
["network.disable.ipc.security", true],
["browser.pagethumbnails.capturing_disabled", true],
["dom.mozBrowserFramesEnabled", true],
["dom.ipc.browser_frames.oop_by_default", false],
["dom.ipc.tabs.disabled", false],
["dom.testing.ignore_ipc_principal", true],
["security.mixed_content.block_active_content", false]]},
nextStep);
},
// No confirmation needed when an app is installed
function() {
SpecialPowers.autoConfirmAppInstall(() =>
SpecialPowers.autoConfirmAppUninstall(nextStep));
},
createBC,
// Installing the app
installApp,
// Run tests in app
testApp,
// Uninstall the app
uninstallApp,
// finish
completeOperation
];
function finish() {
SimpleTest.finish();
}
function nextStep() {
if (!steps.length) {
SimpleTest.finish();
return;
}
var step = steps.shift();
step();
}
SimpleTest.waitForExplicitFinish();
nextStep();
</script>
</body>
</html>

View File

@ -1,137 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Test for BroadcastChannel - iframe mozbrowser</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<div id="container"></div>
<script type="application/javascript">
var gHostedManifestURL = 'http://test/tests/dom/broadcastchannel/tests/server.sjs?testToken=file_mozbrowser2.html';
var gApp;
function cbError() {
ok(false, "Error callback invoked");
finish();
}
function createBC() {
var bc = new BroadcastChannel('foobar');
bc.onmessage = function(e) {
is(e.data, "Done!", "A message has been received!");
nextStep();
}
nextStep();
}
function completeOperation() {
var bc = new BroadcastChannel('foobar');
bc.postMessage("Done!");
}
function installApp() {
var request = navigator.mozApps.install(gHostedManifestURL);
request.onerror = cbError;
request.onsuccess = function() {
gApp = request.result;
nextStep();
}
}
function uninstallApp() {
// Uninstall the app.
var request = navigator.mozApps.mgmt.uninstall(gApp);
request.onerror = cbError;
request.onsuccess = function() {
// All done.
info("All done");
nextStep();
}
}
function testApp() {
var ifr = document.createElement('iframe');
ifr.setAttribute('mozbrowser', 'true');
ifr.setAttribute('mozapp', gApp.manifestURL);
ifr.setAttribute('src', gApp.manifest.launch_path);
var domParent = document.getElementById('container');
// Set us up to listen for messages from the app.
var listener = function(e) {
ok(true, "Messaging from app complete");
ifr.removeEventListener('mozbrowsershowmodalprompt', listener);
domParent.removeChild(ifr);
nextStep();
}
// This event is triggered when the app calls "alert".
ifr.addEventListener('mozbrowsershowmodalprompt', listener, false);
domParent.appendChild(ifr);
}
var steps = [
// Permissions
function() {
SpecialPowers.pushPermissions(
[{ "type": "browser", "allow": 1, "context": document },
{ "type": "embed-apps", "allow": 1, "context": document },
{ "type": "webapps-manage", "allow": 1, "context": document }], nextStep);
},
function() {
SpecialPowers.pushPrefEnv({"set": [["dom.broadcastChannel.enabled", true],
["network.disable.ipc.security", true],
["browser.pagethumbnails.capturing_disabled", true],
["dom.mozBrowserFramesEnabled", true],
["dom.ipc.browser_frames.oop_by_default", false],
["dom.ipc.tabs.disabled", false],
["dom.testing.ignore_ipc_principal", true],
["security.mixed_content.block_active_content", false]]},
nextStep);
},
// No confirmation needed when an app is installed
function() {
SpecialPowers.autoConfirmAppInstall(() =>
SpecialPowers.autoConfirmAppUninstall(nextStep));
},
createBC,
// Installing the app
installApp,
// Run tests in app
testApp,
// Uninstall the app
uninstallApp,
// finish
completeOperation
];
function finish() {
SimpleTest.finish();
}
function nextStep() {
if (!steps.length) {
SimpleTest.finish();
return;
}
var step = steps.shift();
step();
}
SimpleTest.waitForExplicitFinish();
nextStep();
</script>
</body>
</html>