summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js')
-rw-r--r--addons/web/static/src/js/core/session.js22
1 files changed, 16 insertions, 6 deletions
diff --git a/addons/web/static/src/js/core/session.js b/addons/web/static/src/js/core/session.js
index 4760867e99f..11423eec909 100644
--- a/addons/web/static/src/js/core/session.js
+++ b/addons/web/static/src/js/core/session.js
@@ -335,7 +335,15 @@ var Session = core.Class.extend(mixins.EventDispatcherMixin, {
delete options.shadow;
- return self.check_session_id().then(function () {
+ var deferred = $.Deferred();
+ var aborted = false;
+ deferred.abort = function () {
+ aborted = true;
+ };
+ self.check_session_id().then(function () {
+ if (aborted) {
+ return deferred.reject('communication', $.Event(), 'abort', 'abort');
+ }
// TODO: remove
if (! _.isString(url)) {
_.extend(options, url);
@@ -363,10 +371,11 @@ var Session = core.Class.extend(mixins.EventDispatcherMixin, {
options.session_id = self.session_id || '';
}
var p = fct(url, "call", params, options);
+ deferred.abort = p.abort.bind(p); // Allow to abort the rpc call
p = p.then(function (result) {
if (! shadow)
self.trigger('response');
- return result;
+ return deferred.resolve(result);
}, function (type, error, textStatus, errorThrown) {
if (type === "server") {
if (! shadow)
@@ -374,7 +383,7 @@ var Session = core.Class.extend(mixins.EventDispatcherMixin, {
if (error.code === 100) {
self.uid = false;
}
- return $.Deferred().reject(error, $.Event());
+ return deferred.reject(error, $.Event());
} else {
if (! shadow)
self.trigger('response_failed');
@@ -383,17 +392,18 @@ var Session = core.Class.extend(mixins.EventDispatcherMixin, {
message: "XmlHttpRequestError " + errorThrown,
data: {type: "xhr"+textStatus, debug: error.responseText, objects: [error, errorThrown] }
};
- return $.Deferred().reject(nerror, $.Event());
+ return deferred.reject(nerror, $.Event());
}
});
- return p.fail(function () { // Allow deferred user to disable rpc_error call in fail
- p.fail(function (error, event) {
+ return deferred.fail(function () { // Allow deferred user to disable rpc_error call in fail
+ deferred.fail(function (error, event) {
if (!event.isDefaultPrevented()) {
self.trigger('error', error, event);
}
});
});
});
+ return deferred;
},
url: function (path, params) {
params = _.extend(params || {});