Index: Source/modules/serviceworkers/Cache.cpp |
diff --git a/Source/modules/serviceworkers/Cache.cpp b/Source/modules/serviceworkers/Cache.cpp |
index 4865a28ab56332a18b65b72754e9b9a593ae1261..475187ec91e345a82409fc4b0f16ead1090c44d2 100644 |
--- a/Source/modules/serviceworkers/Cache.cpp |
+++ b/Source/modules/serviceworkers/Cache.cpp |
@@ -303,13 +303,22 @@ ScriptPromise Cache::deleteImpl(ScriptState* scriptState, const Request* request |
return promise; |
} |
-ScriptPromise Cache::putImpl(ScriptState* scriptState, const Request* request, Response* response) |
+ScriptPromise Cache::putImpl(ScriptState* scriptState, Request* request, Response* response) |
{ |
KURL url(KURL(), request->url()); |
if (!url.protocolIsInHTTPFamily()) |
return ScriptPromise::reject(scriptState, V8ThrowException::createTypeError(scriptState->isolate(), "Request scheme '" + url.protocol() + "' is unsupported")); |
if (request->method() != "GET") |
return ScriptPromise::reject(scriptState, V8ThrowException::createTypeError(scriptState->isolate(), "Request method '" + request->method() + "' is unsupported")); |
+ if (request->hasBody() && request->bodyUsed()) |
+ return ScriptPromise::reject(scriptState, V8ThrowException::createTypeError(scriptState->isolate(), "Request body is already used")); |
+ if (response->hasBody() && response->bodyUsed()) |
+ return ScriptPromise::reject(scriptState, V8ThrowException::createTypeError(scriptState->isolate(), "Response body is already used")); |
+ |
+ if (request->hasBody()) |
+ request->setBodyUsed(); |
+ if (response->hasBody()) |
+ response->setBodyUsed(); |
WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(1)); |
batchOperations[0].operationType = WebServiceWorkerCache::OperationTypePut; |