Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: Source/modules/serviceworkers/Response.cpp

Issue 478693005: Oilpan: Ship Oilpan for serviceworkers/ (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/modules/serviceworkers/Response.h ('k') | Source/modules/serviceworkers/Response.idl » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "bindings/core/v8/ExceptionState.h"
10 #include "core/fileapi/Blob.h" 10 #include "core/fileapi/Blob.h"
11 #include "modules/serviceworkers/FetchBodyStream.h" 11 #include "modules/serviceworkers/FetchBodyStream.h"
12 #include "modules/serviceworkers/ResponseInit.h" 12 #include "modules/serviceworkers/ResponseInit.h"
13 #include "public/platform/WebServiceWorkerResponse.h" 13 #include "public/platform/WebServiceWorkerResponse.h"
14 14
15 namespace blink { 15 namespace blink {
16 16
17 namespace { 17 namespace {
18 18
19 PassRefPtrWillBeRawPtr<FetchResponseData> createFetchResponseDataFromWebResponse (const WebServiceWorkerResponse& webResponse) 19 FetchResponseData* createFetchResponseDataFromWebResponse(const WebServiceWorker Response& webResponse)
20 { 20 {
21 RefPtrWillBeRawPtr<FetchResponseData> response; 21 FetchResponseData* response = 0;
22 if (200 <= webResponse.status() && webResponse.status() < 300) 22 if (200 <= webResponse.status() && webResponse.status() < 300)
23 response = FetchResponseData::create(); 23 response = FetchResponseData::create();
24 else 24 else
25 response = FetchResponseData::createNetworkErrorResponse(); 25 response = FetchResponseData::createNetworkErrorResponse();
26 26
27 response->setURL(webResponse.url()); 27 response->setURL(webResponse.url());
28 response->setStatus(webResponse.status()); 28 response->setStatus(webResponse.status());
29 response->setStatusMessage(webResponse.statusText()); 29 response->setStatusMessage(webResponse.statusText());
30 return response; 30 return response;
31 } 31 }
32 32
33 PassRefPtrWillBeRawPtr<Headers> createHeadersFromWebResponse(const WebServiceWor kerResponse& webResponse) 33 Headers* createHeadersFromWebResponse(const WebServiceWorkerResponse& webRespons e)
34 { 34 {
35 RefPtrWillBeRawPtr<Headers> headers = Headers::create(); 35 Headers* headers = Headers::create();
36 TrackExceptionState exceptionState; 36 TrackExceptionState exceptionState;
37 for (HashMap<String, String>::const_iterator i = webResponse.headers().begin (), end = webResponse.headers().end(); i != end; ++i) { 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); 38 headers->append(i->key, i->value, exceptionState);
39 if (exceptionState.hadException()) 39 if (exceptionState.hadException())
40 return PassRefPtrWillBeRawPtr<Headers>(); 40 return 0;
41 } 41 }
42 return headers; 42 return headers;
43 } 43 }
44 44
45 } 45 }
46 46
47 DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(Response); 47 Response* Response::create(Blob* body, const Dictionary& responseInit, Exception State& exceptionState)
48
49 PassRefPtrWillBeRawPtr<Response> Response::create(Blob* body, const Dictionary& responseInit, ExceptionState& exceptionState)
50 { 48 {
51 return create(body, ResponseInit(responseInit), exceptionState); 49 return create(body, ResponseInit(responseInit), exceptionState);
52 } 50 }
53 51
54 PassRefPtrWillBeRawPtr<Response> Response::create(const String& body, const Dict ionary& responseInit, ExceptionState& exceptionState) 52 Response* Response::create(const String& body, const Dictionary& responseInit, E xceptionState& exceptionState)
55 { 53 {
56 OwnPtr<BlobData> blobData = BlobData::create(); 54 OwnPtr<BlobData> blobData = BlobData::create();
57 blobData->appendText(body, false); 55 blobData->appendText(body, false);
58 // "Set |Content-Type| to `text/plain;charset=UTF-8`." 56 // "Set |Content-Type| to `text/plain;charset=UTF-8`."
59 blobData->setContentType("text/plain;charset=UTF-8"); 57 blobData->setContentType("text/plain;charset=UTF-8");
60 const long long length = blobData->length(); 58 const long long length = blobData->length();
61 RefPtrWillBeRawPtr<Blob> blob = Blob::create(BlobDataHandle::create(blobData .release(), length)); 59 RefPtrWillBeRawPtr<Blob> blob = Blob::create(BlobDataHandle::create(blobData .release(), length));
62 return create(blob.get(), ResponseInit(responseInit), exceptionState); 60 return create(blob.get(), ResponseInit(responseInit), exceptionState);
63 } 61 }
64 62
65 PassRefPtrWillBeRawPtr<Response> Response::create(Blob* body, const ResponseInit & responseInit, ExceptionState& exceptionState) 63 Response* Response::create(Blob* body, const ResponseInit& responseInit, Excepti onState& exceptionState)
66 { 64 {
67 // "1. If |init|'s status member is not in the range 200 to 599, throw a 65 // "1. If |init|'s status member is not in the range 200 to 599, throw a
68 // RangeError." 66 // RangeError."
69 if (responseInit.status < 200 || 599 < responseInit.status) { 67 if (responseInit.status < 200 || 599 < responseInit.status) {
70 exceptionState.throwRangeError("Invalid status"); 68 exceptionState.throwRangeError("Invalid status");
71 return nullptr; 69 return 0;
72 } 70 }
73 71
74 // FIXME: "2. If |init|'s statusText member does not match the Reason-Phrase 72 // FIXME: "2. If |init|'s statusText member does not match the Reason-Phrase
75 // token production, throw a TypeError." 73 // token production, throw a TypeError."
76 74
77 // "3. Let |r| be a new Response object, associated with a new response, 75 // "3. Let |r| be a new Response object, associated with a new response,
78 // Headers object, and FetchBodyStream object." 76 // Headers object, and FetchBodyStream object."
79 RefPtrWillBeRawPtr<Response> r = adoptRefWillBeNoop(new Response()); 77 Response* r = new Response();
80 78
81 // "4. Set |r|'s response's status to |init|'s status member." 79 // "4. Set |r|'s response's status to |init|'s status member."
82 r->m_response->setStatus(responseInit.status); 80 r->m_response->setStatus(responseInit.status);
83 81
84 // "5. Set |r|'s response's status message to |init|'s statusText member." 82 // "5. Set |r|'s response's status message to |init|'s statusText member."
85 r->m_response->setStatusMessage(AtomicString(responseInit.statusText)); 83 r->m_response->setStatusMessage(AtomicString(responseInit.statusText));
86 84
87 // "6. If |init|'s headers member is present, run these substeps:" 85 // "6. If |init|'s headers member is present, run these substeps:"
88 if (responseInit.headers) { 86 if (responseInit.headers) {
89 // "1. Empty |r|'s response's header list." 87 // "1. Empty |r|'s response's header list."
90 r->m_response->headerList()->clearList(); 88 r->m_response->headerList()->clearList();
91 // "2. Fill |r|'s Headers object with |init|'s headers member. Rethrow 89 // "2. Fill |r|'s Headers object with |init|'s headers member. Rethrow
92 // any exceptions." 90 // any exceptions."
93 r->m_headers->fillWith(responseInit.headers.get(), exceptionState); 91 r->m_headers->fillWith(responseInit.headers.get(), exceptionState);
94 if (exceptionState.hadException()) 92 if (exceptionState.hadException())
95 return nullptr; 93 return 0;
96 } else if (!responseInit.headersDictionary.isUndefinedOrNull()) { 94 } else if (!responseInit.headersDictionary.isUndefinedOrNull()) {
97 // "1. Empty |r|'s response's header list." 95 // "1. Empty |r|'s response's header list."
98 r->m_response->headerList()->clearList(); 96 r->m_response->headerList()->clearList();
99 // "2. Fill |r|'s Headers object with |init|'s headers member. Rethrow 97 // "2. Fill |r|'s Headers object with |init|'s headers member. Rethrow
100 // any exceptions." 98 // any exceptions."
101 r->m_headers->fillWith(responseInit.headersDictionary, exceptionState); 99 r->m_headers->fillWith(responseInit.headersDictionary, exceptionState);
102 if (exceptionState.hadException()) 100 if (exceptionState.hadException())
103 return nullptr; 101 return 0;
104 } 102 }
105 // "7. If body is given, run these substeps:" 103 // "7. If body is given, run these substeps:"
106 if (body) { 104 if (body) {
107 // "1. Let |stream| and |Content-Type| be the result of extracting body. " 105 // "1. Let |stream| and |Content-Type| be the result of extracting body. "
108 // "2. Set |r|'s response's body to |stream|." 106 // "2. Set |r|'s response's body to |stream|."
109 // "3. If |Content-Type| is non-null and |r|'s response's header list 107 // "3. If |Content-Type| is non-null and |r|'s response's header list
110 // contains no header named `Content-Type`, append `Content-Type`/ 108 // contains no header named `Content-Type`, append `Content-Type`/
111 // |Content-Type| to |r|'s response's header list." 109 // |Content-Type| to |r|'s response's header list."
112 r->m_response->setBlobDataHandle(body->blobDataHandle()); 110 r->m_response->setBlobDataHandle(body->blobDataHandle());
113 if (!body->type().isNull() && !r->m_response->headerList()->has("Content -Type")) 111 if (!body->type().isNull() && !r->m_response->headerList()->has("Content -Type"))
114 r->m_response->headerList()->append("Content-Type", body->type()); 112 r->m_response->headerList()->append("Content-Type", body->type());
115 } 113 }
116 114
117 // FIXME: "8. Set |r|'s FetchBodyStream object's MIME type to the result of 115 // FIXME: "8. Set |r|'s FetchBodyStream object's MIME type to the result of
118 // extracting a MIME type from |r|'s response's header list." 116 // extracting a MIME type from |r|'s response's header list."
119 117
120 // "9. Return |r|." 118 // "9. Return |r|."
121 return r.release(); 119 return r;
122 } 120 }
123 121
124 PassRefPtrWillBeRawPtr<Response> Response::create(PassRefPtrWillBeRawPtr<FetchRe sponseData> response) 122 Response* Response::create(FetchResponseData* response)
125 { 123 {
126 return adoptRefWillBeNoop(new Response(response)); 124 return new Response(response);
127 } 125 }
128 126
129 PassRefPtrWillBeRawPtr<Response> Response::create(const WebServiceWorkerResponse & webResponse) 127 Response* Response::create(const WebServiceWorkerResponse& webResponse)
130 { 128 {
131 return adoptRefWillBeNoop(new Response(webResponse)); 129 return new Response(webResponse);
132 } 130 }
133 131
134 String Response::type() const 132 String Response::type() const
135 { 133 {
136 // "The type attribute's getter must return response's type." 134 // "The type attribute's getter must return response's type."
137 switch (m_response->type()) { 135 switch (m_response->type()) {
138 case FetchResponseData::BasicType: 136 case FetchResponseData::BasicType:
139 return "basic"; 137 return "basic";
140 case FetchResponseData::CORSType: 138 case FetchResponseData::CORSType:
141 return "cors"; 139 return "cors";
(...skipping 25 matching lines...) Expand all
167 // "The status attribute's getter must return response's status." 165 // "The status attribute's getter must return response's status."
168 return m_response->status(); 166 return m_response->status();
169 } 167 }
170 168
171 String Response::statusText() const 169 String Response::statusText() const
172 { 170 {
173 // "The statusText attribute's getter must return response's status message. " 171 // "The statusText attribute's getter must return response's status message. "
174 return m_response->statusMessage(); 172 return m_response->statusMessage();
175 } 173 }
176 174
177 PassRefPtrWillBeRawPtr<Headers> Response::headers() const 175 Headers* Response::headers() const
178 { 176 {
179 // "The headers attribute's getter must return the associated Headers object ." 177 // "The headers attribute's getter must return the associated Headers object ."
180 return m_headers; 178 return m_headers;
181 } 179 }
182 180
183 PassRefPtrWillBeRawPtr<FetchBodyStream> Response::body(ExecutionContext* context ) 181 FetchBodyStream* Response::body(ExecutionContext* context)
184 { 182 {
185 if (!m_response->blobDataHandle()) 183 if (!m_response->blobDataHandle())
186 return nullptr; 184 return 0;
187 if (!m_fetchBodyStream) 185 if (!m_fetchBodyStream)
188 m_fetchBodyStream = FetchBodyStream::create(context, m_response->blobDat aHandle()); 186 m_fetchBodyStream = FetchBodyStream::create(context, m_response->blobDat aHandle());
189 return m_fetchBodyStream; 187 return m_fetchBodyStream;
190 } 188 }
191 189
192 void Response::populateWebServiceWorkerResponse(WebServiceWorkerResponse& respon se) 190 void Response::populateWebServiceWorkerResponse(WebServiceWorkerResponse& respon se)
193 { 191 {
194 m_response->populateWebServiceWorkerResponse(response); 192 m_response->populateWebServiceWorkerResponse(response);
195 } 193 }
196 194
197 Response::Response() 195 Response::Response()
198 : m_response(FetchResponseData::create()) 196 : m_response(FetchResponseData::create())
199 , m_headers(Headers::create(m_response->headerList())) 197 , m_headers(Headers::create(m_response->headerList()))
200 { 198 {
201 m_headers->setGuard(Headers::ResponseGuard); 199 m_headers->setGuard(Headers::ResponseGuard);
202 ScriptWrappable::init(this); 200 ScriptWrappable::init(this);
203 } 201 }
204 202
205 Response::Response(PassRefPtrWillBeRawPtr<FetchResponseData> response) 203 Response::Response(FetchResponseData* response)
206 : m_response(response) 204 : m_response(response)
207 , m_headers(Headers::create(m_response->headerList())) 205 , m_headers(Headers::create(m_response->headerList()))
208 { 206 {
209 m_headers->setGuard(Headers::ResponseGuard); 207 m_headers->setGuard(Headers::ResponseGuard);
210 ScriptWrappable::init(this); 208 ScriptWrappable::init(this);
211 } 209 }
212 210
213 // FIXME: Handle response body data. 211 // FIXME: Handle response body data.
214 Response::Response(const WebServiceWorkerResponse& webResponse) 212 Response::Response(const WebServiceWorkerResponse& webResponse)
215 : m_response(createFetchResponseDataFromWebResponse(webResponse)) 213 : m_response(createFetchResponseDataFromWebResponse(webResponse))
216 , m_headers(createHeadersFromWebResponse(webResponse)) 214 , m_headers(createHeadersFromWebResponse(webResponse))
217 { 215 {
218 m_headers->setGuard(Headers::ResponseGuard); 216 m_headers->setGuard(Headers::ResponseGuard);
219 ScriptWrappable::init(this); 217 ScriptWrappable::init(this);
220 } 218 }
221 219
222 void Response::trace(Visitor* visitor) 220 void Response::trace(Visitor* visitor)
223 { 221 {
224 visitor->trace(m_response); 222 visitor->trace(m_response);
225 visitor->trace(m_headers); 223 visitor->trace(m_headers);
226 visitor->trace(m_fetchBodyStream); 224 visitor->trace(m_fetchBodyStream);
227 } 225 }
228 226
229 } // namespace blink 227 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/serviceworkers/Response.h ('k') | Source/modules/serviceworkers/Response.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698