summaryrefslogtreecommitdiffstats
path: root/mobile/android/components/PresentationRequestUIGlue.js
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/components/PresentationRequestUIGlue.js')
-rw-r--r--mobile/android/components/PresentationRequestUIGlue.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/mobile/android/components/PresentationRequestUIGlue.js b/mobile/android/components/PresentationRequestUIGlue.js
new file mode 100644
index 000000000..af252c875
--- /dev/null
+++ b/mobile/android/components/PresentationRequestUIGlue.js
@@ -0,0 +1,86 @@
+/* -*- Mode: tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict"
+
+const { interfaces: Ci, utils: Cu, classes: Cc } = Components;
+
+const TOPIC_PRESENTATION_RECEIVER_LAUNCH = "presentation-receiver:launch";
+const TOPIC_PRESENTATION_RECEIVER_LAUNCH_RESPONSE = "presentation-receiver:launch:response";
+
+// globals XPCOMUtils
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+// globals Services
+Cu.import("resource://gre/modules/Services.jsm");
+
+function log(str) {
+ // dump("-*- PresentationRequestUIGlue.js -*-: " + str + "\n");
+}
+
+function PresentationRequestUIGlue() { }
+
+PresentationRequestUIGlue.prototype = {
+ sendRequest: function sendRequest(aURL, aSessionId, aDevice) {
+ log("PresentationRequestUIGlue - sendRequest aURL=" + aURL +
+ " aSessionId=" + aSessionId);
+
+ let localDevice;
+ try {
+ localDevice = aDevice.QueryInterface(Ci.nsIPresentationLocalDevice);
+ } catch (e) {
+ /* XXX: Currently, Fennec only support 1-UA devices. Remove this
+ * Promise.reject() when it starts to support 2-UA devices.
+ */
+ log("Not an 1-UA device.")
+ return new Promise.reject();
+ }
+
+ return new Promise((aResolve, aReject) => {
+
+ let uuidGenerator = Cc["@mozilla.org/uuid-generator;1"]
+ .getService(Ci.nsIUUIDGenerator);
+ let requestId = uuidGenerator.generateUUID().toString();
+
+ let handleObserve = (aSubject, aTopic, aData) => {
+ log("Got observe: aTopic=" + aTopic);
+
+ let data = JSON.parse(aData);
+ if (data.requestId != requestId) {
+ return;
+ }
+
+ Services.obs.removeObserver(handleObserve,
+ TOPIC_PRESENTATION_RECEIVER_LAUNCH_RESPONSE);
+ switch(data.result) {
+ case "success":
+ aResolve(aSubject);
+ break;
+ case "error":
+ aReject();
+ break;
+ };
+ };
+
+ Services.obs.addObserver(handleObserve,
+ TOPIC_PRESENTATION_RECEIVER_LAUNCH_RESPONSE,
+ false);
+
+ let data = {
+ url: aURL,
+ windowId: localDevice.windowId,
+ requestId: requestId
+ };
+ Services.obs.notifyObservers(null,
+ TOPIC_PRESENTATION_RECEIVER_LAUNCH,
+ JSON.stringify(data));
+ })
+ },
+
+ classID: Components.ID("9c550ef7-3ff6-4bd1-9ad1-5a3735b90d21"),
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIPresentationRequestUIGlue])
+};
+
+this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PresentationRequestUIGlue]);