| Index: third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.h
|
| diff --git a/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.h b/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.h
|
| index b85a594140a60c00034368247a0e33aa8e79c3a2..1e8771ed702db19d0ec6175654160f09b700af70 100644
|
| --- a/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.h
|
| +++ b/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.h
|
| @@ -34,18 +34,16 @@ public:
|
| // Callable only when not locked.
|
| PassRefPtr<BlobDataHandle> drainAsBlobDataHandle(FetchDataConsumerHandle::Reader::BlobSizePolicy);
|
| PassRefPtr<EncodedFormData> drainAsFormData();
|
| + void startLoading(ExecutionContext*, FetchDataLoader*, FetchDataLoader::Client* /* client */);
|
|
|
| // Callable only when not locked. Returns a non-null handle.
|
| - // Note: There is a case that calling |lock| doesn't make the buffer
|
| - // locked. |unlock| should be called even in such cases when a user finishes
|
| - // to use the returned handle, in order to maintain hasPendingActivity().
|
| - PassOwnPtr<FetchDataConsumerHandle> lock(ExecutionContext*);
|
| -
|
| - // This function will lock |this| object. |client| cannot be null.
|
| - void startLoading(ExecutionContext*, FetchDataLoader*, FetchDataLoader::Client* /* client */);
|
| + // There is no means to "return" the handle to the body buffer: Calling
|
| + // this function locks, disturbs and closes the stream and no one will
|
| + // not be able to get any information from the stream and this buffer after
|
| + // that.
|
| + PassOwnPtr<FetchDataConsumerHandle> releaseHandle(ExecutionContext*);
|
|
|
| - bool isLocked() const { return m_stream->isLocked(); }
|
| - bool hasPendingActivity() const { return isLocked() || m_lockLevel > 0; }
|
| + bool hasPendingActivity() const;
|
|
|
| // UnderlyingSource
|
| void pullSource() override;
|
| @@ -57,32 +55,23 @@ public:
|
| DEFINE_INLINE_TRACE()
|
| {
|
| visitor->trace(m_stream);
|
| - visitor->trace(m_streamReader);
|
| - visitor->trace(m_loaders);
|
| + visitor->trace(m_loader);
|
| UnderlyingSource::trace(visitor);
|
| }
|
|
|
| private:
|
| - class LoaderHolder;
|
| - enum EndLoadingMode {
|
| - EndLoadingDone,
|
| - EndLoadingErrored,
|
| - };
|
| + class LoaderClient;
|
| void close();
|
| void error();
|
| void processData();
|
| - void unlock();
|
| - void endLoading(FetchDataLoader::Client*, EndLoadingMode);
|
| + void endLoading();
|
| + void stopLoading();
|
|
|
| OwnPtr<FetchDataConsumerHandle> m_handle;
|
| OwnPtr<FetchDataConsumerHandle::Reader> m_reader;
|
| Member<ReadableByteStream> m_stream;
|
| - Member<ReadableByteStreamReader> m_streamReader;
|
| - HeapHashSet<Member<FetchDataLoader::Client>> m_loaders;
|
| - // We need this variable because we cannot lock closed or erroed stream
|
| - // although we should return true for hasPendingActivity() when someone
|
| - // calls |startLoading| but the loding is not yet done.
|
| - unsigned m_lockLevel;
|
| + // We need this member to keep it alive while loading.
|
| + Member<FetchDataLoader> m_loader;
|
| bool m_streamNeedsMore;
|
| };
|
|
|
|
|