Skip to content
Permalink
Browse files

FIX: Memory Leaks w/ Container (#7750)

Gives instance initializers the ability to add a `teardown` method that
will be called between tests to clean up after themselves.
  • Loading branch information...
eviltrout authored and jjaffeux committed Jun 11, 2019
1 parent 47095a7 commit 3d7c26c15e6a4c834129addef752548208944a40
Showing with 25 additions and 9 deletions.
  1. +16 −9 app/assets/javascripts/discourse/initializers/csrf-token.js.es6
  2. +9 −0 test/javascripts/test_helper.js
@@ -1,21 +1,28 @@
// Append our CSRF token to AJAX requests when necessary.

let installedFilter = false;
let installed = false;
let callbacks = $.Callbacks();

export default {
name: "csrf-token",
initialize: function(container) {
initialize(container) {
// Add a CSRF token to all AJAX requests
let session = container.lookup("session:main");
session.set("csrfToken", $("meta[name=csrf-token]").attr("content"));

if (!installedFilter) {
$.ajaxPrefilter(function(options, originalOptions, xhr) {
if (!options.crossDomain) {
xhr.setRequestHeader("X-CSRF-Token", session.get("csrfToken"));
}
});
installedFilter = true;
if (!installed) {
$.ajaxPrefilter(callbacks.fire);
installed = true;
}

callbacks.add(function(options, originalOptions, xhr) {
if (!options.crossDomain) {
xhr.setRequestHeader("X-CSRF-Token", session.get("csrfToken"));
}
});
},

teardown() {
callbacks.empty();
}
};
@@ -169,6 +169,15 @@ QUnit.testDone(function() {
});
});

Discourse._runInitializer("instanceInitializers", function(
name,
initializer
) {
if (initializer && initializer.teardown) {
initializer.teardown();
}
});

// attempts to remove any subscribed message bus callback
window.MessageBus.callbacks.forEach(function(callback) {
window.MessageBus.unsubscribe(callback.channel, callback.func);

0 comments on commit 3d7c26c

Please sign in to comment.
You can’t perform that action at this time.