bug 582644 test fix followup; r= blocking-fennec=2.0a1+

--HG--
extra : rebase_source : c83b18c96bda0a979455bc785612202f1b5af381
This commit is contained in:
Doug Turner 2010-08-16 21:45:12 -07:00
parent e63a0e70a7
commit 5c10b41876
3 changed files with 16 additions and 25 deletions

View File

@ -54,6 +54,7 @@
#include "mozilla/ipc/DocumentRendererChild.h"
#include "mozilla/ipc/DocumentRendererShmemChild.h"
#include "mozilla/ipc/DocumentRendererNativeIDChild.h"
#include "mozilla/widget/nsGUIEventIPC.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsPIDOMWindow.h"
#include "nsIDOMWindowUtils.h"
@ -735,6 +736,7 @@ TabChild::RecvTextEvent(const nsTextEvent& event)
{
nsTextEvent localEvent(event);
DispatchWidgetEvent(localEvent);
IPC::ParamTraits<nsTextEvent>::Free(event);
return true;
}

View File

@ -1054,36 +1054,14 @@ private:
friend class mozilla::dom::PBrowserChild;
nsTextEvent()
: mOwnRangeArray(PR_FALSE), rangeArray(nsnull)
{
}
PRPackedBool mOwnRangeArray;
public:
~nsTextEvent()
{
if (mOwnRangeArray && rangeArray)
delete [] rangeArray;
}
nsTextRangeArray AllocRangeArray(PRUint32 aCount)
{
NS_ASSERTION(!rangeArray, "rangeArray already allocated");
mOwnRangeArray = PR_TRUE;
rangeCount = aCount;
rangeArray = new nsTextRange[aCount];
return rangeArray;
}
#endif // MOZ_IPC
public:
nsTextEvent(PRBool isTrusted, PRUint32 msg, nsIWidget *w)
: nsInputEvent(isTrusted, msg, w, NS_TEXT_EVENT),
rangeCount(0), rangeArray(nsnull), isChar(PR_FALSE)
#ifdef MOZ_IPC
, mOwnRangeArray(PR_FALSE)
#endif
{
}

View File

@ -179,17 +179,28 @@ struct ParamTraits<nsTextEvent>
!ReadParam(aMsg, aIter, &aResult->rangeCount))
return false;
if (!aResult->rangeCount)
if (!aResult->rangeCount) {
aResult->rangeArray = nsnull;
return true;
}
if (!aResult->AllocRangeArray(aResult->rangeCount))
aResult->rangeArray = new nsTextRange[aResult->rangeCount];
if (!aResult->rangeArray)
return false;
for (PRUint32 index = 0; index < aResult->rangeCount; index++)
if (!ReadParam(aMsg, aIter, &aResult->rangeArray[index]))
if (!ReadParam(aMsg, aIter, &aResult->rangeArray[index])) {
Free(*aResult);
return false;
}
return true;
}
static void Free(const paramType& aResult)
{
if (aResult.rangeArray)
delete [] aResult.rangeArray;
}
};
template<>