summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2011-03-05 00:21:49 -0600
committerAdam Young <ayoung@redhat.com>2011-03-06 20:50:07 -0500
commit154ed91457a258013a2f15cbbbf5adc36cf0e20a (patch)
tree7908bce7b3ad0a50e76a0886fe5d26a9497f21c8
parent2a6e7b5e3c8a16bf2c3e1e91bd953e7c073612f2 (diff)
downloadfreeipa-154ed91457a258013a2f15cbbbf5adc36cf0e20a.zip
freeipa-154ed91457a258013a2f15cbbbf5adc36cf0e20a.tar.gz
freeipa-154ed91457a258013a2f15cbbbf5adc36cf0e20a.tar.xz
Fixed memory leak caused by IPA.error_dialog.
Ticket 1054
-rw-r--r--install/ui/ipa.js50
-rw-r--r--install/ui/test/ipa_tests.js6
2 files changed, 29 insertions, 27 deletions
diff --git a/install/ui/ipa.js b/install/ui/ipa.js
index cbe009b..732923b 100644
--- a/install/ui/ipa.js
+++ b/install/ui/ipa.js
@@ -52,10 +52,6 @@ var IPA = ( function () {
that.entities_by_name = {};
- that.error_dialog = $('<div/>', {
- id: 'error_dialog'
- });
-
that.layout = $.bbq.getState('layout');
that.layouts_dir = 'layouts';
@@ -356,6 +352,25 @@ IPA.cmd = function (name, args, options, win_callback, fail_callback, objname, c
function dialog_open(xhr, text_status, error_thrown) {
var that = this;
+ IPA.error_dialog = $('<div/>', {
+ id: 'error_dialog'
+ });
+
+ if (error_thrown.url) {
+ $('<p/>', {
+ text: 'URL: '+error_thrown.url
+ }).appendTo(IPA.error_dialog);
+ }
+ $('<p/>', {
+ html: error_thrown.message
+ }).appendTo(IPA.error_dialog);
+
+ function close() {
+ IPA.error_dialog.dialog('destroy');
+ IPA.error_dialog.remove();
+ IPA.error_dialog = null;
+ }
+
var buttons = {};
/**
@@ -365,14 +380,14 @@ IPA.cmd = function (name, args, options, win_callback, fail_callback, objname, c
*/
var label = IPA.messages.buttons ? IPA.messages.buttons.retry : 'Retry';
buttons[label] = function() {
- IPA.error_dialog.dialog('close');
+ close();
IPA.cmd(name, args, options, win_callback, fail_callback,
objname, command_name);
};
label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel';
buttons[label] = function() {
- IPA.error_dialog.dialog('close');
+ close();
if (fail_callback) {
fail_callback.call(that, xhr, text_status, error_thrown);
}
@@ -382,17 +397,13 @@ IPA.cmd = function (name, args, options, win_callback, fail_callback, objname, c
modal: true,
title: error_thrown.title,
width: 400,
- buttons: buttons
+ buttons: buttons,
+ close: function() {
+ close();
+ }
});
}
- function ajax_error_handler(xhr, text_status, error_thrown) {
- IPA.error_dialog.empty();
- IPA.error_dialog.append('<p>'+error_thrown.message+'</p>');
-
- dialog_open.call(this, xhr, text_status, error_thrown);
- }
-
function error_handler(xhr, text_status, error_thrown) {
hide_activity_icon();
if (!error_thrown) {
@@ -419,14 +430,6 @@ IPA.cmd = function (name, args, options, win_callback, fail_callback, objname, c
if (!error_thrown.title) {
error_thrown.title = 'AJAX Error: '+error_thrown.name;
}
- ajax_error_handler.call(this, xhr, text_status, error_thrown);
- }
-
- function http_error_handler(xhr, text_status, error_thrown) {
- IPA.error_dialog.empty();
- IPA.error_dialog.append('<p>URL: '+this.url+'</p>');
- IPA.error_dialog.append('<p>'+error_thrown.message+'</p>');
-
dialog_open.call(this, xhr, text_status, error_thrown);
}
@@ -435,9 +438,10 @@ IPA.cmd = function (name, args, options, win_callback, fail_callback, objname, c
if (!data) {
var error_thrown = {
title: 'HTTP Error '+xhr.status,
+ url: this.url,
message: data ? xhr.statusText : "No response"
};
- http_error_handler.call(this, xhr, text_status, error_thrown);
+ dialog_open.call(this, xhr, text_status, error_thrown);
} else if (data.error) {
error_handler.call(this, xhr, text_status, /* error_thrown */ {
diff --git a/install/ui/test/ipa_tests.js b/install/ui/test/ipa_tests.js
index 41163df..9385a39 100644
--- a/install/ui/test/ipa_tests.js
+++ b/install/ui/test/ipa_tests.js
@@ -155,10 +155,8 @@ test("Testing successful IPA.cmd().", function() {
"Checking ajax invocation counter"
);
- var dialog = IPA.error_dialog.parent('.ui-dialog');
-
ok(
- !dialog.length,
+ !IPA.error_dialog,
"The dialog box is not created."
);
@@ -284,7 +282,7 @@ test("Testing unsuccessful IPA.cmd().", function() {
);
ok(
- !IPA.error_dialog.dialog('isOpen'),
+ !IPA.error_dialog,
"After cancel, the dialog box is closed."
);