| LEFT | RIGHT | 
|    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 | 
|   11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |   11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|   12  * GNU General Public License for more details. |   12  * GNU General Public License for more details. | 
|   13  * |   13  * | 
|   14  * You should have received a copy of the GNU General Public License |   14  * You should have received a copy of the GNU General Public License | 
|   15  * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. |   15  * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 
|   16  */ |   16  */ | 
|   17  |   17  | 
|   18 "use strict"; |   18 "use strict"; | 
|   19  |   19  | 
|   20 { |   20 { | 
|   21   const asyncAPIs = [ |   21   const asyncAPIs = [ | 
|   22     "browserAction.getPopup", |  | 
|   23     "contextMenus.removeAll", |   22     "contextMenus.removeAll", | 
|   24     "devtools.panels.create", |   23     "devtools.panels.create", | 
|   25     "notifications.clear", |   24     "notifications.clear", | 
|   26     "notifications.create", |   25     "notifications.create", | 
 |   26     "runtime.getBrowserInfo", | 
|   27     "runtime.openOptionsPage", |   27     "runtime.openOptionsPage", | 
|   28     "runtime.sendMessage", |   28     "runtime.sendMessage", | 
|   29     "runtime.setUninstallURL", |   29     "runtime.setUninstallURL", | 
|   30     "storage.local.get", |   30     "storage.local.get", | 
|   31     "storage.local.remove", |   31     "storage.local.remove", | 
|   32     "storage.local.set", |   32     "storage.local.set", | 
|   33     "storage.managed.get", |   33     "storage.managed.get", | 
|   34     "tabs.create", |   34     "tabs.create", | 
|   35     "tabs.get", |   35     "tabs.get", | 
|   36     "tabs.getCurrent", |   36     "tabs.getCurrent", | 
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  122     } |  122     } | 
|  123     catch (error) |  123     catch (error) | 
|  124     { |  124     { | 
|  125     } |  125     } | 
|  126  |  126  | 
|  127     return true; |  127     return true; | 
|  128   } |  128   } | 
|  129  |  129  | 
|  130   if (shouldWrapAPIs()) |  130   if (shouldWrapAPIs()) | 
|  131   { |  131   { | 
|  132     // Unlike Firefox and Microsoft Edge, Chrome doesn't have a "browser" object
     , |  132     // Unlike Firefox and Microsoft Edge, Chrome doesn't have a "browser" | 
|  133     // but provides the extension API through the "chrome" namespace |  133     // object, but provides the extension API through the "chrome" namespace | 
|  134     // (non-standard). |  134     // (non-standard). | 
|  135     if (typeof browser == "undefined") |  135     if (typeof browser == "undefined") | 
|  136       window.browser = chrome; |  136       window.browser = chrome; | 
|  137  |  137  | 
|  138     for (let api of asyncAPIs) |  138     for (let api of asyncAPIs) | 
|  139       wrapAPI(api); |  139       wrapAPI(api); | 
|  140   } |  140   } | 
|  141  |  141  | 
|  142   // Workaround since HTMLCollection, NodeList, StyleSheetList, and CSSRuleList |  142   // Workaround since HTMLCollection, NodeList, StyleSheetList, and CSSRuleList | 
|  143   // didn't have iterator support before Chrome 51. |  143   // didn't have iterator support before Chrome 51. | 
|  144   // https://bugs.chromium.org/p/chromium/issues/detail?id=401699 |  144   // https://bugs.chromium.org/p/chromium/issues/detail?id=401699 | 
|  145   for (let object of [HTMLCollection, NodeList, StyleSheetList, CSSRuleList]) |  145   for (let object of [HTMLCollection, NodeList, StyleSheetList, CSSRuleList]) | 
|  146   { |  146   { | 
|  147     if (!(Symbol.iterator in object.prototype)) |  147     if (!(Symbol.iterator in object.prototype)) | 
|  148       object.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator]; |  148       object.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator]; | 
|  149   } |  149   } | 
|  150 } |  150 } | 
| LEFT | RIGHT |