diff --git a/resources/static/shared/xhr.js b/resources/static/shared/xhr.js index e88b357400ea91671ad84c8f494a3c823717b6ee..ace42d70d9fb5143c61cdde21c04c811ae01b322 100644 --- a/resources/static/shared/xhr.js +++ b/resources/static/shared/xhr.js @@ -29,21 +29,19 @@ BrowserID.XHR = (function() { clearContext(); } - function xhrError(cb, info) { - return function(jqXHR, textStatus, errorThrown) { - info = info || {}; - var network = _.extend(info.network || {}, { - status: jqXHR && jqXHR.status, - textStatus: textStatus, - errorThrown: errorThrown, - responseText: jqXHR.responseText - }); + function xhrError(cb, info, jqXHR, textStatus, errorThrown) { + info = info || {}; + var network = _.extend(info.network || {}, { + status: jqXHR && jqXHR.status, + textStatus: textStatus, + errorThrown: errorThrown, + responseText: jqXHR.responseText + }); - info.network = network; - mediator.publish("xhr_error", info); + info.network = network; + mediator.publish("xhr_error", info); - if (cb) cb(info); - }; + if (cb) cb(info); } function xhrDelay(reqInfo) { @@ -88,7 +86,7 @@ BrowserID.XHR = (function() { } xhrComplete(reqInfo); - _.defer(xhrError(errorCB, reqInfo).curry(resp, jqXHR, textResponse)); + _.defer(xhrError.curry(errorCB, reqInfo, resp, jqXHR, textResponse)); }; var req = _.extend({}, options, { @@ -115,8 +113,6 @@ BrowserID.XHR = (function() { function withContext(cb, onFailure) { if (typeof context !== 'undefined') cb(context); else { - // We do not use get because the success response is deferred making our - // local/server time offset calculations skewed. request({ type: "GET", url: "/wsapi/session_context", @@ -126,6 +122,10 @@ BrowserID.XHR = (function() { mediator.publish("context_info", result); + if(!result.has_cookies) { + mediator.publish("no_cookies"); + } + cb && cb(result); }, error: onFailure diff --git a/resources/static/test/qunit/mocks/xhr.js b/resources/static/test/qunit/mocks/xhr.js index 88a9cde5ed50b538d51dd7f375bf161f7fd2db57..b89f89808b71f51f9508e0bee4bb9dee8abdf4d3 100644 --- a/resources/static/test/qunit/mocks/xhr.js +++ b/resources/static/test/qunit/mocks/xhr.js @@ -13,7 +13,8 @@ BrowserID.Mocks.xhr = (function() { authenticated: false, auth_level: undefined, code_version: "ABC123", - random_seed: "H+ZgKuhjVckv/H4i0Qvj/JGJEGDVOXSIS5RCOjY9/Bo=" + random_seed: "H+ZgKuhjVckv/H4i0Qvj/JGJEGDVOXSIS5RCOjY9/Bo=", + has_cookies: true }; // this cert is meaningless, but it has the right format diff --git a/resources/static/test/qunit/shared/xhr_unit_test.js b/resources/static/test/qunit/shared/xhr_unit_test.js index 926e7cb646d70d0f22cf1554a79f431937d2ff15..750b96ab7815dbc7f061ad7422ab6df7f850883b 100644 --- a/resources/static/test/qunit/shared/xhr_unit_test.js +++ b/resources/static/test/qunit/shared/xhr_unit_test.js @@ -177,7 +177,18 @@ start(); } }); + }); + + asyncTest("withContext with has_cookies set to false - trigger 'no_cookies'", function() { + transport.setContextInfo("has_cookies", false); + + var noCookiesCalled; + testHelpers.register("no_cookies"); + xhr.withContext(function() { + testHelpers.testTriggered("no_cookies"); + start(); + }, testHelpers.unexpectedXHRFailure); }); diff --git a/resources/static/test/qunit/testHelpers/helpers.js b/resources/static/test/qunit/testHelpers/helpers.js index 3b903d40927160c03d542a4e6fef3832efbf945a..435fde547610f4e7f9d4cde3c72e55f4b96c6687 100644 --- a/resources/static/test/qunit/testHelpers/helpers.js +++ b/resources/static/test/qunit/testHelpers/helpers.js @@ -59,6 +59,7 @@ BrowserID.TestHelpers = (function() { transport.setDelay(0); transport.setContextInfo("auth_level", undefined); + transport.setContextInfo("has_cookies", true); transport.useResult("valid"); network.init(); @@ -109,6 +110,10 @@ BrowserID.TestHelpers = (function() { return calls[message]; }, + testTriggered: function(message) { + equal(calls[message], true, message + " was triggered"); + }, + errorVisible: function() { return screens.error.visible; },