Bug 1249739 - Improve performance in XHR in workers - part 1 - XHR.responseText must be cached, r=smaug

This commit is contained in:
Andrea Marchesini 2016-09-12 09:05:42 +02:00
parent 15dca34ea9
commit c9c3bfe617
4 changed files with 18 additions and 5 deletions

View File

@ -130,7 +130,7 @@ interface XMLHttpRequest : XMLHttpRequestEventTarget {
attribute XMLHttpRequestResponseType responseType;
[Throws]
readonly attribute any response;
[Throws]
[Cached, Pure, Throws]
readonly attribute DOMString? responseText;
[Throws, Exposed=Window]

View File

@ -288,7 +288,7 @@ XMLHttpRequestMainThread::ResetResponse()
{
mResponseXML = nullptr;
mResponseBody.Truncate();
mResponseText.Truncate();
TruncateResponseText();
mResponseBlob = nullptr;
mDOMBlob = nullptr;
mBlobSet = nullptr;
@ -564,6 +564,7 @@ XMLHttpRequestMainThread::AppendToResponseText(const char * aSrcBuffer,
}
mResponseText.SetLength(totalChars.value());
XMLHttpRequestBinding::ClearCachedResponseTextValue(this);
return NS_OK;
}
@ -823,7 +824,7 @@ XMLHttpRequestMainThread::GetResponse(JSContext* aCx,
if (mResultJSON.isUndefined()) {
aRv = CreateResponseParsedJSON(aCx);
mResponseText.Truncate();
TruncateResponseText();
if (aRv.Failed()) {
// Per spec, errors aren't propagated. null is returned instead.
aRv = NS_OK;
@ -1332,7 +1333,7 @@ XMLHttpRequestMainThread::DispatchProgressEvent(DOMEventTargetHelper* aTarget,
if (mResponseType == XMLHttpRequestResponseType::Moz_chunked_text ||
mResponseType == XMLHttpRequestResponseType::Moz_chunked_arraybuffer) {
mResponseBody.Truncate();
mResponseText.Truncate();
TruncateResponseText();
mResultArrayBuffer = nullptr;
mArrayBufferBuilder.reset();
}
@ -2145,7 +2146,7 @@ XMLHttpRequestMainThread::MatchCharsetAndDecoderToResponseDocument()
{
if (mResponseXML && mResponseCharset != mResponseXML->GetDocumentCharacterSet()) {
mResponseCharset = mResponseXML->GetDocumentCharacterSet();
mResponseText.Truncate();
TruncateResponseText();
mResponseBodyDecodedPos = 0;
mDecoder = EncodingUtils::DecoderForEncoding(mResponseCharset);
}
@ -3537,6 +3538,13 @@ XMLHttpRequestMainThread::ShouldBlockAuthPrompt()
return false;
}
void
XMLHttpRequestMainThread::TruncateResponseText()
{
mResponseText.Truncate();
XMLHttpRequestBinding::ClearCachedResponseTextValue(this);
}
NS_IMPL_ISUPPORTS(XMLHttpRequestMainThread::nsHeaderVisitor, nsIHttpHeaderVisitor)
NS_IMETHODIMP XMLHttpRequestMainThread::

View File

@ -573,6 +573,8 @@ protected:
already_AddRefed<nsIHttpChannel> GetCurrentHttpChannel();
already_AddRefed<nsIJARChannel> GetCurrentJARChannel();
void TruncateResponseText();
bool IsSystemXHR() const;
bool InUploadPhase() const;

View File

@ -1261,6 +1261,7 @@ EventRunnable::WorkerRun(JSContext* aCx, WorkerPrivate* aWorkerPrivate)
JS::Rooted<UniquePtr<XMLHttpRequestWorker::StateData>> state(aCx, new XMLHttpRequestWorker::StateData());
state->mResponseTextResult = mResponseTextResult;
state->mResponseText = mResponseText;
if (NS_SUCCEEDED(mResponseTextResult)) {
@ -2432,6 +2433,8 @@ XMLHttpRequestWorker::UpdateState(const StateData& aStateData,
else {
mStateData = aStateData;
}
XMLHttpRequestBinding::ClearCachedResponseTextValue(this);
}
} // dom namespace