diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /mobile/android/modules/PageActions.jsm | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'mobile/android/modules/PageActions.jsm')
-rw-r--r-- | mobile/android/modules/PageActions.jsm | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/mobile/android/modules/PageActions.jsm b/mobile/android/modules/PageActions.jsm new file mode 100644 index 000000000..a66268f82 --- /dev/null +++ b/mobile/android/modules/PageActions.jsm @@ -0,0 +1,113 @@ +/* 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 } = Components; +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); +Cu.import("resource://gre/modules/Messaging.jsm"); + +XPCOMUtils.defineLazyServiceGetter(this, "uuidgen", + "@mozilla.org/uuid-generator;1", + "nsIUUIDGenerator"); + +this.EXPORTED_SYMBOLS = ["PageActions"]; + +// Copied from browser.js +// TODO: We should move this method to a common importable location +function resolveGeckoURI(aURI) { + if (!aURI) + throw "Can't resolve an empty uri"; + + if (aURI.startsWith("chrome://")) { + let registry = Cc['@mozilla.org/chrome/chrome-registry;1'].getService(Ci["nsIChromeRegistry"]); + return registry.convertChromeURL(Services.io.newURI(aURI, null, null)).spec; + } else if (aURI.startsWith("resource://")) { + let handler = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler); + return handler.resolveURI(Services.io.newURI(aURI, null, null)); + } + return aURI; +} + +var PageActions = { + _items: { }, + + _inited: false, + + _maybeInit: function() { + if (!this._inited && Object.keys(this._items).length > 0) { + this._inited = true; + Services.obs.addObserver(this, "PageActions:Clicked", false); + Services.obs.addObserver(this, "PageActions:LongClicked", false); + } + }, + + _maybeUninit: function() { + if (this._inited && Object.keys(this._items).length == 0) { + this._inited = false; + Services.obs.removeObserver(this, "PageActions:Clicked"); + Services.obs.removeObserver(this, "PageActions:LongClicked"); + } + }, + + observe: function(aSubject, aTopic, aData) { + let item = this._items[aData]; + if (aTopic == "PageActions:Clicked") { + if (item.clickCallback) { + item.clickCallback(); + } + } else if (aTopic == "PageActions:LongClicked") { + if (item.longClickCallback) { + item.longClickCallback(); + } + } + }, + + isShown: function(id) { + return !!this._items[id]; + }, + + synthesizeClick: function(id) { + let item = this._items[id]; + if (item && item.clickCallback) { + item.clickCallback(); + } + }, + + add: function(aOptions) { + let id = aOptions.id || uuidgen.generateUUID().toString() + + Messaging.sendRequest({ + type: "PageActions:Add", + id: id, + title: aOptions.title, + icon: resolveGeckoURI(aOptions.icon), + important: "important" in aOptions ? aOptions.important : false + }); + + this._items[id] = {}; + + if (aOptions.clickCallback) { + this._items[id].clickCallback = aOptions.clickCallback; + } + + if (aOptions.longClickCallback) { + this._items[id].longClickCallback = aOptions.longClickCallback; + } + + this._maybeInit(); + return id; + }, + + remove: function(id) { + Messaging.sendRequest({ + type: "PageActions:Remove", + id: id + }); + + delete this._items[id]; + this._maybeUninit(); + } +} |