gecko-dev/mobile/android/chrome/content/PresentationView.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

64 lines
2.3 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 {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
const TOPIC_PRESENTATION_VIEW_READY = "presentation-view-ready";
const TOPIC_PRESENTATION_RECEIVER_LAUNCH = "presentation-receiver:launch";
const TOPIC_PRESENTATION_RECEIVER_LAUNCH_RESPONSE = "presentation-receiver:launch:response";
// globals Services
Cu.import("resource://gre/modules/Services.jsm");
function log(str) {
// dump("-*- PresentationView.js -*-: " + str + "\n");
}
let PresentationView = {
_id: null,
startup: function startup() {
// use hash as the ID of this top level window
this._id = window.location.hash.substr(1);
// Listen "presentation-receiver:launch" sent from
// PresentationRequestUIGlue.
Services.obs.addObserver(this,TOPIC_PRESENTATION_RECEIVER_LAUNCH, false);
// Notify PresentationView is ready.
Services.obs.notifyObservers(null, TOPIC_PRESENTATION_VIEW_READY, this._id);
},
stop: function stop() {
Services.obs.removeObserver(this, TOPIC_PRESENTATION_RECEIVER_LAUNCH);
},
observe: function observe(aSubject, aTopic, aData) {
log("Got observe: aTopic=" + aTopic);
let requestData = JSON.parse(aData);
if (this._id != requestData.windowId) {
return;
}
let browser = document.getElementById("content");
browser.setAttribute("mozpresentation", requestData.url);
try {
browser.loadURI(requestData.url);
Services.obs.notifyObservers(browser,
TOPIC_PRESENTATION_RECEIVER_LAUNCH_RESPONSE,
JSON.stringify({ result: "success",
requestId: requestData.requestId }));
} catch (e) {
Services.obs.notifyObservers(null,
TOPIC_PRESENTATION_RECEIVER_LAUNCH_RESPONSE,
JSON.stringify({ result: "error",
reason: e.message }));
}
}
};