summaryrefslogtreecommitdiffstats
path: root/b2g/components/test/mochitest/presentation_prompt_handler_chrome.js
diff options
context:
space:
mode:
Diffstat (limited to 'b2g/components/test/mochitest/presentation_prompt_handler_chrome.js')
-rw-r--r--b2g/components/test/mochitest/presentation_prompt_handler_chrome.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/b2g/components/test/mochitest/presentation_prompt_handler_chrome.js b/b2g/components/test/mochitest/presentation_prompt_handler_chrome.js
new file mode 100644
index 000000000..4407e58d2
--- /dev/null
+++ b/b2g/components/test/mochitest/presentation_prompt_handler_chrome.js
@@ -0,0 +1,94 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+'use strict';
+
+ function debug(str) {
+ dump('presentation_prompt_handler_chrome: ' + str + '\n');
+ }
+
+var { classes: Cc, interfaces: Ci, utils: Cu } = Components;
+const { XPCOMUtils } = Cu.import('resource://gre/modules/XPCOMUtils.jsm');
+const { SystemAppProxy } = Cu.import('resource://gre/modules/SystemAppProxy.jsm');
+
+const manager = Cc["@mozilla.org/presentation-device/manager;1"]
+ .getService(Ci.nsIPresentationDeviceManager);
+
+const prompt = Cc['@mozilla.org/presentation-device/prompt;1']
+ .getService(Ci.nsIPresentationDevicePrompt);
+
+function TestPresentationDevice(options) {
+ this.id = options.id;
+ this.name = options.name;
+ this.type = options.type;
+}
+
+TestPresentationDevice.prototype = {
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIPresentationDevice]),
+ establishSessionTransport: function() {
+ return null;
+ },
+};
+
+function TestPresentationRequest(options) {
+ this.origin = options.origin;
+ this.requestURL = options.requestURL;
+}
+
+TestPresentationRequest.prototype = {
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIPresentationDeviceRequest]),
+ select: function(device) {
+ let result = {
+ type: 'select',
+ device: {
+ id: device.id,
+ name: device.name,
+ type: device.type,
+ },
+ };
+ sendAsyncMessage('presentation-select-result', result);
+ },
+ cancel: function() {
+ let result = {
+ type: 'cancel',
+ };
+ sendAsyncMessage('presentation-select-result', result);
+ },
+};
+
+var testDevice = null;
+
+addMessageListener('setup', function(device_options) {
+ testDevice = new TestPresentationDevice(device_options);
+ manager.QueryInterface(Ci.nsIPresentationDeviceListener).addDevice(testDevice);
+ sendAsyncMessage('setup-complete');
+});
+
+var eventHandler = function(evt) {
+ if (!evt.detail || evt.detail.type !== 'presentation-select-device') {
+ return;
+ }
+
+ sendAsyncMessage('presentation-select-device', evt.detail);
+};
+
+SystemAppProxy.addEventListener('mozChromeEvent', eventHandler);
+
+// need to remove ChromeEvent listener after test finished.
+addMessageListener('teardown', function() {
+ if (testDevice) {
+ manager.removeDevice(testDevice);
+ }
+ SystemAppProxy.removeEventListener('mozChromeEvent', eventHandler);
+});
+
+addMessageListener('trigger-device-prompt', function(request_options) {
+ let request = new TestPresentationRequest(request_options);
+ prompt.promptDeviceSelection(request);
+});
+
+addMessageListener('presentation-select-response', function(detail) {
+ SystemAppProxy._sendCustomEvent('mozContentEvent', detail);
+});
+