|
@@ -26,85 +26,85 @@
|
|
|
|
|
|
|
|
const FEATURE_TESTS = {};
|
|
const FEATURE_TESTS = {};
|
|
|
|
|
|
|
|
- let browserAPI;
|
|
|
|
|
|
|
+ let nativeAPI;
|
|
|
if (isChrome && !this.browser) {
|
|
if (isChrome && !this.browser) {
|
|
|
- browserAPI = this.chrome;
|
|
|
|
|
|
|
+ nativeAPI = this.chrome;
|
|
|
this.__defineGetter__("browser", () => ({
|
|
this.__defineGetter__("browser", () => ({
|
|
|
browserAction: {
|
|
browserAction: {
|
|
|
onClicked: {
|
|
onClicked: {
|
|
|
- addListener: listener => browserAPI.browserAction.onClicked.addListener(listener)
|
|
|
|
|
|
|
+ addListener: listener => nativeAPI.browserAction.onClicked.addListener(listener)
|
|
|
},
|
|
},
|
|
|
- enable: tabId => browserAPI.browserAction.enable(tabId),
|
|
|
|
|
- disable: tabId => browserAPI.browserAction.disable(tabId),
|
|
|
|
|
|
|
+ enable: tabId => nativeAPI.browserAction.enable(tabId),
|
|
|
|
|
+ disable: tabId => nativeAPI.browserAction.disable(tabId),
|
|
|
setBadgeText: options => new Promise((resolve, reject) => {
|
|
setBadgeText: options => new Promise((resolve, reject) => {
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
if (!FEATURE_TESTS["browserAction.setBadgeText"] || !FEATURE_TESTS["browserAction.setBadgeText"].callbackNotSupported) {
|
|
if (!FEATURE_TESTS["browserAction.setBadgeText"] || !FEATURE_TESTS["browserAction.setBadgeText"].callbackNotSupported) {
|
|
|
try {
|
|
try {
|
|
|
- browserAPI.browserAction.setBadgeText(options, resolve);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setBadgeText(options, resolve);
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
FEATURE_TESTS["browserAction.setBadgeText"] = { callbackNotSupported: true };
|
|
FEATURE_TESTS["browserAction.setBadgeText"] = { callbackNotSupported: true };
|
|
|
- browserAPI.browserAction.setBadgeText(options);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setBadgeText(options);
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- browserAPI.browserAction.setBadgeText(options);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setBadgeText(options);
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}),
|
|
}),
|
|
|
setBadgeBackgroundColor: options => new Promise((resolve, reject) => {
|
|
setBadgeBackgroundColor: options => new Promise((resolve, reject) => {
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
if (!FEATURE_TESTS["browserAction.setBadgeBackgroundColor"] || !FEATURE_TESTS["browserAction.setBadgeBackgroundColor"].callbackNotSupported) {
|
|
if (!FEATURE_TESTS["browserAction.setBadgeBackgroundColor"] || !FEATURE_TESTS["browserAction.setBadgeBackgroundColor"].callbackNotSupported) {
|
|
|
try {
|
|
try {
|
|
|
- browserAPI.browserAction.setBadgeBackgroundColor(options, resolve);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setBadgeBackgroundColor(options, resolve);
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
FEATURE_TESTS["browserAction.setBadgeBackgroundColor"] = { callbackNotSupported: true };
|
|
FEATURE_TESTS["browserAction.setBadgeBackgroundColor"] = { callbackNotSupported: true };
|
|
|
- browserAPI.browserAction.setBadgeBackgroundColor(options);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setBadgeBackgroundColor(options);
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- browserAPI.browserAction.setBadgeBackgroundColor(options);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setBadgeBackgroundColor(options);
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}),
|
|
}),
|
|
|
setTitle: options => new Promise((resolve, reject) => {
|
|
setTitle: options => new Promise((resolve, reject) => {
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
if (!FEATURE_TESTS["browserAction.setTitle"] || !FEATURE_TESTS["browserAction.setTitle"].callbackNotSupported) {
|
|
if (!FEATURE_TESTS["browserAction.setTitle"] || !FEATURE_TESTS["browserAction.setTitle"].callbackNotSupported) {
|
|
|
try {
|
|
try {
|
|
|
- browserAPI.browserAction.setTitle(options, resolve);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setTitle(options, resolve);
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
FEATURE_TESTS["browserAction.setTitle"] = { callbackNotSupported: true };
|
|
FEATURE_TESTS["browserAction.setTitle"] = { callbackNotSupported: true };
|
|
|
- browserAPI.browserAction.setTitle(options);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setTitle(options);
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- browserAPI.browserAction.setTitle(options);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setTitle(options);
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
}),
|
|
}),
|
|
|
setIcon: options => new Promise((resolve, reject) => {
|
|
setIcon: options => new Promise((resolve, reject) => {
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
if (!FEATURE_TESTS["browserAction.setIcon"] || !FEATURE_TESTS["browserAction.setIcon"].callbackNotSupported) {
|
|
if (!FEATURE_TESTS["browserAction.setIcon"] || !FEATURE_TESTS["browserAction.setIcon"].callbackNotSupported) {
|
|
|
try {
|
|
try {
|
|
|
- browserAPI.browserAction.setIcon(options, resolve);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setIcon(options, resolve);
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
FEATURE_TESTS["browserAction.setIcon"] = { callbackNotSupported: true };
|
|
FEATURE_TESTS["browserAction.setIcon"] = { callbackNotSupported: true };
|
|
|
- browserAPI.browserAction.setIcon(options);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setIcon(options);
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- browserAPI.browserAction.setIcon(options);
|
|
|
|
|
|
|
+ nativeAPI.browserAction.setIcon(options);
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -112,40 +112,40 @@
|
|
|
},
|
|
},
|
|
|
downloads: {
|
|
downloads: {
|
|
|
download: options => new Promise((resolve, reject) => {
|
|
download: options => new Promise((resolve, reject) => {
|
|
|
- browserAPI.downloads.download(options, downloadId => {
|
|
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ nativeAPI.downloads.download(options, downloadId => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
resolve(downloadId);
|
|
resolve(downloadId);
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}),
|
|
}),
|
|
|
onChanged: {
|
|
onChanged: {
|
|
|
- addListener: listener => browserAPI.downloads.onChanged.addListener(listener),
|
|
|
|
|
- removeListener: listener => browserAPI.downloads.onChanged.removeListener(listener)
|
|
|
|
|
|
|
+ addListener: listener => nativeAPI.downloads.onChanged.addListener(listener),
|
|
|
|
|
+ removeListener: listener => nativeAPI.downloads.onChanged.removeListener(listener)
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
i18n: {
|
|
i18n: {
|
|
|
- getMessage: (messageName, substitutions) => browserAPI.i18n.getMessage(messageName, substitutions)
|
|
|
|
|
|
|
+ getMessage: (messageName, substitutions) => nativeAPI.i18n.getMessage(messageName, substitutions)
|
|
|
},
|
|
},
|
|
|
menus: {
|
|
menus: {
|
|
|
onClicked: {
|
|
onClicked: {
|
|
|
- addListener: listener => browserAPI.contextMenus.onClicked.addListener(listener)
|
|
|
|
|
|
|
+ addListener: listener => nativeAPI.contextMenus.onClicked.addListener(listener)
|
|
|
},
|
|
},
|
|
|
- create: options => browserAPI.contextMenus.create(options),
|
|
|
|
|
|
|
+ create: options => nativeAPI.contextMenus.create(options),
|
|
|
update: (menuItemId, options) => new Promise((resolve, reject) => {
|
|
update: (menuItemId, options) => new Promise((resolve, reject) => {
|
|
|
- browserAPI.contextMenus.update(menuItemId, options, () => {
|
|
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ nativeAPI.contextMenus.update(menuItemId, options, () => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}),
|
|
}),
|
|
|
removeAll: () => new Promise((resolve, reject) => {
|
|
removeAll: () => new Promise((resolve, reject) => {
|
|
|
- browserAPI.contextMenus.removeAll(() => {
|
|
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ nativeAPI.contextMenus.removeAll(() => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
@@ -154,7 +154,7 @@
|
|
|
},
|
|
},
|
|
|
runtime: {
|
|
runtime: {
|
|
|
onMessage: {
|
|
onMessage: {
|
|
|
- addListener: listener => browserAPI.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
|
|
|
|
|
|
+ addListener: listener => nativeAPI.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
|
|
@@ -170,10 +170,10 @@
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
}),
|
|
}),
|
|
|
- removeListener: listener => browserAPI.runtime.onMessage.removeListener(listener)
|
|
|
|
|
|
|
+ removeListener: listener => nativeAPI.runtime.onMessage.removeListener(listener)
|
|
|
},
|
|
},
|
|
|
onMessageExternal: {
|
|
onMessageExternal: {
|
|
|
- addListener: listener => browserAPI.runtime.onMessageExternal.addListener((message, sender, sendResponse) => {
|
|
|
|
|
|
|
+ addListener: listener => nativeAPI.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
|
|
@@ -191,12 +191,12 @@
|
|
|
})
|
|
})
|
|
|
},
|
|
},
|
|
|
sendMessage: message => new Promise((resolve, reject) =>
|
|
sendMessage: message => new Promise((resolve, reject) =>
|
|
|
- browserAPI.runtime.sendMessage(message, response => {
|
|
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- if (browserAPI.runtime.lastError.message == "The message port closed before a response was received.") {
|
|
|
|
|
|
|
+ nativeAPI.runtime.sendMessage(message, response => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError.message == "The message port closed before a response was received.") {
|
|
|
resolve();
|
|
resolve();
|
|
|
} else {
|
|
} else {
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
resolve(response);
|
|
resolve(response);
|
|
@@ -204,43 +204,43 @@
|
|
|
})
|
|
})
|
|
|
),
|
|
),
|
|
|
getBackgroundPage: () => new Promise((resolve, reject) =>
|
|
getBackgroundPage: () => new Promise((resolve, reject) =>
|
|
|
- browserAPI.runtime.getBackgroundPage(bgPage => {
|
|
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ nativeAPI.runtime.getBackgroundPage(bgPage => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
resolve(bgPage);
|
|
resolve(bgPage);
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
),
|
|
),
|
|
|
- getURL: (path) => browserAPI.runtime.getURL(path),
|
|
|
|
|
|
|
+ getURL: (path) => nativeAPI.runtime.getURL(path),
|
|
|
get lastError() {
|
|
get lastError() {
|
|
|
- return browserAPI.runtime.lastError;
|
|
|
|
|
|
|
+ return nativeAPI.runtime.lastError;
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
storage: {
|
|
storage: {
|
|
|
local: {
|
|
local: {
|
|
|
set: value => new Promise((resolve, reject) => {
|
|
set: value => new Promise((resolve, reject) => {
|
|
|
- browserAPI.storage.local.set(value, () => {
|
|
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ nativeAPI.storage.local.set(value, () => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}),
|
|
}),
|
|
|
get: () => new Promise((resolve, reject) => {
|
|
get: () => new Promise((resolve, reject) => {
|
|
|
- browserAPI.storage.local.get(null, value => {
|
|
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ nativeAPI.storage.local.get(null, value => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
resolve(value);
|
|
resolve(value);
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}),
|
|
}),
|
|
|
clear: () => new Promise((resolve, reject) => {
|
|
clear: () => new Promise((resolve, reject) => {
|
|
|
- browserAPI.storage.local.clear(() => {
|
|
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ nativeAPI.storage.local.clear(() => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
@@ -250,33 +250,33 @@
|
|
|
},
|
|
},
|
|
|
tabs: {
|
|
tabs: {
|
|
|
onCreated: {
|
|
onCreated: {
|
|
|
- addListener: listener => browserAPI.tabs.onCreated.addListener(listener)
|
|
|
|
|
|
|
+ addListener: listener => nativeAPI.tabs.onCreated.addListener(listener)
|
|
|
},
|
|
},
|
|
|
onActivated: {
|
|
onActivated: {
|
|
|
- addListener: listener => browserAPI.tabs.onActivated.addListener(listener)
|
|
|
|
|
|
|
+ addListener: listener => nativeAPI.tabs.onActivated.addListener(listener)
|
|
|
},
|
|
},
|
|
|
onUpdated: {
|
|
onUpdated: {
|
|
|
- addListener: listener => browserAPI.tabs.onUpdated.addListener(listener)
|
|
|
|
|
|
|
+ addListener: listener => nativeAPI.tabs.onUpdated.addListener(listener)
|
|
|
},
|
|
},
|
|
|
onRemoved: {
|
|
onRemoved: {
|
|
|
- addListener: listener => browserAPI.tabs.onRemoved.addListener(listener)
|
|
|
|
|
|
|
+ addListener: listener => nativeAPI.tabs.onRemoved.addListener(listener)
|
|
|
},
|
|
},
|
|
|
executeScript: (tabId, details) => new Promise((resolve, reject) => {
|
|
executeScript: (tabId, details) => new Promise((resolve, reject) => {
|
|
|
- browserAPI.tabs.executeScript(tabId, details, () => {
|
|
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ nativeAPI.tabs.executeScript(tabId, details, () => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
resolve();
|
|
resolve();
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}),
|
|
}),
|
|
|
sendMessage: (tabId, message, options = {}) => new Promise((resolve, reject) =>
|
|
sendMessage: (tabId, message, options = {}) => new Promise((resolve, reject) =>
|
|
|
- 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.") {
|
|
|
|
|
|
|
+ nativeAPI.tabs.sendMessage(tabId, message, options, response => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError.message == "The message port closed before a response was received.") {
|
|
|
resolve();
|
|
resolve();
|
|
|
} else {
|
|
} else {
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
resolve(response);
|
|
resolve(response);
|
|
@@ -284,18 +284,18 @@
|
|
|
})
|
|
})
|
|
|
),
|
|
),
|
|
|
query: options => new Promise((resolve, reject) => {
|
|
query: options => new Promise((resolve, reject) => {
|
|
|
- browserAPI.tabs.query(options, tabs => {
|
|
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ nativeAPI.tabs.query(options, tabs => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
resolve(tabs);
|
|
resolve(tabs);
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
}),
|
|
}),
|
|
|
get: options => new Promise((resolve, reject) => {
|
|
get: options => new Promise((resolve, reject) => {
|
|
|
- browserAPI.tabs.get(options, tab => {
|
|
|
|
|
- if (browserAPI.runtime.lastError) {
|
|
|
|
|
- reject(browserAPI.runtime.lastError);
|
|
|
|
|
|
|
+ nativeAPI.tabs.get(options, tab => {
|
|
|
|
|
+ if (nativeAPI.runtime.lastError) {
|
|
|
|
|
+ reject(nativeAPI.runtime.lastError);
|
|
|
} else {
|
|
} else {
|
|
|
resolve(tab);
|
|
resolve(tab);
|
|
|
}
|
|
}
|