Bug 1405506: Flush buffered data when disconnecting suspended channel. r?mixedpuppy
MozReview-Commit-ID: F9rIhQHr8i
--- a/toolkit/components/extensions/webrequest/StreamFilterChild.cpp
+++ b/toolkit/components/extensions/webrequest/StreamFilterChild.cpp
@@ -129,16 +129,17 @@ StreamFilterChild::Disconnect(ErrorResul
{
switch (mState) {
case State::Suspended:
case State::TransferringData:
case State::FinishedTransferringData:
mState = State::Disconnecting;
mNextState = State::Disconnected;
+ WriteBufferedData();
SendDisconnect();
break;
case State::Suspending:
case State::Resuming:
switch (mNextState) {
case State::Suspended:
case State::Resuming:
@@ -472,16 +473,26 @@ StreamFilterChild::FlushBufferedData()
{
while (!mBufferedData.isEmpty() && CanFlushData()) {
UniquePtr<BufferedData> data(mBufferedData.popFirst());
EmitData(data->mData);
}
}
+void
+StreamFilterChild::WriteBufferedData()
+{
+ while (!mBufferedData.isEmpty()) {
+ UniquePtr<BufferedData> data(mBufferedData.popFirst());
+
+ SendWrite(data->mData);
+ }
+}
+
IPCResult
StreamFilterChild::RecvData(Data&& aData)
{
MOZ_ASSERT(!mReceivedOnStop);
if (mStreamFilter) {
Unused << mStreamFilter->CheckAlive();
}
--- a/toolkit/components/extensions/webrequest/StreamFilterChild.h
+++ b/toolkit/components/extensions/webrequest/StreamFilterChild.h
@@ -125,16 +125,17 @@ private:
bool
CanFlushData()
{
return (mState == State::TransferringData ||
mState == State::Resuming);
}
void FlushBufferedData();
+ void WriteBufferedData();
virtual void ActorDestroy(ActorDestroyReason aWhy) override;
State mState;
State mNextState;
bool mReceivedOnStop;