mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-10 01:08:21 +00:00
Bug 1249739 - Improve performance in XHR in workers - part 1 - XHR.responseText must be cached, r=smaug
This commit is contained in:
parent
15dca34ea9
commit
c9c3bfe617
@ -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]
|
||||
|
@ -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::
|
||||
|
@ -573,6 +573,8 @@ protected:
|
||||
already_AddRefed<nsIHttpChannel> GetCurrentHttpChannel();
|
||||
already_AddRefed<nsIJARChannel> GetCurrentJARChannel();
|
||||
|
||||
void TruncateResponseText();
|
||||
|
||||
bool IsSystemXHR() const;
|
||||
bool InUploadPhase() const;
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user