mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-03 18:47:53 +00:00
b763fbe8d8
Changes NeckoParent to send the ipdl message if !UsingNeckoIPCSecurity() because xpcshell tests don't have TabParents. MozReview-Commit-ID: F50WXzg3TIA
103 lines
3.3 KiB
JavaScript
103 lines
3.3 KiB
JavaScript
// Checks that app-offline notifications are received in both the parent
|
|
// and the child process, and that after receiving the notification
|
|
// isAppOffline returns the correct value
|
|
|
|
|
|
Cu.import("resource://testing-common/httpd.js");
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
|
|
var test_index = 0;
|
|
var APP_ID = 42;
|
|
var events_observed_no = 0;
|
|
|
|
function set_app_offline(appId, offline) {
|
|
let ioservice = Cc['@mozilla.org/network/io-service;1'].
|
|
getService(Ci.nsIIOService);
|
|
ioservice.setAppOffline(appId, offline);
|
|
}
|
|
|
|
function is_app_offline(appId) {
|
|
let ioservice = Cc['@mozilla.org/network/io-service;1'].
|
|
getService(Ci.nsIIOService);
|
|
return ioservice.isAppOffline(appId);
|
|
}
|
|
|
|
// The expected offline status after running each function,
|
|
// and the next function that should be run.
|
|
|
|
// test0 test1 test2 test3 test4
|
|
let expected_offline = [ false, true, true, false, false];
|
|
let callbacks = [ test1, test2, test3, test4, finished];
|
|
|
|
function observer(aSubject, aTopic, aData) {
|
|
events_observed_no++;
|
|
let info = aSubject.QueryInterface(Ci.nsIAppOfflineInfo);
|
|
dump("ParentObserver - subject: {" + aSubject.appId + ", " + aSubject.mode + "} " +
|
|
"topic: " + aTopic + "\n");
|
|
|
|
// Check that the correct offline status is in place
|
|
do_check_eq(is_app_offline(APP_ID), expected_offline[test_index]);
|
|
|
|
// Execute the callback for the current test
|
|
do_execute_soon(callbacks[test_index]);
|
|
}
|
|
|
|
function run_test() {
|
|
Services.obs.addObserver(observer, "network:app-offline-status-changed", false);
|
|
|
|
test_index = 0;
|
|
do_check_eq(is_app_offline(APP_ID), expected_offline[test_index]) // The app should be online at first
|
|
run_test_in_child("child_app_offline_notifications.js", test0);
|
|
}
|
|
|
|
// Check that the app is online by default in the child
|
|
function test0() {
|
|
dump("parent: RUNNING: test0\n");
|
|
test_index = 0;
|
|
sendCommand('check_status('+APP_ID+','+Ci.nsIAppOfflineInfo.ONLINE+');\n', test1);
|
|
}
|
|
|
|
// Set the app OFFLINE
|
|
// Check that the notification is emmited in the parent process
|
|
// The observer function will execute test2 which does the check in the child
|
|
function test1() {
|
|
dump("parent: RUNNING: test1\n");
|
|
test_index = 1;
|
|
set_app_offline(APP_ID, Ci.nsIAppOfflineInfo.OFFLINE);
|
|
}
|
|
|
|
// Checks that child process sees the app OFFLINE
|
|
function test2() {
|
|
dump("parent: RUNNING: test2\n");
|
|
test_index = 2;
|
|
sendCommand('check_notification_and_status('+APP_ID+','+Ci.nsIAppOfflineInfo.OFFLINE+');\n', test3);
|
|
}
|
|
|
|
// Set the app ONLINE
|
|
// Chech that the notification is received in the parent
|
|
// The observer function will execute test3 and do the check in the child
|
|
function test3() {
|
|
dump("parent: RUNNING: test3\n");
|
|
test_index = 3;
|
|
set_app_offline(APP_ID, Ci.nsIAppOfflineInfo.ONLINE);
|
|
}
|
|
|
|
// Chech that the app is back online
|
|
function test4() {
|
|
dump("parent: RUNNING: test4\n");
|
|
test_index = 4;
|
|
sendCommand('check_notification_and_status('+APP_ID+','+Ci.nsIAppOfflineInfo.ONLINE+');\n', function() {
|
|
// Send command to unregister observer on the child
|
|
sendCommand('finished();\n', finished);
|
|
});
|
|
}
|
|
|
|
// Remove observer and end test
|
|
function finished() {
|
|
dump("parent: RUNNING: finished\n");
|
|
Services.obs.removeObserver(observer, "network:app-offline-status-changed");
|
|
do_check_eq(events_observed_no, 2);
|
|
do_test_finished();
|
|
}
|