Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: polyfill.js

Issue 29686631: Issue 4579, 6343 - Let errors from wrapped API calls bubble up (Closed) Base URL: https://hg.adblockplus.org/adblockpluschrome/
Patch Set: Created Feb. 1, 2018, 7:46 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: polyfill.js
===================================================================
--- a/polyfill.js
+++ b/polyfill.js
@@ -93,40 +93,46 @@
// If the last argument is undefined, we drop it from the list assuming
// it stands for the optional callback. We must do this, because we have
// to replace it with our own callback. If we simply append our own
// callback to the list, it won't match the signature of the function and
// will cause an exception.
if (typeof args[args.length - 1] == "undefined")
args.pop();
+ let resolvePromise = null;
+ let rejectPromise = null;
+
+ func.call(object, ...args, result =>
+ {
+ let error = browser.runtime.lastError;
+ if (error && !portClosedBeforeResponseError.test(error.message))
+ {
+ // runtime.lastError is already an Error instance on Edge, while on
+ // Chrome it is a plain object with only a message property.
+ if (!(error instanceof Error))
+ {
+ error = new Error(error.message);
+
+ // Add a more helpful stack trace.
+ error.stack = callStack;
+ }
+
+ rejectPromise(error);
+ }
+ else
+ {
+ resolvePromise(result);
kzar 2018/02/06 09:49:24 I wonder if it could be possible that resolvePromi
Manish Jethani 2018/02/06 11:51:37 Since the APIs we are wrapping are asynchronous, t
+ }
+ });
+
return new Promise((resolve, reject) =>
{
- func.call(object, ...args, result =>
- {
- let error = browser.runtime.lastError;
- if (error && !portClosedBeforeResponseError.test(error.message))
- {
- // runtime.lastError is already an Error instance on Edge, while on
- // Chrome it is a plain object with only a message property.
- if (!(error instanceof Error))
- {
- error = new Error(error.message);
-
- // Add a more helpful stack trace.
- error.stack = callStack;
- }
-
- reject(error);
- }
- else
- {
- resolve(result);
- }
- });
+ resolvePromise = resolve;
+ rejectPromise = reject;
});
};
Object.defineProperty(object, name, descriptor);
}
function wrapRuntimeOnMessage()
{
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld