mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 1330631 - Convert the EventSourceImpl::Message to be UniquePtr. r=baku
MozReview-Commit-ID: 3cNFiBYJZa6
This commit is contained in:
parent
fe2150fcef
commit
8ffcff7389
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user