gecko-dev/mobile/android/components/PresentationRequestUIGlue.js
KuoE0 3f2d9fc602 Bug 1305352 - (Part 2) Implement PresentationRequestUIGlue on Fennec. r=schien,snorp
MozReview-Commit-ID: ISG6HS7HcPn

--HG--
extra : rebase_source : ef47383e97f360b57f78329e7b35feb0c286035e
2016-08-30 18:16:31 +08:00

87 lines
2.8 KiB
JavaScript

/* -*- 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]);