summaryrefslogtreecommitdiffstats
path: root/mobile/android/modules/HelperApps.jsm
diff options
context:
space:
mode:
authorMatt A. Tobin <email@mattatobin.com>2019-04-23 15:32:23 -0400
committerMatt A. Tobin <email@mattatobin.com>2019-04-23 15:32:23 -0400
commitabe80cc31d5a40ebed743085011fbcda0c1a9a10 (patch)
treefb3762f06b84745b182af281abb107b95a9fcf01 /mobile/android/modules/HelperApps.jsm
parent63295d0087eb58a6eb34cad324c4c53d1b220491 (diff)
downloadUXP-abe80cc31d5a40ebed743085011fbcda0c1a9a10.tar
UXP-abe80cc31d5a40ebed743085011fbcda0c1a9a10.tar.gz
UXP-abe80cc31d5a40ebed743085011fbcda0c1a9a10.tar.lz
UXP-abe80cc31d5a40ebed743085011fbcda0c1a9a10.tar.xz
UXP-abe80cc31d5a40ebed743085011fbcda0c1a9a10.zip
Issue #1053 - Drop support Android and remove Fennec - Part 1a: Remove mobile/android
Diffstat (limited to 'mobile/android/modules/HelperApps.jsm')
-rw-r--r--mobile/android/modules/HelperApps.jsm229
1 files changed, 0 insertions, 229 deletions
diff --git a/mobile/android/modules/HelperApps.jsm b/mobile/android/modules/HelperApps.jsm
deleted file mode 100644
index 0ac478da0..000000000
--- a/mobile/android/modules/HelperApps.jsm
+++ /dev/null
@@ -1,229 +0,0 @@
-/* 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";
-
-/* globals ContentAreaUtils */
-
-const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "Prompt",
- "resource://gre/modules/Prompt.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "Messaging",
- "resource://gre/modules/Messaging.jsm");
-
-XPCOMUtils.defineLazyGetter(this, "ContentAreaUtils", function() {
- let ContentAreaUtils = {};
- Services.scriptloader.loadSubScript("chrome://global/content/contentAreaUtils.js", ContentAreaUtils);
- return ContentAreaUtils;
-});
-
-this.EXPORTED_SYMBOLS = ["App","HelperApps"];
-
-function App(data) {
- this.name = data.name;
- this.isDefault = data.isDefault;
- this.packageName = data.packageName;
- this.activityName = data.activityName;
- this.iconUri = "-moz-icon://" + data.packageName;
-}
-
-App.prototype = {
- // callback will be null if a result is not requested
- launch: function(uri, callback) {
- HelperApps._launchApp(this, uri, callback);
- return false;
- }
-}
-
-var HelperApps = {
- get defaultBrowsers() {
- delete this.defaultBrowsers;
- this.defaultBrowsers = this._getHandlers("http://www.example.com", {
- filterBrowsers: false,
- filterHtml: false
- });
- return this.defaultBrowsers;
- },
-
- // Finds handlers that have registered for text/html pages or urls ending in html. Some apps, like
- // the Samsung Video player will only appear for these urls, while some Browsers (like Link Bubble)
- // won't register here because of the text/html mime type.
- get defaultHtmlHandlers() {
- delete this.defaultHtmlHandlers;
- return this.defaultHtmlHandlers = this._getHandlers("http://www.example.com/index.html", {
- filterBrowsers: false,
- filterHtml: false
- });
- },
-
- _getHandlers: function(url, options) {
- let values = {};
-
- let handlers = this.getAppsForUri(Services.io.newURI(url, null, null), options);
- handlers.forEach(function(app) {
- values[app.name] = app;
- }, this);
-
- return values;
- },
-
- get protoSvc() {
- delete this.protoSvc;
- return this.protoSvc = Cc["@mozilla.org/uriloader/external-protocol-service;1"].getService(Ci.nsIExternalProtocolService);
- },
-
- get urlHandlerService() {
- delete this.urlHandlerService;
- return this.urlHandlerService = Cc["@mozilla.org/uriloader/external-url-handler-service;1"].getService(Ci.nsIExternalURLHandlerService);
- },
-
- prompt: function showPicker(apps, promptOptions, callback) {
- let p = new Prompt(promptOptions).addIconGrid({ items: apps });
- p.show(callback);
- },
-
- getAppsForProtocol: function getAppsForProtocol(scheme) {
- let protoHandlers = this.protoSvc.getProtocolHandlerInfoFromOS(scheme, {}).possibleApplicationHandlers;
-
- let results = {};
- for (let i = 0; i < protoHandlers.length; i++) {
- try {
- let protoApp = protoHandlers.queryElementAt(i, Ci.nsIHandlerApp);
- results[protoApp.name] = new App({
- name: protoApp.name,
- description: protoApp.detailedDescription,
- });
- } catch(e) {}
- }
-
- return results;
- },
-
- getAppsForUri: function getAppsForUri(uri, flags = { }, callback) {
- // Return early for well-known internal schemes
- if (!uri || uri.schemeIs("about") || uri.schemeIs("chrome")) {
- if (callback) {
- callback([]);
- }
- return [];
- }
-
- flags.filterBrowsers = "filterBrowsers" in flags ? flags.filterBrowsers : true;
- flags.filterHtml = "filterHtml" in flags ? flags.filterHtml : true;
-
- // Query for apps that can/can't handle the mimetype
- let msg = this._getMessage("Intent:GetHandlers", uri, flags);
- let parseData = (d) => {
- let apps = []
- if (!d) {
- return apps;
- }
-
- apps = this._parseApps(d.apps);
-
- if (flags.filterBrowsers) {
- apps = apps.filter((app) => {
- return app.name && !this.defaultBrowsers[app.name];
- });
- }
-
- // Some apps will register for html files (the Samsung Video player) but should be shown
- // for non-HTML files (like videos). This filters them only if the page has an htm of html
- // file extension.
- if (flags.filterHtml) {
- // Matches from the first '.' to the end of the string, '?', or '#'
- let ext = /\.([^\?#]*)/.exec(uri.path);
- if (ext && (ext[1] === "html" || ext[1] === "htm")) {
- apps = apps.filter(function(app) {
- return app.name && !this.defaultHtmlHandlers[app.name];
- }, this);
- }
- }
-
- return apps;
- };
-
- if (!callback) {
- let data = this._sendMessageSync(msg);
- return parseData(data);
- } else {
- Messaging.sendRequestForResult(msg).then(function(data) {
- callback(parseData(data));
- });
- }
- },
-
- launchUri: function launchUri(uri) {
- let msg = this._getMessage("Intent:Open", uri);
- Messaging.sendRequest(msg);
- },
-
- _parseApps: function _parseApps(appInfo) {
- // appInfo -> {apps: [app1Label, app1Default, app1PackageName, app1ActivityName, app2Label, app2Defaut, ...]}
- // see GeckoAppShell.java getHandlersForIntent function for details
- const numAttr = 4; // 4 elements per ResolveInfo: label, default, package name, activity name.
-
- let apps = [];
- for (let i = 0; i < appInfo.length; i += numAttr) {
- apps.push(new App({"name" : appInfo[i],
- "isDefault" : appInfo[i+1],
- "packageName" : appInfo[i+2],
- "activityName" : appInfo[i+3]}));
- }
-
- return apps;
- },
-
- _getMessage: function(type, uri, options = {}) {
- let mimeType = options.mimeType;
- if (uri && mimeType == undefined) {
- mimeType = ContentAreaUtils.getMIMETypeForURI(uri) || "";
- }
-
- return {
- type: type,
- mime: mimeType,
- action: options.action || "", // empty action string defaults to android.intent.action.VIEW
- url: uri ? uri.spec : "",
- packageName: options.packageName || "",
- className: options.className || ""
- };
- },
-
- _launchApp: function launchApp(app, uri, callback) {
- if (callback) {
- let msg = this._getMessage("Intent:OpenForResult", uri, {
- packageName: app.packageName,
- className: app.activityName
- });
-
- Messaging.sendRequestForResult(msg).then(callback);
- } else {
- let msg = this._getMessage("Intent:Open", uri, {
- packageName: app.packageName,
- className: app.activityName
- });
-
- Messaging.sendRequest(msg);
- }
- },
-
- _sendMessageSync: function(msg) {
- let res = null;
- Messaging.sendRequestForResult(msg).then(function(data) {
- res = data;
- });
-
- let thread = Services.tm.currentThread;
- while (res == null) {
- thread.processNextEvent(true);
- }
-
- return res;
- },
-};