Gildas 7 лет назад
Родитель
Сommit
b2a4c222c1
1 измененных файлов с 85 добавлено и 78 удалено
  1. 85 78
      lib/browser-polyfill/custom-browser-polyfill.js

+ 85 - 78
lib/browser-polyfill/custom-browser-polyfill.js

@@ -18,90 +18,97 @@
  *   along with SingleFile.  If not, see <http://www.gnu.org/licenses/>.
  *   along with SingleFile.  If not, see <http://www.gnu.org/licenses/>.
  */
  */
 
 
-/* global navigator, chrome */
+/* global navigator */
 
 
 (() => {
 (() => {
 
 
 	const isChrome = navigator.userAgent.includes("Chrome");
 	const isChrome = navigator.userAgent.includes("Chrome");
+	const isEdge = navigator.userAgent.includes("Edge");
 
 
 	const FEATURE_TESTS = {};
 	const FEATURE_TESTS = {};
 
 
-	if (isChrome && !this.browser) {
-		this.browser = {
+	let browserAPI;
+	if ((isChrome && !this.browser) || isEdge) {
+		if (isEdge) {
+			browserAPI = this.browser;
+		} else {
+			browserAPI = this.chrome;
+		}
+		this.__defineGetter__("browser", () => ({
 			browserAction: {
 			browserAction: {
 				onClicked: {
 				onClicked: {
-					addListener: listener => chrome.browserAction.onClicked.addListener(listener)
+					addListener: listener => browserAPI.browserAction.onClicked.addListener(listener)
 				},
 				},
-				enable: tabId => chrome.browserAction.enable(tabId),
-				disable: tabId => chrome.browserAction.disable(tabId),
+				enable: tabId => browserAPI.browserAction.enable(tabId),
+				disable: tabId => browserAPI.browserAction.disable(tabId),
 				setBadgeText: options => new Promise((resolve, reject) => {
 				setBadgeText: options => new Promise((resolve, reject) => {
-					if (chrome.runtime.lastError) {
-						reject(chrome.runtime.lastError);
+					if (browserAPI.runtime.lastError) {
+						reject(browserAPI.runtime.lastError);
 					} else {
 					} else {
 						try {
 						try {
 							if (!FEATURE_TESTS["browserAction.setBadgeText"] || !FEATURE_TESTS["browserAction.setBadgeText"].callbackNotSupported) {
 							if (!FEATURE_TESTS["browserAction.setBadgeText"] || !FEATURE_TESTS["browserAction.setBadgeText"].callbackNotSupported) {
-								chrome.browserAction.setBadgeText(options, resolve);
+								browserAPI.browserAction.setBadgeText(options, resolve);
 							} else {
 							} else {
-								chrome.browserAction.setBadgeText(options);
+								browserAPI.browserAction.setBadgeText(options);
 								resolve();
 								resolve();
 							}
 							}
 						} catch (error) {
 						} catch (error) {
 							FEATURE_TESTS["browserAction.setBadgeText"] = { callbackNotSupported: false };
 							FEATURE_TESTS["browserAction.setBadgeText"] = { callbackNotSupported: false };
-							chrome.browserAction.setBadgeText(options);
+							browserAPI.browserAction.setBadgeText(options);
 							resolve();
 							resolve();
 						}
 						}
 					}
 					}
 				}),
 				}),
 				setBadgeBackgroundColor: options => new Promise((resolve, reject) => {
 				setBadgeBackgroundColor: options => new Promise((resolve, reject) => {
-					if (chrome.runtime.lastError) {
-						reject(chrome.runtime.lastError);
+					if (browserAPI.runtime.lastError) {
+						reject(browserAPI.runtime.lastError);
 					} else {
 					} else {
 						try {
 						try {
 							if (!FEATURE_TESTS["browserAction.setBadgeBackgroundColor"] || !FEATURE_TESTS["browserAction.setBadgeBackgroundColor"].callbackNotSupported) {
 							if (!FEATURE_TESTS["browserAction.setBadgeBackgroundColor"] || !FEATURE_TESTS["browserAction.setBadgeBackgroundColor"].callbackNotSupported) {
-								chrome.browserAction.setBadgeBackgroundColor(options, resolve);
+								browserAPI.browserAction.setBadgeBackgroundColor(options, resolve);
 							} else {
 							} else {
-								chrome.browserAction.setBadgeBackgroundColor(options);
+								browserAPI.browserAction.setBadgeBackgroundColor(options);
 								resolve();
 								resolve();
 							}
 							}
 						} catch (error) {
 						} catch (error) {
 							FEATURE_TESTS["browserAction.setBadgeBackgroundColor"] = { callbackNotSupported: false };
 							FEATURE_TESTS["browserAction.setBadgeBackgroundColor"] = { callbackNotSupported: false };
-							chrome.browserAction.setBadgeBackgroundColor(options);
+							browserAPI.browserAction.setBadgeBackgroundColor(options);
 							resolve();
 							resolve();
 						}
 						}
 					}
 					}
 				}),
 				}),
 				setTitle: options => new Promise((resolve, reject) => {
 				setTitle: options => new Promise((resolve, reject) => {
-					if (chrome.runtime.lastError) {
-						reject(chrome.runtime.lastError);
+					if (browserAPI.runtime.lastError) {
+						reject(browserAPI.runtime.lastError);
 					} else {
 					} else {
 						try {
 						try {
 							if (!FEATURE_TESTS["browserAction.setTitle"] || !FEATURE_TESTS["browserAction.setTitle"].callbackNotSupported) {
 							if (!FEATURE_TESTS["browserAction.setTitle"] || !FEATURE_TESTS["browserAction.setTitle"].callbackNotSupported) {
-								chrome.browserAction.setTitle(options, resolve);
+								browserAPI.browserAction.setTitle(options, resolve);
 							} else {
 							} else {
-								chrome.browserAction.setTitle(options);
+								browserAPI.browserAction.setTitle(options);
 								resolve();
 								resolve();
 							}
 							}
 						} catch (error) {
 						} catch (error) {
 							FEATURE_TESTS["browserAction.setTitle"] = { callbackNotSupported: false };
 							FEATURE_TESTS["browserAction.setTitle"] = { callbackNotSupported: false };
-							chrome.browserAction.setTitle(options);
+							browserAPI.browserAction.setTitle(options);
 							resolve();
 							resolve();
 						}
 						}
 					}
 					}
 				}),
 				}),
 				setIcon: options => new Promise((resolve, reject) => {
 				setIcon: options => new Promise((resolve, reject) => {
-					if (chrome.runtime.lastError) {
-						reject(chrome.runtime.lastError);
+					if (browserAPI.runtime.lastError) {
+						reject(browserAPI.runtime.lastError);
 					} else {
 					} else {
 						try {
 						try {
 							if (!FEATURE_TESTS["browserAction.setIcon"] || !FEATURE_TESTS["browserAction.setIcon"].callbackNotSupported) {
 							if (!FEATURE_TESTS["browserAction.setIcon"] || !FEATURE_TESTS["browserAction.setIcon"].callbackNotSupported) {
-								chrome.browserAction.setIcon(options, resolve);
+								browserAPI.browserAction.setIcon(options, resolve);
 							} else {
 							} else {
-								chrome.browserAction.setIcon(options);
+								browserAPI.browserAction.setIcon(options);
 								resolve();
 								resolve();
 							}
 							}
 						} catch (error) {
 						} catch (error) {
 							FEATURE_TESTS["browserAction.setIcon"] = { callbackNotSupported: false };
 							FEATURE_TESTS["browserAction.setIcon"] = { callbackNotSupported: false };
-							chrome.browserAction.setIcon(options);
+							browserAPI.browserAction.setIcon(options);
 							resolve();
 							resolve();
 						}
 						}
 					}
 					}
@@ -109,40 +116,40 @@
 			},
 			},
 			downloads: {
 			downloads: {
 				download: options => new Promise((resolve, reject) => {
 				download: options => new Promise((resolve, reject) => {
-					chrome.downloads.download(options, downloadId => {
-						if (chrome.runtime.lastError) {
-							reject(chrome.runtime.lastError);
+					browserAPI.downloads.download(options, downloadId => {
+						if (browserAPI.runtime.lastError) {
+							reject(browserAPI.runtime.lastError);
 						} else {
 						} else {
 							resolve(downloadId);
 							resolve(downloadId);
 						}
 						}
 					});
 					});
 				}),
 				}),
 				onChanged: {
 				onChanged: {
-					addListener: listener => chrome.downloads.onChanged.addListener(listener),
-					removeListener: listener => chrome.downloads.onChanged.removeListener(listener)
+					addListener: listener => browserAPI.downloads.onChanged.addListener(listener),
+					removeListener: listener => browserAPI.downloads.onChanged.removeListener(listener)
 				}
 				}
 			},
 			},
 			i18n: {
 			i18n: {
-				getMessage: (messageName, substitutions) => chrome.i18n.getMessage(messageName, substitutions)
+				getMessage: (messageName, substitutions) => browserAPI.i18n.getMessage(messageName, substitutions)
 			},
 			},
 			menus: {
 			menus: {
 				onClicked: {
 				onClicked: {
-					addListener: listener => chrome.contextMenus.onClicked.addListener(listener)
+					addListener: listener => browserAPI.contextMenus.onClicked.addListener(listener)
 				},
 				},
-				create: options => chrome.contextMenus.create(options),
+				create: options => browserAPI.contextMenus.create(options),
 				update: (menuItemId, options) => new Promise((resolve, reject) => {
 				update: (menuItemId, options) => new Promise((resolve, reject) => {
-					chrome.contextMenus.update(menuItemId, options, () => {
-						if (chrome.runtime.lastError) {
-							reject(chrome.runtime.lastError);
+					browserAPI.contextMenus.update(menuItemId, options, () => {
+						if (browserAPI.runtime.lastError) {
+							reject(browserAPI.runtime.lastError);
 						} else {
 						} else {
 							resolve();
 							resolve();
 						}
 						}
 					});
 					});
 				}),
 				}),
 				removeAll: () => new Promise((resolve, reject) => {
 				removeAll: () => new Promise((resolve, reject) => {
-					chrome.contextMenus.removeAll(() => {
-						if (chrome.runtime.lastError) {
-							reject(chrome.runtime.lastError);
+					browserAPI.contextMenus.removeAll(() => {
+						if (browserAPI.runtime.lastError) {
+							reject(browserAPI.runtime.lastError);
 						} else {
 						} else {
 							resolve();
 							resolve();
 						}
 						}
@@ -151,7 +158,7 @@
 			},
 			},
 			runtime: {
 			runtime: {
 				onMessage: {
 				onMessage: {
-					addListener: listener => chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
+					addListener: listener => browserAPI.runtime.onMessage.addListener((message, sender, sendResponse) => {
 						const response = listener(message, sender);
 						const response = listener(message, sender);
 						if (response && typeof response.then == "function") {
 						if (response && typeof response.then == "function") {
 							response
 							response
@@ -169,7 +176,7 @@
 					})
 					})
 				},
 				},
 				onMessageExternal: {
 				onMessageExternal: {
-					addListener: listener => chrome.runtime.onMessageExternal.addListener((message, sender, sendResponse) => {
+					addListener: listener => browserAPI.runtime.onMessageExternal.addListener((message, sender, sendResponse) => {
 						const response = listener(message, sender);
 						const response = listener(message, sender);
 						if (response && typeof response.then == "function") {
 						if (response && typeof response.then == "function") {
 							response
 							response
@@ -187,12 +194,12 @@
 					})
 					})
 				},
 				},
 				sendMessage: message => new Promise((resolve, reject) =>
 				sendMessage: message => new Promise((resolve, reject) =>
-					chrome.runtime.sendMessage(message, response => {
-						if (chrome.runtime.lastError) {
-							if (chrome.runtime.lastError.message == "The message port closed before a response was received.") {
+					browserAPI.runtime.sendMessage(message, response => {
+						if (browserAPI.runtime.lastError) {
+							if (browserAPI.runtime.lastError.message == "The message port closed before a response was received.") {
 								resolve();
 								resolve();
 							} else {
 							} else {
-								reject(chrome.runtime.lastError);
+								reject(browserAPI.runtime.lastError);
 							}
 							}
 						} else {
 						} else {
 							resolve(response);
 							resolve(response);
@@ -200,43 +207,43 @@
 					})
 					})
 				),
 				),
 				getBackgroundPage: () => new Promise((resolve, reject) =>
 				getBackgroundPage: () => new Promise((resolve, reject) =>
-					chrome.runtime.getBackgroundPage(bgPage => {
-						if (chrome.runtime.lastError) {
-							reject(chrome.runtime.lastError);
+					browserAPI.runtime.getBackgroundPage(bgPage => {
+						if (browserAPI.runtime.lastError) {
+							reject(browserAPI.runtime.lastError);
 						} else {
 						} else {
 							resolve(bgPage);
 							resolve(bgPage);
 						}
 						}
 					})
 					})
 				),
 				),
-				getURL: (path) => chrome.runtime.getURL(path),
+				getURL: (path) => browserAPI.runtime.getURL(path),
 				get lastError() {
 				get lastError() {
-					return chrome.runtime.lastError;
+					return browserAPI.runtime.lastError;
 				}
 				}
 			},
 			},
 			storage: {
 			storage: {
 				local: {
 				local: {
 					set: value => new Promise((resolve, reject) => {
 					set: value => new Promise((resolve, reject) => {
-						chrome.storage.local.set(value, () => {
-							if (chrome.runtime.lastError) {
-								reject(chrome.runtime.lastError);
+						browserAPI.storage.local.set(value, () => {
+							if (browserAPI.runtime.lastError) {
+								reject(browserAPI.runtime.lastError);
 							} else {
 							} else {
 								resolve();
 								resolve();
 							}
 							}
 						});
 						});
 					}),
 					}),
 					get: () => new Promise((resolve, reject) => {
 					get: () => new Promise((resolve, reject) => {
-						chrome.storage.local.get(value => {
-							if (chrome.runtime.lastError) {
-								reject(chrome.runtime.lastError);
+						browserAPI.storage.local.get(null, value => {
+							if (browserAPI.runtime.lastError) {
+								reject(browserAPI.runtime.lastError);
 							} else {
 							} else {
 								resolve(value);
 								resolve(value);
 							}
 							}
 						});
 						});
 					}),
 					}),
 					clear: () => new Promise((resolve, reject) => {
 					clear: () => new Promise((resolve, reject) => {
-						chrome.storage.local.clear(() => {
-							if (chrome.runtime.lastError) {
-								reject(chrome.runtime.lastError);
+						browserAPI.storage.local.clear(() => {
+							if (browserAPI.runtime.lastError) {
+								reject(browserAPI.runtime.lastError);
 							} else {
 							} else {
 								resolve();
 								resolve();
 							}
 							}
@@ -246,33 +253,33 @@
 			},
 			},
 			tabs: {
 			tabs: {
 				onCreated: {
 				onCreated: {
-					addListener: listener => chrome.tabs.onCreated.addListener(listener)
+					addListener: listener => browserAPI.tabs.onCreated.addListener(listener)
 				},
 				},
 				onActivated: {
 				onActivated: {
-					addListener: listener => chrome.tabs.onActivated.addListener(listener)
+					addListener: listener => browserAPI.tabs.onActivated.addListener(listener)
 				},
 				},
 				onUpdated: {
 				onUpdated: {
-					addListener: listener => chrome.tabs.onUpdated.addListener(listener)
+					addListener: listener => browserAPI.tabs.onUpdated.addListener(listener)
 				},
 				},
 				onRemoved: {
 				onRemoved: {
-					addListener: listener => chrome.tabs.onRemoved.addListener(listener)
+					addListener: listener => browserAPI.tabs.onRemoved.addListener(listener)
 				},
 				},
 				executeScript: (tabId, details) => new Promise((resolve, reject) => {
 				executeScript: (tabId, details) => new Promise((resolve, reject) => {
-					chrome.tabs.executeScript(tabId, details, () => {
-						if (chrome.runtime.lastError) {
-							reject(chrome.runtime.lastError);
+					browserAPI.tabs.executeScript(tabId, details, () => {
+						if (browserAPI.runtime.lastError) {
+							reject(browserAPI.runtime.lastError);
 						} else {
 						} else {
 							resolve();
 							resolve();
 						}
 						}
 					});
 					});
 				}),
 				}),
 				sendMessage: (tabId, message, options = {}) => new Promise((resolve, reject) =>
 				sendMessage: (tabId, message, options = {}) => new Promise((resolve, reject) =>
-					chrome.tabs.sendMessage(tabId, message, options, response => {
-						if (chrome.runtime.lastError) {
-							if (chrome.runtime.lastError.message == "The message port closed before a response was received.") {
+					browserAPI.tabs.sendMessage(tabId, message, options, response => {
+						if (browserAPI.runtime.lastError) {
+							if (browserAPI.runtime.lastError.message == "The message port closed before a response was received.") {
 								resolve();
 								resolve();
 							} else {
 							} else {
-								reject(chrome.runtime.lastError);
+								reject(browserAPI.runtime.lastError);
 							}
 							}
 						} else {
 						} else {
 							resolve(response);
 							resolve(response);
@@ -280,25 +287,25 @@
 					})
 					})
 				),
 				),
 				query: options => new Promise((resolve, reject) => {
 				query: options => new Promise((resolve, reject) => {
-					chrome.tabs.query(options, tabs => {
-						if (chrome.runtime.lastError) {
-							reject(chrome.runtime.lastError);
+					browserAPI.tabs.query(options, tabs => {
+						if (browserAPI.runtime.lastError) {
+							reject(browserAPI.runtime.lastError);
 						} else {
 						} else {
 							resolve(tabs);
 							resolve(tabs);
 						}
 						}
 					});
 					});
 				}),
 				}),
 				get: options => new Promise((resolve, reject) => {
 				get: options => new Promise((resolve, reject) => {
-					chrome.tabs.get(options, tab => {
-						if (chrome.runtime.lastError) {
-							reject(chrome.runtime.lastError);
+					browserAPI.tabs.get(options, tab => {
+						if (browserAPI.runtime.lastError) {
+							reject(browserAPI.runtime.lastError);
 						} else {
 						} else {
 							resolve(tab);
 							resolve(tab);
 						}
 						}
 					});
 					});
 				})
 				})
 			}
 			}
-		};
+		}));
 	}
 	}
 
 
 })();
 })();