Bug 1275434 - Add remote push observer tests. r=dragana

MozReview-Commit-ID: 4BVWwEbI2FX

--HG--
extra : rebase_source : 1ecd69b74a0329b14aa9ce8b3d4172bbf6278397
This commit is contained in:
Kit Cambridge 2016-05-19 21:41:15 -07:00
parent a5dc7d0ed9
commit 8f4367fa09
3 changed files with 91 additions and 51 deletions

View File

@ -1,50 +0,0 @@
'use strict';
function run_test() {
do_get_profile();
run_next_test();
}
add_task(function* test_observer_notifications() {
// Push observer notifications dispatched in the child should be forwarded to
// the parent.
let notifyPromise = promiseObserverNotification(
PushServiceComponent.pushTopic);
let subChangePromise = promiseObserverNotification(
PushServiceComponent.subscriptionChangeTopic);
let subModifiedPromise = promiseObserverNotification(
PushServiceComponent.subscriptionModifiedTopic);
yield run_test_in_child('./test_handler_service.js');
let principal = Services.scriptSecurityManager.getSystemPrincipal();
let {
data: notifyScope,
subject: notifySubject,
} = yield notifyPromise;
equal(notifyScope, 'chrome://test-scope',
'Should forward push notifications with the correct scope');
let message = notifySubject.QueryInterface(Ci.nsIPushMessage);
equal(message.principal, principal,
'Should include the principal in the push message');
strictEqual(message.data, null, 'Should not include data');
let {
data: subChangeScope,
subject: subChangePrincipal,
} = yield subChangePromise;
equal(subChangeScope, 'chrome://test-scope',
'Should forward subscription change notifications with the correct scope');
equal(subChangePrincipal, principal,
'Should pass the principal as the subject of a change notification');
let {
data: subModifiedScope,
subject: subModifiedPrincipal,
} = yield subModifiedPromise;
equal(subModifiedScope, 'chrome://test-scope',
'Should forward subscription modified notifications with the correct scope');
equal(subModifiedPrincipal, principal,
'Should pass the principal as the subject of a modified notification');
});

View File

@ -0,0 +1,90 @@
'use strict';
const pushNotifier = Cc['@mozilla.org/push/Notifier;1']
.getService(Ci.nsIPushNotifier);
add_task(function* test_observer_remoting() {
if (isParent) {
yield testInParent();
} else {
yield testInChild();
}
});
function* testInParent() {
// Register observers for notifications from the child, then run the test in
// the child and wait for the notifications.
let promiseNotifications = waitForNotifierObservers('Hello from child!');
let promiseFinished = run_test_in_child('./test_observer_remoting.js');
yield promiseNotifications;
// Wait until the child is listening for notifications from the parent.
yield do_await_remote_message('push_test_observer_remoting_child_ready');
// Fire an observer notification in the parent that should be forwarded to
// the child.
yield waitForNotifierObservers('Hello from parent!', true);
// Wait for the child to exit.
yield promiseFinished;
}
function* testInChild() {
// Fire an observer notification in the child that should be forwarded to
// the parent.
yield waitForNotifierObservers('Hello from child!', true);
// Register observers for notifications from the parent, let the parent know
// we're ready, and wait for the notifications.
let promiseNotifierObservers = waitForNotifierObservers('Hello from parent!');
do_send_remote_message('push_test_observer_remoting_child_ready');
yield promiseNotifierObservers;
}
function* waitForNotifierObservers(expectedText, shouldNotify = false) {
let notifyPromise = promiseObserverNotification(
PushServiceComponent.pushTopic);
let subChangePromise = promiseObserverNotification(
PushServiceComponent.subscriptionChangeTopic);
let subModifiedPromise = promiseObserverNotification(
PushServiceComponent.subscriptionModifiedTopic);
let scope = 'chrome://test-scope';
let principal = Services.scriptSecurityManager.getSystemPrincipal();
let data = new TextEncoder('utf-8').encode(expectedText);
if (shouldNotify) {
pushNotifier.notifyPushWithData(scope, principal, '', data.length, data);
pushNotifier.notifySubscriptionChange(scope, principal);
pushNotifier.notifySubscriptionModified(scope, principal);
}
let {
data: notifyScope,
subject: notifySubject,
} = yield notifyPromise;
equal(notifyScope, scope,
'Should fire push notifications with the correct scope');
let message = notifySubject.QueryInterface(Ci.nsIPushMessage);
equal(message.principal, principal,
'Should include the principal in the push message');
strictEqual(message.data.text(), expectedText, 'Should include data');
let {
data: subChangeScope,
subject: subChangePrincipal,
} = yield subChangePromise;
equal(subChangeScope, scope,
'Should fire subscription change notifications with the correct scope');
equal(subChangePrincipal, principal,
'Should pass the principal as the subject of a change notification');
let {
data: subModifiedScope,
subject: subModifiedPrincipal,
} = yield subModifiedPromise;
equal(subModifiedScope, scope,
'Should fire subscription modified notifications with the correct scope');
equal(subModifiedPrincipal, principal,
'Should pass the principal as the subject of a modified notification');
}

View File

@ -7,7 +7,6 @@ skip-if = toolkit == 'android'
[test_clear_origin_data.js]
[test_crypto.js]
[test_drop_expired.js]
[test_handler_service_parent.js]
[test_handler_service.js]
support-files = PushServiceHandler.js PushServiceHandler.manifest
[test_notification_ack.js]
@ -17,6 +16,7 @@ support-files = PushServiceHandler.js PushServiceHandler.manifest
[test_notification_incomplete.js]
[test_notification_version_string.js]
[test_observer_data.js]
[test_observer_remoting.js]
[test_permissions.js]
run-sequentially = This will delete all existing push subscriptions.