| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
| 3  * Copyright (C) 2006-present eyeo GmbH | 3  * Copyright (C) 2006-present eyeo GmbH | 
| 4  * | 4  * | 
| 5  * Adblock Plus is free software: you can redistribute it and/or modify | 5  * Adblock Plus is free software: you can redistribute it and/or modify | 
| 6  * it under the terms of the GNU General Public License version 3 as | 6  * it under the terms of the GNU General Public License version 3 as | 
| 7  * published by the Free Software Foundation. | 7  * published by the Free Software Foundation. | 
| 8  * | 8  * | 
| 9  * Adblock Plus is distributed in the hope that it will be useful, | 9  * Adblock Plus is distributed in the hope that it will be useful, | 
| 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 310   chrome.tabs.onRemoved.addListener(forgetTab); | 310   chrome.tabs.onRemoved.addListener(forgetTab); | 
| 311 | 311 | 
| 312   chrome.tabs.onActivated.addListener(details => | 312   chrome.tabs.onActivated.addListener(details => | 
| 313   { | 313   { | 
| 314     ext.pages.onActivated._dispatch(new Page({id: details.tabId})); | 314     ext.pages.onActivated._dispatch(new Page({id: details.tabId})); | 
| 315   }); | 315   }); | 
| 316 | 316 | 
| 317 | 317 | 
| 318   /* Browser actions */ | 318   /* Browser actions */ | 
| 319 | 319 | 
| 320   // On Firefox for Android, open the options page directly when the browser |  | 
| 321   // action is clicked. |  | 
| 322   if (!("getPopup" in chrome.browserAction)) |  | 
| 323   { |  | 
| 324     chrome.browserAction.onClicked.addListener(() => |  | 
| 325     { |  | 
| 326       ext.showOptions(); |  | 
| 327     }); |  | 
| 328   } |  | 
| 329 |  | 
| 330   let BrowserAction = function(tabId) | 320   let BrowserAction = function(tabId) | 
| 331   { | 321   { | 
| 332     this._tabId = tabId; | 322     this._tabId = tabId; | 
| 333     this._changes = null; | 323     this._changes = null; | 
| 334   }; | 324   }; | 
| 335   BrowserAction.prototype = { | 325   BrowserAction.prototype = { | 
| 336     _applyChanges() | 326     _applyChanges() | 
| 337     { | 327     { | 
| 338       if ("iconPath" in this._changes) | 328       if ("iconPath" in this._changes) | 
| 339       { | 329       { | 
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 688       items[key] = value; | 678       items[key] = value; | 
| 689       chrome.storage.local.set(items, callback); | 679       chrome.storage.local.set(items, callback); | 
| 690     }, | 680     }, | 
| 691     remove(key, callback) | 681     remove(key, callback) | 
| 692     { | 682     { | 
| 693       chrome.storage.local.remove(key, callback); | 683       chrome.storage.local.remove(key, callback); | 
| 694     }, | 684     }, | 
| 695     onChanged: chrome.storage.onChanged | 685     onChanged: chrome.storage.onChanged | 
| 696   }; | 686   }; | 
| 697 | 687 | 
| 698   /* Options */ |  | 
| 699 |  | 
| 700   ext.showOptions = callback => |  | 
| 701   { |  | 
| 702     let info = require("info"); |  | 
| 703 |  | 
| 704     if ("openOptionsPage" in chrome.runtime && |  | 
| 705         // Some versions of Firefox for Android before version 57 do have a |  | 
| 706         // runtime.openOptionsPage but it doesn't do anything. |  | 
| 707         // https://bugzilla.mozilla.org/show_bug.cgi?id=1364945 |  | 
| 708         (info.application != "fennec" || |  | 
| 709          parseInt(info.applicationVersion, 10) >= 57)) |  | 
| 710     { |  | 
| 711       if (!callback) |  | 
| 712       { |  | 
| 713         chrome.runtime.openOptionsPage(); |  | 
| 714       } |  | 
| 715       else |  | 
| 716       { |  | 
| 717         chrome.runtime.openOptionsPage(() => |  | 
| 718         { |  | 
| 719           if (chrome.runtime.lastError) |  | 
| 720             return; |  | 
| 721 |  | 
| 722           chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => |  | 
| 723           { |  | 
| 724             if (tabs.length > 0) |  | 
| 725             { |  | 
| 726               if (tabs[0].status == "complete") |  | 
| 727                 callback(new Page(tabs[0])); |  | 
| 728               else |  | 
| 729                 afterTabLoaded(callback)(tabs[0]); |  | 
| 730             } |  | 
| 731           }); |  | 
| 732         }); |  | 
| 733       } |  | 
| 734     } |  | 
| 735     else if ("windows" in chrome) |  | 
| 736     { |  | 
| 737       // Edge does not yet support runtime.openOptionsPage (tested version 38) |  | 
| 738       // and so this workaround needs to stay for now. |  | 
| 739       // We are not using extension.getURL to get the absolute path here |  | 
| 740       // because of the Edge issue: |  | 
| 741       // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10
     276332/ |  | 
| 742       let optionsUrl = "options.html"; |  | 
| 743       let fullOptionsUrl = ext.getURL(optionsUrl); |  | 
| 744 |  | 
| 745       chrome.tabs.query({}, tabs => |  | 
| 746       { |  | 
| 747         // We find a tab ourselves because Edge has a bug when quering tabs |  | 
| 748         // with extension URL protocol: |  | 
| 749         // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/
     8094141/ |  | 
| 750         // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/
     8604703/ |  | 
| 751         let tab = tabs.find(element => element.url == fullOptionsUrl); |  | 
| 752         if (tab) |  | 
| 753         { |  | 
| 754           chrome.windows.update(tab.windowId, {focused: true}); |  | 
| 755           chrome.tabs.update(tab.id, {active: true}); |  | 
| 756 |  | 
| 757           if (callback) |  | 
| 758             callback(new Page(tab)); |  | 
| 759         } |  | 
| 760         else |  | 
| 761         { |  | 
| 762           ext.pages.open(optionsUrl, callback); |  | 
| 763         } |  | 
| 764       }); |  | 
| 765     } |  | 
| 766     else |  | 
| 767     { |  | 
| 768       // Firefox for Android before version 57 does not support |  | 
| 769       // runtime.openOptionsPage, nor does it support the windows API. Since |  | 
| 770       // there is effectively only one window on the mobile browser, there's no |  | 
| 771       // need to bring it into focus. |  | 
| 772       ext.pages.open("options.html", callback); |  | 
| 773     } |  | 
| 774   }; |  | 
| 775 |  | 
| 776   /* Windows */ | 688   /* Windows */ | 
| 777   ext.windows = { | 689   ext.windows = { | 
| 778     create(createData, callback) | 690     create(createData, callback) | 
| 779     { | 691     { | 
| 780       chrome.windows.create(createData, createdWindow => | 692       chrome.windows.create(createData, createdWindow => | 
| 781       { | 693       { | 
| 782         afterTabLoaded(callback)(createdWindow.tabs[0]); | 694         afterTabLoaded(callback)(createdWindow.tabs[0]); | 
| 783       }); | 695       }); | 
| 784     } | 696     } | 
| 785   }; | 697   }; | 
| 786 }()); | 698 }()); | 
| OLD | NEW | 
|---|