mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 16:58:38 +09:00
pt 1 in reviving the android build (copied from pm 28a1, wish me luck)
This commit is contained in:
parent
efa9662725
commit
d7788a6d6d
4249 changed files with 468189 additions and 0 deletions
91
mobile/android/components/TabSource.js
Normal file
91
mobile/android/components/TabSource.js
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
|
||||
* 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, manager: Cm, utils: Cu, results: Cr } = Components;
|
||||
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Prompt",
|
||||
"resource://gre/modules/Prompt.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Messaging",
|
||||
"resource://gre/modules/Messaging.jsm");
|
||||
|
||||
function TabSource() {
|
||||
}
|
||||
|
||||
TabSource.prototype = {
|
||||
classID: Components.ID("{5850c76e-b916-4218-b99a-31f004e0a7e7}"),
|
||||
classDescription: "Fennec Tab Source",
|
||||
contractID: "@mozilla.org/tab-source-service;1",
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsITabSource]),
|
||||
|
||||
getTabToStream: function() {
|
||||
let app = Services.wm.getMostRecentWindow("navigator:browser").BrowserApp;
|
||||
let tabs = app.tabs;
|
||||
if (tabs == null || tabs.length == 0) {
|
||||
Services.console.logStringMessage("ERROR: No tabs");
|
||||
return null;
|
||||
}
|
||||
|
||||
let bundle = Services.strings.createBundle("chrome://browser/locale/browser.properties");
|
||||
let title = bundle.GetStringFromName("tabshare.title")
|
||||
|
||||
let prompt = new Prompt({
|
||||
title: title,
|
||||
window: null
|
||||
}).setSingleChoiceItems(tabs.map(function(tab) {
|
||||
let label;
|
||||
if (tab.browser.contentTitle)
|
||||
label = tab.browser.contentTitle;
|
||||
else if (tab.browser.contentURI)
|
||||
label = tab.browser.contentURI.spec;
|
||||
else
|
||||
label = tab.originalURI.spec;
|
||||
return { label: label,
|
||||
icon: "thumbnail:" + tab.id }
|
||||
}));
|
||||
|
||||
let result = null;
|
||||
prompt.show(function(data) {
|
||||
result = data.button;
|
||||
});
|
||||
|
||||
// Spin this thread while we wait for a result.
|
||||
let thread = Services.tm.currentThread;
|
||||
while (result == null) {
|
||||
thread.processNextEvent(true);
|
||||
}
|
||||
|
||||
if (result == -1) {
|
||||
return null;
|
||||
}
|
||||
return tabs[result].browser.contentWindow;
|
||||
},
|
||||
|
||||
notifyStreamStart: function(window) {
|
||||
let app = Services.wm.getMostRecentWindow("navigator:browser").BrowserApp;
|
||||
let tabs = app.tabs;
|
||||
for (var i in tabs) {
|
||||
if (tabs[i].browser.contentWindow == window) {
|
||||
Messaging.sendRequest({ type: "Tab:StreamStart", tabID: tabs[i].id });
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
notifyStreamStop: function(window) {
|
||||
let app = Services.wm.getMostRecentWindow("navigator:browser").BrowserApp;
|
||||
let tabs = app.tabs;
|
||||
for (let i in tabs) {
|
||||
if (tabs[i].browser.contentWindow == window) {
|
||||
Messaging.sendRequest({ type: "Tab:StreamStop", tabID: tabs[i].id });
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([TabSource]);
|
||||
Loading…
Add table
Add a link
Reference in a new issue