Chromium Code Reviews| Index: Source/modules/serviceworkers/Response.cpp |
| diff --git a/Source/modules/serviceworkers/Response.cpp b/Source/modules/serviceworkers/Response.cpp |
| index e7dc47e47ef597b41315d3be0891a5cdbeaac314..2030c9d2aa87c1d027b43ae078bc2569db71df20 100644 |
| --- a/Source/modules/serviceworkers/Response.cpp |
| +++ b/Source/modules/serviceworkers/Response.cpp |
| @@ -6,12 +6,44 @@ |
| #include "Response.h" |
| #include "bindings/core/v8/Dictionary.h" |
| +#include "bindings/core/v8/ExceptionState.h" |
| #include "core/fileapi/Blob.h" |
| #include "modules/serviceworkers/FetchBodyStream.h" |
| #include "modules/serviceworkers/ResponseInit.h" |
| +#include "public/platform/WebServiceWorkerResponse.h" |
| namespace blink { |
| +namespace { |
| + |
| +PassRefPtrWillBeRawPtr<FetchResponseData> createFetchResponseDataFromWebResponse(const WebServiceWorkerResponse& webResponse) |
| +{ |
| + RefPtrWillBeRawPtr<FetchResponseData> response; |
| + 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()); |
| + return response; |
| +} |
| + |
| +PassRefPtrWillBeRawPtr<Headers> createHeadersFromWebResponse(const WebServiceWorkerResponse& webResponse) |
| +{ |
| + RefPtrWillBeRawPtr<Headers> headers = Headers::create(); |
| + TrackExceptionState exceptionState; |
| + for (HashMap<String, String>::const_iterator i = webResponse.headers().begin(), end = webResponse.headers().end(); i != end; ++i) { |
|
jsbell
2014/08/29 17:53:23
Not new in this CL, but: does HashMap preserve ins
gavinp
2014/08/29 18:28:38
HashMap does NOT preserve order.
I'm adding a FIX
|
| + headers->append(i->key, i->value, exceptionState); |
| + if (exceptionState.hadException()) |
| + return PassRefPtrWillBeRawPtr<Headers>(); |
| + } |
| + return headers; |
| +} |
| + |
| +} |
| + |
| DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(Response); |
| PassRefPtrWillBeRawPtr<Response> Response::create(Blob* body, const Dictionary& responseInit, ExceptionState& exceptionState) |
| @@ -98,6 +130,11 @@ PassRefPtrWillBeRawPtr<Response> Response::create(PassRefPtrWillBeRawPtr<FetchRe |
| return adoptRefWillBeNoop(new Response(response)); |
| } |
| +PassRefPtrWillBeRawPtr<Response> Response::create(const WebServiceWorkerResponse& webResponse) |
| +{ |
| + return adoptRefWillBeNoop(new Response(webResponse)); |
| +} |
| + |
| String Response::type() const |
| { |
| // "The type attribute's getter must return response's type." |
| @@ -177,6 +214,15 @@ Response::Response(PassRefPtrWillBeRawPtr<FetchResponseData> response) |
| ScriptWrappable::init(this); |
| } |
| +// FIXME: Handle response body data. |
| +Response::Response(const WebServiceWorkerResponse& webResponse) |
| + : m_response(createFetchResponseDataFromWebResponse(webResponse)) |
| + , m_headers(createHeadersFromWebResponse(webResponse)) |
| +{ |
| + m_headers->setGuard(Headers::ResponseGuard); |
| + ScriptWrappable::init(this); |
| +} |
| + |
| void Response::trace(Visitor* visitor) |
| { |
| visitor->trace(m_response); |