Index: Source/modules/serviceworkers/Response.cpp |
diff --git a/Source/modules/serviceworkers/Response.cpp b/Source/modules/serviceworkers/Response.cpp |
deleted file mode 100644 |
index b72910c46431a10a23d35f9c08e51331e6f8af72..0000000000000000000000000000000000000000 |
--- a/Source/modules/serviceworkers/Response.cpp |
+++ /dev/null |
@@ -1,316 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "config.h" |
-#include "Response.h" |
- |
-#include "bindings/core/v8/Dictionary.h" |
-#include "bindings/core/v8/ExceptionState.h" |
-#include "core/dom/DOMArrayBuffer.h" |
-#include "core/dom/DOMArrayBufferView.h" |
-#include "core/fileapi/Blob.h" |
-#include "modules/serviceworkers/ResponseInit.h" |
-#include "public/platform/WebServiceWorkerResponse.h" |
-#include "wtf/RefPtr.h" |
- |
-namespace blink { |
- |
-namespace { |
- |
-FetchResponseData* createFetchResponseDataFromWebResponse(const WebServiceWorkerResponse& webResponse) |
-{ |
- FetchResponseData* response = 0; |
- if (200 <= webResponse.status() && webResponse.status() < 300) |
- response = FetchResponseData::create(); |
- else |
- response = FetchResponseData::createNetworkErrorResponse(); |
- |
- response->setURL(webResponse.url()); |
- response->setStatus(webResponse.status()); |
- response->setStatusMessage(webResponse.statusText()); |
- |
- for (HTTPHeaderMap::const_iterator i = webResponse.headers().begin(), end = webResponse.headers().end(); i != end; ++i) { |
- response->headerList()->append(i->key, i->value); |
- } |
- |
- response->setBlobDataHandle(webResponse.blobDataHandle()); |
- |
- // Filter the response according to |webResponse|'s ResponseType. |
- switch (webResponse.responseType()) { |
- case WebServiceWorkerResponseTypeBasic: |
- response = response->createBasicFilteredResponse(); |
- break; |
- case WebServiceWorkerResponseTypeCORS: |
- response = response->createCORSFilteredResponse(); |
- break; |
- case WebServiceWorkerResponseTypeOpaque: |
- response = response->createOpaqueFilteredResponse(); |
- break; |
- case WebServiceWorkerResponseTypeDefault: |
- break; |
- case WebServiceWorkerResponseTypeError: |
- ASSERT(response->type() == FetchResponseData::ErrorType); |
- break; |
- } |
- |
- return response; |
-} |
- |
-} |
- |
-Response* Response::create(ExecutionContext* context, ExceptionState& exceptionState) |
-{ |
- return create(context, nullptr, ResponseInit(), exceptionState); |
-} |
- |
-Response* Response::create(ExecutionContext* context, const BodyInit& body, const Dictionary& responseInit, ExceptionState& exceptionState) |
-{ |
- ASSERT(!body.isNull()); |
- if (body.isBlob()) |
- return create(context, body.getAsBlob(), ResponseInit(responseInit, exceptionState), exceptionState); |
- if (body.isUSVString()) { |
- OwnPtr<BlobData> blobData = BlobData::create(); |
- blobData->appendText(body.getAsUSVString(), false); |
- // "Set |Content-Type| to `text/plain;charset=UTF-8`." |
- blobData->setContentType("text/plain;charset=UTF-8"); |
- const long long length = blobData->length(); |
- Blob* blob = Blob::create(BlobDataHandle::create(blobData.release(), length)); |
- return create(context, blob, ResponseInit(responseInit, exceptionState), exceptionState); |
- } |
- if (body.isArrayBuffer()) { |
- RefPtr<DOMArrayBuffer> arrayBuffer = body.getAsArrayBuffer(); |
- OwnPtr<BlobData> blobData = BlobData::create(); |
- blobData->appendBytes(arrayBuffer->data(), arrayBuffer->byteLength()); |
- const long long length = blobData->length(); |
- Blob* blob = Blob::create(BlobDataHandle::create(blobData.release(), length)); |
- return create(context, blob, ResponseInit(responseInit, exceptionState), exceptionState); |
- } |
- if (body.isArrayBufferView()) { |
- RefPtr<DOMArrayBufferView> arrayBufferView = body.getAsArrayBufferView(); |
- OwnPtr<BlobData> blobData = BlobData::create(); |
- blobData->appendBytes(arrayBufferView->baseAddress(), arrayBufferView->byteLength()); |
- const long long length = blobData->length(); |
- Blob* blob = Blob::create(BlobDataHandle::create(blobData.release(), length)); |
- return create(context, blob, ResponseInit(responseInit, exceptionState), exceptionState); |
- } |
- ASSERT_NOT_REACHED(); |
- return nullptr; |
-} |
- |
-Response* Response::create(ExecutionContext* context, Blob* body, const ResponseInit& responseInit, ExceptionState& exceptionState) |
-{ |
- // "1. If |init|'s status member is not in the range 200 to 599, throw a |
- // RangeError." |
- if (responseInit.status < 200 || 599 < responseInit.status) { |
- exceptionState.throwRangeError("Invalid status"); |
- return 0; |
- } |
- |
- // FIXME: "2. If |init|'s statusText member does not match the Reason-Phrase |
- // token production, throw a TypeError." |
- |
- // "3. Let |r| be a new Response object, associated with a new response, |
- // Headers object, and Body object." |
- Response* r = new Response(context); |
- r->suspendIfNeeded(); |
- |
- // "4. Set |r|'s response's status to |init|'s status member." |
- r->m_response->setStatus(responseInit.status); |
- |
- // "5. Set |r|'s response's status message to |init|'s statusText member." |
- r->m_response->setStatusMessage(AtomicString(responseInit.statusText)); |
- |
- // "6. If |init|'s headers member is present, run these substeps:" |
- if (responseInit.headers) { |
- // "1. Empty |r|'s response's header list." |
- r->m_response->headerList()->clearList(); |
- // "2. Fill |r|'s Headers object with |init|'s headers member. Rethrow |
- // any exceptions." |
- r->m_headers->fillWith(responseInit.headers.get(), exceptionState); |
- if (exceptionState.hadException()) |
- return 0; |
- } else if (!responseInit.headersDictionary.isUndefinedOrNull()) { |
- // "1. Empty |r|'s response's header list." |
- r->m_response->headerList()->clearList(); |
- // "2. Fill |r|'s Headers object with |init|'s headers member. Rethrow |
- // any exceptions." |
- r->m_headers->fillWith(responseInit.headersDictionary, exceptionState); |
- if (exceptionState.hadException()) |
- return 0; |
- } |
- // "7. If body is given, run these substeps:" |
- if (body) { |
- // "1. Let |stream| and |Content-Type| be the result of extracting body." |
- // "2. Set |r|'s response's body to |stream|." |
- // "3. If |Content-Type| is non-null and |r|'s response's header list |
- // contains no header named `Content-Type`, append `Content-Type`/ |
- // |Content-Type| to |r|'s response's header list." |
- r->m_response->setBlobDataHandle(body->blobDataHandle()); |
- if (!body->type().isNull() && !r->m_response->headerList()->has("Content-Type")) |
- r->m_response->headerList()->append("Content-Type", body->type()); |
- } |
- |
- // FIXME: "8. Set |r|'s MIME type to the result of extracting a MIME type |
- // from |r|'s response's header list." |
- |
- // "9. Return |r|." |
- return r; |
-} |
- |
-Response* Response::create(ExecutionContext* context, FetchResponseData* response) |
-{ |
- Response* r = new Response(context, response); |
- r->suspendIfNeeded(); |
- return r; |
-} |
- |
-Response* Response::create(ExecutionContext* context, const WebServiceWorkerResponse& webResponse) |
-{ |
- FetchResponseData* responseData = createFetchResponseDataFromWebResponse(webResponse); |
- Response* r = new Response(context, responseData); |
- r->suspendIfNeeded(); |
- return r; |
-} |
- |
-Response* Response::createClone(const Response& cloneFrom) |
-{ |
- Response* r = new Response(cloneFrom); |
- r->suspendIfNeeded(); |
- return r; |
-} |
- |
-String Response::type() const |
-{ |
- // "The type attribute's getter must return response's type." |
- switch (m_response->type()) { |
- case FetchResponseData::BasicType: |
- return "basic"; |
- case FetchResponseData::CORSType: |
- return "cors"; |
- case FetchResponseData::DefaultType: |
- return "default"; |
- case FetchResponseData::ErrorType: |
- return "error"; |
- case FetchResponseData::OpaqueType: |
- return "opaque"; |
- } |
- ASSERT_NOT_REACHED(); |
- return ""; |
-} |
- |
-String Response::url() const |
-{ |
- // "The url attribute's getter must return the empty string if response's |
- // url is null and response's url, serialized with the exclude fragment |
- // flag set, otherwise." |
- if (!m_response->url().hasFragmentIdentifier()) |
- return m_response->url(); |
- KURL url(m_response->url()); |
- url.removeFragmentIdentifier(); |
- return url; |
-} |
- |
-unsigned short Response::status() const |
-{ |
- // "The status attribute's getter must return response's status." |
- return m_response->status(); |
-} |
- |
-String Response::statusText() const |
-{ |
- // "The statusText attribute's getter must return response's status message." |
- return m_response->statusMessage(); |
-} |
- |
-Headers* Response::headers() const |
-{ |
- // "The headers attribute's getter must return the associated Headers object." |
- return m_headers; |
-} |
- |
-Response* Response::clone(ExceptionState& exceptionState) const |
-{ |
- if (bodyUsed()) { |
- exceptionState.throwTypeError("Response body is already used"); |
- return nullptr; |
- } |
- if (streamAccessed()) { |
- // FIXME: Support clone() of the stream accessed Response. |
- exceptionState.throwTypeError("clone() of the Response which .body is accessed is not supported."); |
- return nullptr; |
- } |
- return Response::createClone(*this); |
-} |
- |
-void Response::populateWebServiceWorkerResponse(WebServiceWorkerResponse& response) |
-{ |
- m_response->populateWebServiceWorkerResponse(response); |
-} |
- |
-Response::Response(ExecutionContext* context) |
- : Body(context) |
- , m_response(FetchResponseData::create()) |
- , m_headers(Headers::create(m_response->headerList())) |
-{ |
- m_headers->setGuard(Headers::ResponseGuard); |
-} |
- |
-Response::Response(const Response& clone_from) |
- : Body(clone_from) |
- , m_response(clone_from.m_response->clone()) |
- , m_headers(Headers::create(m_response->headerList())) |
-{ |
-} |
- |
-Response::Response(ExecutionContext* context, FetchResponseData* response) |
- : Body(context) |
- , m_response(response) |
- , m_headers(Headers::create(m_response->headerList())) |
-{ |
- m_headers->setGuard(Headers::ResponseGuard); |
-} |
- |
-bool Response::hasBody() const |
-{ |
- return internalBlobDataHandle() || internalBuffer(); |
-} |
- |
-PassRefPtr<BlobDataHandle> Response::blobDataHandle() const |
-{ |
- return m_response->blobDataHandle(); |
-} |
- |
-BodyStreamBuffer* Response::buffer() const |
-{ |
- return m_response->buffer(); |
-} |
- |
-String Response::contentTypeForBuffer() const |
-{ |
- return m_response->contentTypeForBuffer(); |
-} |
- |
-PassRefPtr<BlobDataHandle> Response::internalBlobDataHandle() const |
-{ |
- return m_response->internalBlobDataHandle(); |
-} |
- |
-BodyStreamBuffer* Response::internalBuffer() const |
-{ |
- return m_response->internalBuffer(); |
-} |
- |
-String Response::internalContentTypeForBuffer() const |
-{ |
- return m_response->internalContentTypeForBuffer(); |
-} |
- |
-void Response::trace(Visitor* visitor) |
-{ |
- Body::trace(visitor); |
- visitor->trace(m_response); |
- visitor->trace(m_headers); |
-} |
- |
-} // namespace blink |