Index: Source/modules/serviceworkers/Body.cpp |
diff --git a/Source/modules/serviceworkers/FetchBodyStream.cpp b/Source/modules/serviceworkers/Body.cpp |
similarity index 65% |
rename from Source/modules/serviceworkers/FetchBodyStream.cpp |
rename to Source/modules/serviceworkers/Body.cpp |
index d33b2c7c87407639db73ec241f4c87a2d9db22c5..cd4088d1de1a9be07a2afe53363835d8d833a604 100644 |
--- a/Source/modules/serviceworkers/FetchBodyStream.cpp |
+++ b/Source/modules/serviceworkers/Body.cpp |
@@ -3,34 +3,23 @@ |
// found in the LICENSE file. |
#include "config.h" |
-#include "modules/serviceworkers/FetchBodyStream.h" |
+#include "modules/serviceworkers/Body.h" |
#include "bindings/core/v8/ScriptPromiseResolver.h" |
#include "bindings/core/v8/ScriptState.h" |
#include "bindings/core/v8/V8ThrowException.h" |
-#include "core/dom/ExceptionCode.h" |
#include "core/fileapi/Blob.h" |
#include "core/fileapi/FileReaderLoader.h" |
#include "core/fileapi/FileReaderLoaderClient.h" |
-#include "modules/serviceworkers/ResponseInit.h" |
-#include "platform/NotImplemented.h" |
-#include "public/platform/WebServiceWorkerResponse.h" |
namespace blink { |
-FetchBodyStream* FetchBodyStream::create(ExecutionContext* context, PassRefPtr<BlobDataHandle> blobDataHandle) |
+ScriptPromise Body::readAsync(ScriptState* scriptState, ResponseType type) |
{ |
- FetchBodyStream* fetchBodyStream = new FetchBodyStream(context, blobDataHandle); |
- fetchBodyStream->suspendIfNeeded(); |
- return fetchBodyStream; |
-} |
- |
-ScriptPromise FetchBodyStream::readAsync(ScriptState* scriptState, ResponseType type) |
-{ |
- if (m_hasRead) |
+ if (m_bodyUsed) |
return ScriptPromise::reject(scriptState, V8ThrowException::createTypeError("Already read", scriptState->isolate())); |
- m_hasRead = true; |
+ m_bodyUsed = true; |
m_responseType = type; |
ASSERT(!m_resolver); |
@@ -38,21 +27,27 @@ ScriptPromise FetchBodyStream::readAsync(ScriptState* scriptState, ResponseType |
ScriptPromise promise = m_resolver->promise(); |
FileReaderLoader::ReadType readType = FileReaderLoader::ReadAsText; |
- |
+ RefPtr<BlobDataHandle> blobHandle = blobDataHandle(); |
+ if (!blobHandle.get()) { |
+ blobHandle = BlobDataHandle::create(BlobData::create(), 0); |
+ } |
switch (type) { |
case ResponseAsArrayBuffer: |
readType = FileReaderLoader::ReadAsArrayBuffer; |
break; |
case ResponseAsBlob: |
- if (m_blobDataHandle->size() != kuint64max) { |
- // If the size of |m_blobDataHandle| is set correctly, creates Blob from it. |
- m_resolver->resolve(Blob::create(m_blobDataHandle)); |
+ if (blobHandle->size() != kuint64max) { |
+ // If the size of |blobHandle| is set correctly, creates Blob from |
+ // it. |
+ m_resolver->resolve(Blob::create(blobHandle)); |
m_resolver.clear(); |
return promise; |
} |
- // If the size is not set, read as ArrayBuffer and create a new blob to get the size. |
+ // If the size is not set, read as ArrayBuffer and create a new blob to |
+ // get the size. |
// FIXME: This workaround is not good for performance. |
- // When we will stop using Blob as a base system of FetchBodyStream to support stream, this problem should be solved. |
+ // When we will stop using Blob as a base system of Body to support |
+ // stream, this problem should be solved. |
readType = FileReaderLoader::ReadAsArrayBuffer; |
break; |
case ResponseAsFormData: |
@@ -67,59 +62,60 @@ ScriptPromise FetchBodyStream::readAsync(ScriptState* scriptState, ResponseType |
} |
m_loader = adoptPtr(new FileReaderLoader(readType, this)); |
- m_loader->start(scriptState->executionContext(), m_blobDataHandle); |
+ m_loader->start(scriptState->executionContext(), blobHandle); |
return promise; |
} |
-ScriptPromise FetchBodyStream::asArrayBuffer(ScriptState* scriptState) |
+ScriptPromise Body::arrayBuffer(ScriptState* scriptState) |
{ |
return readAsync(scriptState, ResponseAsArrayBuffer); |
} |
-ScriptPromise FetchBodyStream::asBlob(ScriptState* scriptState) |
+ScriptPromise Body::blob(ScriptState* scriptState) |
{ |
return readAsync(scriptState, ResponseAsBlob); |
} |
-ScriptPromise FetchBodyStream::asFormData(ScriptState* scriptState) |
+ScriptPromise Body::formData(ScriptState* scriptState) |
{ |
return readAsync(scriptState, ResponseAsFormData); |
} |
-ScriptPromise FetchBodyStream::asJSON(ScriptState* scriptState) |
+ScriptPromise Body::json(ScriptState* scriptState) |
{ |
return readAsync(scriptState, ResponseAsJSON); |
} |
-ScriptPromise FetchBodyStream::asText(ScriptState* scriptState) |
+ScriptPromise Body::text(ScriptState* scriptState) |
{ |
return readAsync(scriptState, ResponseAsText); |
} |
-void FetchBodyStream::stop() |
+bool Body::bodyUsed() const |
+{ |
+ return m_bodyUsed; |
+} |
+ |
+void Body::stop() |
{ |
// Canceling the load will call didFail which will remove the resolver. |
if (m_resolver) |
m_loader->cancel(); |
} |
-bool FetchBodyStream::hasPendingActivity() const |
+bool Body::hasPendingActivity() const |
{ |
return m_resolver; |
} |
-FetchBodyStream::FetchBodyStream(ExecutionContext* context, PassRefPtr<BlobDataHandle> blobDataHandle) |
+Body::Body(ExecutionContext* context) |
: ActiveDOMObject(context) |
- , m_blobDataHandle(blobDataHandle) |
- , m_hasRead(false) |
+ , m_bodyUsed(false) |
{ |
- if (!m_blobDataHandle) { |
- m_blobDataHandle = BlobDataHandle::create(BlobData::create(), 0); |
- } |
} |
-void FetchBodyStream::resolveJSON() |
+void Body::resolveJSON() |
{ |
ASSERT(m_responseType == ResponseAsJSON); |
ScriptState::Scope scope(m_resolver->scriptState()); |
@@ -138,9 +134,9 @@ void FetchBodyStream::resolveJSON() |
} |
// FileReaderLoaderClient functions. |
-void FetchBodyStream::didStartLoading() { } |
-void FetchBodyStream::didReceiveData() { } |
-void FetchBodyStream::didFinishLoading() |
+void Body::didStartLoading() { } |
+void Body::didReceiveData() { } |
+void Body::didFinishLoading() |
{ |
if (!m_resolver->executionContext() || m_resolver->executionContext()->activeDOMObjectsAreStopped()) |
return; |
@@ -150,7 +146,7 @@ void FetchBodyStream::didFinishLoading() |
m_resolver->resolve(m_loader->arrayBufferResult()); |
break; |
case ResponseAsBlob: { |
- ASSERT(m_blobDataHandle->size() == kuint64max); |
+ ASSERT(blobDataHandle()->size() == kuint64max); |
OwnPtr<BlobData> blobData = BlobData::create(); |
RefPtr<ArrayBuffer> buffer = m_loader->arrayBufferResult(); |
blobData->appendArrayBuffer(buffer.get()); |
@@ -173,7 +169,7 @@ void FetchBodyStream::didFinishLoading() |
m_resolver.clear(); |
} |
-void FetchBodyStream::didFail(FileError::ErrorCode code) |
+void Body::didFail(FileError::ErrorCode code) |
{ |
ASSERT(m_resolver); |
if (!m_resolver->executionContext() || m_resolver->executionContext()->activeDOMObjectsAreStopped()) |