From 04ff8dfd02a88166a69ba77bd39478d8fb28c940 Mon Sep 17 00:00:00 2001 From: Evan Theurer Date: Fri, 2 Oct 2015 11:13:19 +0200 Subject: [PATCH] Add firefoxextension service. --- static/js/services/firefoxextension.js | 79 ++++++++++++++++++++++++++ static/js/services/services.js | 9 ++- 2 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 static/js/services/firefoxextension.js diff --git a/static/js/services/firefoxextension.js b/static/js/services/firefoxextension.js new file mode 100644 index 00000000..a3fa8495 --- /dev/null +++ b/static/js/services/firefoxextension.js @@ -0,0 +1,79 @@ +/* + * Spreed WebRTC. + * Copyright (C) 2013-2015 struktur AG + * + * This file is part of Spreed WebRTC. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +"use strict"; +define(["underscore", "jquery", "webrtc.adapter"], function(_, $) { + + // firefoxExtension + return ["$window", "$q", "alertify", "translation", function($window, $q, alertify, translation) { + + var FirefoxExtension = function() { + this.available = false; + this.e = $({}); + this.autoinstall = {}; + this.initialize(); + }; + + FirefoxExtension.prototype.initialize = function() { + var marker = $window.document.getElementById("firefoxextension-available"); + console.log('Firefox extension marker', marker); + if (marker) { + this.available = true; + console.log("Firefox extension is available."); + this.e.triggerHandler("available", true); + } else if (!marker && this.available) { + this.available = false; + console.log("Firefox extension is no longer available."); + this.e.triggerHandler("available", false); + } + }; + + FirefoxExtension.prototype.registerAutoInstall = function(installFunc, cancelInstallFunc, force) { + + this.autoinstall.install = installFunc; + this.autoinstall.cancel = cancelInstallFunc; + this.autoinstall.force = !!force; + if (!this.available && installFunc) { + this.e.triggerHandler("available", true); + } + + }; + + // Create extension api and wait for messages. + var extension = new FirefoxExtension(); + + // Always register default auto install which tells user that extension is required + // if screen sharing can only work with extension. + if ($window.webrtcDetectedBrowser === "firefox" && $window.webrtcDetectedVersion >= 36) { + extension.registerAutoInstall(function() { + var d = $q.defer(); + alertify.dialog.alert(translation._("Screen sharing requires a browser extension. Please add the Spreed WebRTC screen sharing extension to Firefox and try again.")); + d.reject("Manual extension installation required"); + return d.promise; + }); + } + + // Expose. + return extension; + + }]; + +}); diff --git a/static/js/services/services.js b/static/js/services/services.js index 4fa9919a..a5de387c 100644 --- a/static/js/services/services.js +++ b/static/js/services/services.js @@ -70,7 +70,8 @@ define([ 'services/mediadevices', 'services/sandbox', 'services/dummystream', - 'services/usermedia'], function(_, + 'services/usermedia', + 'services/firefoxextension'], function(_, desktopNotify, playSound, safeApply, @@ -118,7 +119,8 @@ modules, mediaDevices, sandbox, dummyStream, -userMedia) { +userMedia, +firefoxExtension) { var services = { desktopNotify: desktopNotify, @@ -168,7 +170,8 @@ userMedia) { mediaDevices: mediaDevices, sandbox: sandbox, dummyStream: dummyStream, - userMedia: userMedia + userMedia: userMedia, + firefoxExtension: firefoxExtension }; var initialize = function(angModule) {