From 85080fe2c2e603fea1d81545347995941f82ecb7 Mon Sep 17 00:00:00 2001 From: "Olli.Pettay%helsinki.fi" Date: Fri, 15 Jun 2007 18:53:42 +0000 Subject: [PATCH] Bug 383837, Crash [@ nsXULTooltipListener::LaunchTooltip], r=enn, sr=neil git-svn-id: svn://10.0.0.236/trunk@228132 18797224-902f-48f8-a5cc-f745e15eee43 --- .../xul/base/src/nsXULTooltipListener.cpp | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/mozilla/layout/xul/base/src/nsXULTooltipListener.cpp b/mozilla/layout/xul/base/src/nsXULTooltipListener.cpp index b553012de8e..411525e2477 100644 --- a/mozilla/layout/xul/base/src/nsXULTooltipListener.cpp +++ b/mozilla/layout/xul/base/src/nsXULTooltipListener.cpp @@ -474,11 +474,12 @@ SetTitletipLabel(nsITreeBoxObject* aTreeBox, nsIContent* aTooltip, { nsCOMPtr view; aTreeBox->GetView(getter_AddRefs(view)); - - nsAutoString label; - view->GetCellText(aRow, aCol, label); - - aTooltip->SetAttr(nsnull, nsGkAtoms::label, label, PR_TRUE); + if (view) { + nsAutoString label; + nsresult rv = view->GetCellText(aRow, aCol, label); + NS_WARN_IF_FALSE(NS_SUCCEEDED(rv), "Couldn't get the cell text!"); + aTooltip->SetAttr(kNameSpaceID_None, nsGkAtoms::label, label, PR_TRUE); + } } #endif @@ -510,9 +511,20 @@ nsXULTooltipListener::LaunchTooltip() #endif SetTitletipLabel(obx, mCurrentTooltip, mLastTreeRow, mLastTreeCol); - mCurrentTooltip->SetAttr(nsnull, nsGkAtoms::titletip, NS_LITERAL_STRING("true"), PR_TRUE); - } else - mCurrentTooltip->UnsetAttr(nsnull, nsGkAtoms::titletip, PR_TRUE); + if (!mCurrentTooltip) { + // Because of mutation events, mCurrentTooltip can be null. + return; + } + mCurrentTooltip->SetAttr(kNameSpaceID_None, nsGkAtoms::titletip, + NS_LITERAL_STRING("true"), PR_TRUE); + } else { + mCurrentTooltip->UnsetAttr(kNameSpaceID_None, nsGkAtoms::titletip, + PR_TRUE); + } + if (!mCurrentTooltip) { + // Because of mutation events, mCurrentTooltip can be null. + return; + } #endif nsCOMPtr targetEl(do_QueryInterface(mSourceNode)); @@ -739,15 +751,17 @@ nsXULTooltipListener::CreateAutoHideTimer() void nsXULTooltipListener::sTooltipCallback(nsITimer *aTimer, void *aListener) { - if (mInstance) - mInstance->ShowTooltip(); + nsRefPtr instance = mInstance; + if (instance) + instance->ShowTooltip(); } void nsXULTooltipListener::sAutoHideCallback(nsITimer *aTimer, void* aListener) { - if (mInstance) - mInstance->HideTooltip(); + nsRefPtr instance = mInstance; + if (instance) + instance->HideTooltip(); } #ifdef MOZ_XUL