mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 05:41:12 +00:00
Bug 1275434 - Add remote push observer tests. r=dragana
MozReview-Commit-ID: 4BVWwEbI2FX --HG-- extra : rebase_source : 1ecd69b74a0329b14aa9ce8b3d4172bbf6278397
This commit is contained in:
parent
a5dc7d0ed9
commit
8f4367fa09
@ -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');
|
||||
});
|
90
dom/push/test/xpcshell/test_observer_remoting.js
Normal file
90
dom/push/test/xpcshell/test_observer_remoting.js
Normal 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');
|
||||
}
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user