OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "Response.h" | 6 #include "Response.h" |
7 | 7 |
8 #include "bindings/core/v8/Dictionary.h" | 8 #include "bindings/core/v8/Dictionary.h" |
| 9 #include "bindings/core/v8/ExceptionState.h" |
9 #include "core/fileapi/Blob.h" | 10 #include "core/fileapi/Blob.h" |
10 #include "modules/serviceworkers/FetchBodyStream.h" | 11 #include "modules/serviceworkers/FetchBodyStream.h" |
11 #include "modules/serviceworkers/ResponseInit.h" | 12 #include "modules/serviceworkers/ResponseInit.h" |
| 13 #include "public/platform/WebServiceWorkerResponse.h" |
12 | 14 |
13 namespace blink { | 15 namespace blink { |
14 | 16 |
| 17 namespace { |
| 18 |
| 19 PassRefPtrWillBeRawPtr<FetchResponseData> createFetchResponseDataFromWebResponse
(const WebServiceWorkerResponse& webResponse) |
| 20 { |
| 21 RefPtrWillBeRawPtr<FetchResponseData> response; |
| 22 if (200 <= webResponse.status() && webResponse.status() < 300) |
| 23 response = FetchResponseData::create(); |
| 24 else |
| 25 response = FetchResponseData::createNetworkErrorResponse(); |
| 26 |
| 27 response->setURL(webResponse.url()); |
| 28 response->setStatus(webResponse.status()); |
| 29 response->setStatusMessage(webResponse.statusText()); |
| 30 return response; |
| 31 } |
| 32 |
| 33 PassRefPtrWillBeRawPtr<Headers> createHeadersFromWebResponse(const WebServiceWor
kerResponse& webResponse) |
| 34 { |
| 35 RefPtrWillBeRawPtr<Headers> headers = Headers::create(); |
| 36 TrackExceptionState exceptionState; |
| 37 for (HashMap<String, String>::const_iterator i = webResponse.headers().begin
(), end = webResponse.headers().end(); i != end; ++i) { |
| 38 headers->append(i->key, i->value, exceptionState); |
| 39 if (exceptionState.hadException()) |
| 40 return PassRefPtrWillBeRawPtr<Headers>(); |
| 41 } |
| 42 return headers; |
| 43 } |
| 44 |
| 45 } |
| 46 |
15 DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(Response); | 47 DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(Response); |
16 | 48 |
17 PassRefPtrWillBeRawPtr<Response> Response::create(Blob* body, const Dictionary&
responseInit, ExceptionState& exceptionState) | 49 PassRefPtrWillBeRawPtr<Response> Response::create(Blob* body, const Dictionary&
responseInit, ExceptionState& exceptionState) |
18 { | 50 { |
19 return create(body, ResponseInit(responseInit), exceptionState); | 51 return create(body, ResponseInit(responseInit), exceptionState); |
20 } | 52 } |
21 | 53 |
22 PassRefPtrWillBeRawPtr<Response> Response::create(const String& body, const Dict
ionary& responseInit, ExceptionState& exceptionState) | 54 PassRefPtrWillBeRawPtr<Response> Response::create(const String& body, const Dict
ionary& responseInit, ExceptionState& exceptionState) |
23 { | 55 { |
24 OwnPtr<BlobData> blobData = BlobData::create(); | 56 OwnPtr<BlobData> blobData = BlobData::create(); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 | 119 |
88 // "9. Return |r|." | 120 // "9. Return |r|." |
89 return r.release(); | 121 return r.release(); |
90 } | 122 } |
91 | 123 |
92 PassRefPtrWillBeRawPtr<Response> Response::create(PassRefPtrWillBeRawPtr<FetchRe
sponseData> response) | 124 PassRefPtrWillBeRawPtr<Response> Response::create(PassRefPtrWillBeRawPtr<FetchRe
sponseData> response) |
93 { | 125 { |
94 return adoptRefWillBeNoop(new Response(response)); | 126 return adoptRefWillBeNoop(new Response(response)); |
95 } | 127 } |
96 | 128 |
| 129 PassRefPtrWillBeRawPtr<Response> Response::create(const WebServiceWorkerResponse
& webResponse) |
| 130 { |
| 131 return adoptRefWillBeNoop(new Response(webResponse)); |
| 132 } |
| 133 |
97 String Response::type() const | 134 String Response::type() const |
98 { | 135 { |
99 // "The type attribute's getter must return response's type." | 136 // "The type attribute's getter must return response's type." |
100 switch (m_response->type()) { | 137 switch (m_response->type()) { |
101 case FetchResponseData::BasicType: | 138 case FetchResponseData::BasicType: |
102 return "basic"; | 139 return "basic"; |
103 case FetchResponseData::CORSType: | 140 case FetchResponseData::CORSType: |
104 return "cors"; | 141 return "cors"; |
105 case FetchResponseData::DefaultType: | 142 case FetchResponseData::DefaultType: |
106 return "default"; | 143 return "default"; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 } | 203 } |
167 | 204 |
168 Response::Response(PassRefPtrWillBeRawPtr<FetchResponseData> response) | 205 Response::Response(PassRefPtrWillBeRawPtr<FetchResponseData> response) |
169 : m_response(response) | 206 : m_response(response) |
170 , m_headers(Headers::create(m_response->headerList())) | 207 , m_headers(Headers::create(m_response->headerList())) |
171 { | 208 { |
172 m_headers->setGuard(Headers::ResponseGuard); | 209 m_headers->setGuard(Headers::ResponseGuard); |
173 ScriptWrappable::init(this); | 210 ScriptWrappable::init(this); |
174 } | 211 } |
175 | 212 |
| 213 // FIXME: Handle response body data. |
| 214 Response::Response(const WebServiceWorkerResponse& webResponse) |
| 215 : m_response(createFetchResponseDataFromWebResponse(webResponse)) |
| 216 , m_headers(createHeadersFromWebResponse(webResponse)) |
| 217 { |
| 218 m_headers->setGuard(Headers::ResponseGuard); |
| 219 ScriptWrappable::init(this); |
| 220 } |
| 221 |
176 void Response::trace(Visitor* visitor) | 222 void Response::trace(Visitor* visitor) |
177 { | 223 { |
178 visitor->trace(m_response); | 224 visitor->trace(m_response); |
179 visitor->trace(m_headers); | 225 visitor->trace(m_headers); |
180 visitor->trace(m_fetchBodyStream); | 226 visitor->trace(m_fetchBodyStream); |
181 } | 227 } |
182 | 228 |
183 } // namespace blink | 229 } // namespace blink |
OLD | NEW |