| Index: lib/child/objectTabs.js |
| =================================================================== |
| --- a/lib/child/objectTabs.js |
| +++ b/lib/child/objectTabs.js |
| @@ -14,16 +14,18 @@ |
| * You should have received a copy of the GNU General Public License |
| * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| */ |
| /** |
| * @fileOverview Code responsible for showing and hiding object tabs. |
| */ |
| +let {port} = require("messaging"); |
| + |
| /** |
| * Class responsible for showing and hiding object tabs. |
| * @class |
| */ |
| var objTabs = |
| { |
| /** |
| * Number of milliseconds to wait until hiding tab after the mouse moves away. |
| @@ -69,53 +71,61 @@ var objTabs = |
| /** |
| * Used when hideTimer is running, time when the tab should be hidden. |
| * @type Integer |
| */ |
| hideTargetTime: 0, |
| /** |
| - * Localized texts and class names to be used for the tab. |
| + * Localized texts and class names to be used for the tab. This will be set |
| + * when showTabFor is called for the first time. |
| * @type Object |
| */ |
| texts: null, |
| /** |
| * Called to show object tab for an element. |
| */ |
| showTabFor: function(/**Element*/ element) |
| { |
| // Object tabs aren't usable in Fennec |
| let {application} = require("info"); |
| if (application == "fennec" || application == "fennec2" || |
| application == "adblockbrowser") |
| return; |
| - if (!sendSyncMessage("AdblockPlus:GetObjectTabsStatus")) |
| - return; |
| + if (!this.texts) |
| + this.texts = port.emitWithResponse("getObjectTabsTexts"); |
| + Promise.all([port.emitWithResponse("getObjectTabsStatus"), this.texts]) |
| + .then(([status, texts]) => |
| + { |
| + this.texts = texts; |
| + if (!status) |
| + return; |
| - if (this.hideTimer) |
| - { |
| - this.hideTimer.cancel(); |
| - this.hideTimer = null; |
| - } |
| + if (this.hideTimer) |
| + { |
| + this.hideTimer.cancel(); |
| + this.hideTimer = null; |
| + } |
| - if (this.objtabElement) |
| - this.objtabElement.style.setProperty("opacity", "1", "important"); |
| + if (this.objtabElement) |
| + this.objtabElement.style.setProperty("opacity", "1", "important"); |
| - if (this.currentElement != element) |
| - { |
| - this._hideTab(); |
| + if (this.currentElement != element) |
| + { |
| + this._hideTab(); |
| - let {RequestNotifier} = require("child/requestNotifier"); |
| - let data = RequestNotifier.getDataForNode(element, true, "OBJECT"); |
| - if (data) |
| - this._showTab(element, data[1]); |
| - } |
| + let {RequestNotifier} = require("child/requestNotifier"); |
| + let data = RequestNotifier.getDataForNode(element, true, "OBJECT"); |
| + if (data) |
| + this._showTab(element, data[1]); |
| + } |
| + }); |
| }, |
| /** |
| * Called to hide object tab for an element (actual hiding happens delayed). |
| */ |
| hideTabFor: function(/**Element*/ element) |
| { |
| if (element != this.currentElement || this.hideTimer) |
| @@ -128,19 +138,16 @@ var objTabs = |
| /** |
| * Makes the tab element visible. |
| * @param {Element} element |
| * @param {RequestEntry} data |
| */ |
| _showTab: function(element, data) |
| { |
| - if (!this.texts) |
| - this.texts = sendSyncMessage("AdblockPlus:GetObjectTabsTexts"); |
| - |
| let doc = element.ownerDocument.defaultView.top.document; |
| this.objtabElement = doc.createElementNS("http://www.w3.org/1999/xhtml", "a"); |
| this.objtabElement.textContent = this.texts.label; |
| this.objtabElement.setAttribute("title", this.texts.tooltip); |
| this.objtabElement.setAttribute("href", data.location); |
| this.objtabElement.setAttribute("class", this.texts.classHidden); |
| this.objtabElement.style.setProperty("opacity", "1", "important"); |
| @@ -310,17 +317,17 @@ var objTabs = |
| return rect; |
| }, |
| doBlock: function() |
| { |
| let {storeNodes} = require("child/contentPolicy"); |
| let nodesID = storeNodes([this.currentElement]); |
| - sendAsyncMessage("AdblockPlus:BlockItem", { |
| + port.emit("blockItem", { |
| request: this.objtabElement.nodeData, |
| nodesID |
| }); |
| }, |
| /** |
| * Called whenever a timer fires. |
| * @param {nsISupport} subject |