Bug 1330631 - Convert the EventSourceImpl::Message to be UniquePtr. r=baku

MozReview-Commit-ID: 3cNFiBYJZa6
This commit is contained in:
Stone Shih 2017-01-17 14:25:44 +08:00
parent fe2150fcef
commit 8ffcff7389

View File

@ -129,7 +129,7 @@ public:
uint32_t* aWriteCount);
void ParseSegment(const char* aBuffer, uint32_t aLength);
nsresult SetFieldAndClear();
nsresult ClearFields();
void ClearFields();
nsresult ResetEvent();
nsresult DispatchCurrentMessageEvent();
nsresult ParseCharacter(char16_t aChr);
@ -268,7 +268,7 @@ public:
// Message related data members. May be set / initialized when initializing
// EventSourceImpl on target thread but should only be used on target thread.
nsString mLastEventID;
Message mCurrentMessage;
UniquePtr<Message> mCurrentMessage;
nsDeque mMessagesToDispatch;
ParserStatus mStatus;
nsCOMPtr<nsIUnicodeDecoder> mUnicodeDecoder;
@ -1401,12 +1401,10 @@ nsresult
EventSourceImpl::DispatchCurrentMessageEvent()
{
AssertIsOnTargetThread();
nsAutoPtr<Message> message(new Message());
*message = mCurrentMessage;
UniquePtr<Message> message(Move(mCurrentMessage));
ClearFields();
if (message->mData.IsEmpty()) {
if (!message || message->mData.IsEmpty()) {
return NS_OK;
}
@ -1424,7 +1422,7 @@ EventSourceImpl::DispatchCurrentMessageEvent()
}
size_t sizeBefore = mMessagesToDispatch.GetSize();
mMessagesToDispatch.Push(message.forget());
mMessagesToDispatch.Push(message.release());
NS_ENSURE_TRUE(mMessagesToDispatch.GetSize() == sizeBefore + 1,
NS_ERROR_OUT_OF_MEMORY);
@ -1471,9 +1469,7 @@ EventSourceImpl::DispatchAllMessageEvents()
JSContext* cx = jsapi.cx();
while (mMessagesToDispatch.GetSize() > 0) {
nsAutoPtr<Message>
message(static_cast<Message*>(mMessagesToDispatch.PopFront()));
UniquePtr<Message> message(static_cast<Message*>(mMessagesToDispatch.PopFront()));
// Now we can turn our string into a jsval
JS::Rooted<JS::Value> jsData(cx);
{
@ -1511,19 +1507,13 @@ EventSourceImpl::DispatchAllMessageEvents()
}
}
nsresult
void
EventSourceImpl::ClearFields()
{
AssertIsOnTargetThread();
// mLastEventID and mReconnectionTime must be cached
mCurrentMessage.mEventName.Truncate();
mCurrentMessage.mLastEventID.Truncate();
mCurrentMessage.mData.Truncate();
mCurrentMessage = nullptr;
mLastFieldName.Truncate();
mLastFieldValue.Truncate();
return NS_OK;
}
nsresult
@ -1534,7 +1524,9 @@ EventSourceImpl::SetFieldAndClear()
mLastFieldValue.Truncate();
return NS_OK;
}
if (!mCurrentMessage) {
mCurrentMessage = MakeUnique<Message>();
}
char16_t first_char;
first_char = mLastFieldName.CharAt(0);
@ -1545,20 +1537,20 @@ EventSourceImpl::SetFieldAndClear()
// If the field name is "data" append the field value to the data
// buffer, then append a single U+000A LINE FEED (LF) character
// to the data buffer.
mCurrentMessage.mData.Append(mLastFieldValue);
mCurrentMessage.mData.Append(LF_CHAR);
mCurrentMessage->mData.Append(mLastFieldValue);
mCurrentMessage->mData.Append(LF_CHAR);
}
break;
case char16_t('e'):
if (mLastFieldName.EqualsLiteral("event")) {
mCurrentMessage.mEventName.Assign(mLastFieldValue);
mCurrentMessage->mEventName.Assign(mLastFieldValue);
}
break;
case char16_t('i'):
if (mLastFieldName.EqualsLiteral("id")) {
mCurrentMessage.mLastEventID.Assign(mLastFieldValue);
mCurrentMessage->mLastEventID.Assign(mLastFieldValue);
}
break;