Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(672)

Unified Diff: extensions/renderer/resources/utils.js

Issue 2952893002: [Extensions Bindings] Move setHandleRequestWithPromise to util (Closed)
Patch Set: lazyboy's Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: extensions/renderer/resources/utils.js
diff --git a/extensions/renderer/resources/utils.js b/extensions/renderer/resources/utils.js
index 3b5a68d6145b1d258f325772ca2f919140e5f37c..0ec387be5ab2bd4fbe043c90101002da9e53c820 100644
--- a/extensions/renderer/resources/utils.js
+++ b/extensions/renderer/resources/utils.js
@@ -4,6 +4,22 @@
var nativeDeepCopy = requireNative('utils').deepCopy;
var DCHECK = requireNative('logging').DCHECK;
+var WARNING = requireNative('logging').WARNING;
+var logActivity = requireNative('activityLogger');
+var exceptionHandler = require('uncaught_exception_handler');
+
+var runCallbackWithLastError;
+if (bindingUtil) {
+ runCallbackWithLastError = function(name, message, stack, callback, args) {
+ bindingUtil.runCallbackWithLastError(message, function() {
+ $Function.apply(callback, null, args);
+ });
+ }
+} else {
+ var lastError = require('lastError');
+ if (lastError) // lastError can be undefined in unittests.
+ runCallbackWithLastError = lastError.run;
+}
/**
* An object forEach. Calls |f| with each (key, value) pair of |obj|, using
@@ -206,9 +222,43 @@ function promise(func) {
});
}
+// DO NOT USE. This causes problems with safe builtins, and makes migration to
+// native bindings more difficult.
+function handleRequestWithPromiseDoNotUse(
+ binding, apiName, methodName, customizedFunction) {
+ var fullName = apiName + '.' + methodName;
+ var extensionId = requireNative('process').GetExtensionId();
+ binding.setHandleRequest(methodName, function() {
+ logActivity.LogAPICall(extensionId, fullName, $Array.slice(arguments));
+ var stack = exceptionHandler.getExtensionStackTrace();
+ var callback = arguments[arguments.length - 1];
+ var args = $Array.slice(arguments, 0, arguments.length - 1);
+ var keepAlivePromise = requireAsync('keep_alive').then(function(module) {
+ return module.createKeepAlive();
+ });
+ $Function.apply(customizedFunction, this, args).then(function(result) {
+ if (callback) {
+ exceptionHandler.safeCallbackApply(
+ fullName, {__proto__: null, stack: stack}, callback, [result]);
+ }
+ }).catch(function(error) {
+ if (callback) {
+ var message = exceptionHandler.safeErrorToString(error, true);
+ runCallbackWithLastError(fullName, message, stack, callback);
+ }
+ }).then(function() {
+ keepAlivePromise.then(function(keepAlive) {
+ keepAlive.close();
+ });
+ });
+ });
+};
+
exports.$set('forEach', forEach);
exports.$set('lookup', lookup);
exports.$set('defineProperty', defineProperty);
exports.$set('expose', expose);
exports.$set('deepCopy', deepCopy);
exports.$set('promise', promise);
+exports.$set('handleRequestWithPromiseDoNotUse',
+ handleRequestWithPromiseDoNotUse);

Powered by Google App Engine
This is Rietveld 408576698