From 154ed91457a258013a2f15cbbbf5adc36cf0e20a Mon Sep 17 00:00:00 2001 From: "Endi S. Dewata" Date: Sat, 5 Mar 2011 00:21:49 -0600 Subject: Fixed memory leak caused by IPA.error_dialog. Ticket 1054 --- install/ui/ipa.js | 50 ++++++++++++++++++++++++-------------------- install/ui/test/ipa_tests.js | 6 ++---- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/install/ui/ipa.js b/install/ui/ipa.js index cbe009b9..732923b6 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 = $('
', { - 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 = $('
', { + id: 'error_dialog' + }); + + if (error_thrown.url) { + $('

', { + text: 'URL: '+error_thrown.url + }).appendTo(IPA.error_dialog); + } + $('

', { + 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('

'+error_thrown.message+'

'); - - 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('

URL: '+this.url+'

'); - IPA.error_dialog.append('

'+error_thrown.message+'

'); - 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 41163df1..9385a391 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." ); -- cgit